<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Refactoring on 設計で、迷わなくなるために | 奥田智紘</title><link>https://design.okuda-studio.com/tags/refactoring/</link><description>Recent content in Refactoring on 設計で、迷わなくなるために | 奥田智紘</description><generator>Hugo -- 0.159.2</generator><language>ja</language><lastBuildDate>Wed, 04 Mar 2026 13:00:00 +0900</lastBuildDate><atom:link href="https://design.okuda-studio.com/tags/refactoring/index.xml" rel="self" type="application/rss+xml"/><item><title>リファクタリングには二種類ある</title><link>https://design.okuda-studio.com/posts/0013-refactoring-type/</link><pubDate>Wed, 04 Mar 2026 13:00:00 +0900</pubDate><guid>https://design.okuda-studio.com/posts/0013-refactoring-type/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AB%E3%81%AF%E4%BA%8C%E7%A8%AE%E9%A1%9E%E3%81%82%E3%82%8B--%E6%A7%8B%E9%80%A0%E3%82%92%E5%A4%89%E3%81%88%E3%82%8B%E3%82%82%E3%81%AE%E3%81%A8%E6%A6%82%E5%BF%B5%E3%82%92%E5%A4%89%E3%81%88%E3%82%8B%E3%82%82%E3%81%AE"&gt;リファクタリングには二種類ある ― 構造を変えるものと、概念を変えるもの&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%81%BE%E3%81%9A%E6%95%B4%E7%90%86%E6%A7%8B%E9%80%A0%E3%81%A8%E6%A6%82%E5%BF%B5%E3%81%AE%E9%81%95%E3%81%84"&gt;まず整理：構造と概念の違い&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E6%A7%8B%E9%80%A0%E3%81%AE%E5%A4%89%E6%9B%B4"&gt;構造の変更&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%A6%82%E5%BF%B5%E3%81%AE%E5%A4%89%E6%9B%B4"&gt;概念の変更&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%81%AA%E3%81%9C%E3%81%93%E3%81%AE%E5%8C%BA%E5%88%A5%E3%81%8C%E9%87%8D%E8%A6%81%E3%81%AA%E3%81%AE%E3%81%8B"&gt;なぜこの区別が重要なのか？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%81%AA%E3%81%9C%E9%80%9A%E5%B8%B8%E3%81%AF%E6%A7%8B%E9%80%A0--%E6%A6%82%E5%BF%B5%E3%81%AA%E3%81%AE%E3%81%8B"&gt;なぜ通常は「構造 → 概念」なのか？&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#-%E5%A4%89%E6%9B%B4%E3%81%AE%E5%AE%89%E5%85%A8%E6%80%A7"&gt;① 変更の安全性&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#-%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%81%AE%E3%81%97%E3%82%84%E3%81%99%E3%81%95"&gt;② デバッグのしやすさ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#-%E8%A4%87%E9%9B%91%E6%80%A7%E3%81%AE%E5%A2%97%E5%B9%85"&gt;③ 複雑性の増幅&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%AE%9F%E5%8B%99%E3%81%A7%E3%81%AE%E4%BD%BF%E3%81%84%E5%88%86%E3%81%91%E7%A7%81%E3%81%AE%E5%84%AA%E5%85%88%E9%A0%86%E4%BD%8D"&gt;実務での使い分け（私の優先順位）&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E7%AC%AC1%E6%AE%B5%E9%9A%8E%E5%8F%AF%E8%A6%96%E5%8C%96"&gt;第1段階：可視化&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E7%AC%AC2%E6%AE%B5%E9%9A%8E%E6%A7%8B%E9%80%A0%E6%95%B4%E7%90%86"&gt;第2段階：構造整理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E7%AC%AC3%E6%AE%B5%E9%9A%8E%E8%B2%AC%E5%8B%99%E3%81%AE%E6%98%8E%E7%A2%BA%E5%8C%96"&gt;第3段階：責務の明確化&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E7%AC%AC4%E6%AE%B5%E9%9A%8E%E6%A6%82%E5%BF%B5%E5%BC%B7%E5%8C%96"&gt;第4段階：概念強化&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%81%BE%E3%81%A8%E3%82%81"&gt;まとめ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="リファクタリングには二種類ある--構造を変えるものと概念を変えるもの"&gt;リファクタリングには二種類ある ― 構造を変えるものと、概念を変えるもの&lt;/h1&gt;
&lt;p&gt;私は最近の失敗から、大きな学びを得ました。&lt;/p&gt;
&lt;p&gt;それは、&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;リファクタリングには二種類ある&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ということです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;構造&lt;/strong&gt; を変えるリファクタリング&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;概念&lt;/strong&gt; を変えるリファクタリング&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この区別を意識していなかったことが、バグの原因でした。&lt;/p&gt;
&lt;p&gt;この記事では、自分なりに整理した実務的な優先順位と共にまとめます。&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id="まず整理構造と概念の違い"&gt;まず整理：構造と概念の違い&lt;/h1&gt;
&lt;h2 id="構造の変更"&gt;構造の変更&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;関数抽出&lt;/li&gt;
&lt;li&gt;共通化&lt;/li&gt;
&lt;li&gt;重複削除&lt;/li&gt;
&lt;li&gt;名前変更&lt;/li&gt;
&lt;li&gt;ネスト解消&lt;/li&gt;
&lt;li&gt;責務分離&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;振る舞いは変えない（意味は同じ）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;これは「コードの形」を整える作業です。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="概念の変更"&gt;概念の変更&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Boolean → sealed class&lt;/li&gt;
&lt;li&gt;nullable → 非null設計&lt;/li&gt;
&lt;li&gt;エラー型明確化&lt;/li&gt;
&lt;li&gt;状態遷移の型化&lt;/li&gt;
&lt;li&gt;エンティティ再設計&lt;/li&gt;
&lt;li&gt;ドメインモデル再定義&lt;/li&gt;
&lt;li&gt;責務の再解釈&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;プログラムが表現する「意味」が変わる&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;これは「コードが何を表現しているか」を変える作業です。&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id="なぜこの区別が重要なのか"&gt;なぜこの区別が重要なのか？&lt;/h1&gt;
&lt;p&gt;私は「成功」という概念を Boolean で扱っていました。&lt;/p&gt;
&lt;p&gt;しかし実際には：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;作成成功&lt;/li&gt;
&lt;li&gt;更新成功&lt;/li&gt;
&lt;li&gt;失敗&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;という複数の意味がありました。&lt;/p&gt;
&lt;p&gt;Boolean に押し込めたことで、
&lt;strong&gt;意味の差が見えなくなり、無意識に共通化してしまった&lt;/strong&gt; のです。&lt;/p&gt;</description></item></channel></rss>