リファクタリング

リファクタリングの定義と典型手法、コードの不吉な臭い、安全な進め方を整理。

リファクタリングは『動作を変えずに内部構造を改善』する活動。Fowler の古典書籍の典型手法を覚えます。

鳴海 理央(普段) 鳴海 理央

リファクタリング は外部仕様を変えずに内部構造を改善する活動。
Martin Fowler の書籍 (1999, 2018) が古典で、メソッド抽出・変数のインライン化・条件分岐の整理など多数の手法があります。

砂原 ニコ(普段) 砂原 ニコ

なんでわざわざやるの?

緒方 ナオミ 先生(笑顔) 緒方 ナオミ 先生

技術的負債を継続的に返済して、変更容易性を保つためなのよ。
リファクタしないとコードはエントロピー的にどんどん複雑になって、最後は誰も触れなくなっちゃうの。

藤咲 まりあ(普段) 藤咲 まりあ

失敗しないコツって、あるのかなぁ?

鳴海 理央(普段) 鳴海 理央

(1) テストを揃える、(2) 小さく頻繁に行う、(3) 1つのリファクタでは1つの目的に絞る、(4) コミットを細かく分ける、ですね。
テストがない部分は『キャラクタライズテスト』で動作を固定してから着手します。

緒方 ナオミ 先生(普段) 緒方 ナオミ 先生

AP では『リファクタリングの定義』や『コードの不吉な臭い (重複・長すぎるメソッド・神クラス等)』が問われやすいわね。

確認クイズ

リファクタリングの定義として、最も適切なものはどれか。

  1. 外部仕様も内部構造も大幅に書き直して別の設計にすること
  2. 外部仕様を変えずに、コードの内部構造を改善すること
  3. 新機能を追加してプログラムを拡張すること
  4. テストを書きながら開発を進める手法
こたえを見る

正解: 2. 外部仕様を変えずに、コードの内部構造を改善すること

リファクタリングは『外部仕様 (動作・I/F) を変えずに、内部構造のみ改善する』活動。新機能追加や仕様変更とは明確に区別され、変更前後でテストが同じく通ることが必須です。

🔖 この記事の関連書籍

Amazonアソシエイトリンクを含みます。他分野は おすすめ書籍ページ へ。