本文へ移動

りふぁくたりんぐ

リファクタリング

外部から見た動作を変えずに、プログラムの内部構造を整理して改善する作業です。コードの可読性を高めて保守性を向上させるために行います。

詳しい説明

1. 定義

リファクタリングとは、プログラムの外部から見た動作を変えることなく、内部のコード構造を整理・改善する作業のことです。機能の追加やバグ修正を行うのではなく、コードの「品質」を向上させるために行います。

プログラムは長く運用していると、継ぎ足しで作られた箇所や複雑すぎる関数が増え、保守が困難になる「技術的負債」が溜まります。リファクタリングは、この負債を返済し、将来の変更や機能追加を容易にするために欠かせない保守作業です。

2. 仕組みと種類

具体的な手法としては、長すぎる関数を短く分割する、変数名を分かりやすい名前に変える、同じ処理を繰り返している箇所を関数としてまとめる、といった整理整頓が中心です。これらは「コードの臭い」と呼ばれる保守しにくいコードの特徴を取り除く作業です。

自動テストが整備されていることがリファクタリングの前提条件です。動作を変えていないことを証明するために、修正のたびにテストを実行して、昨日まで動いていた機能が今日も正しく動くことを保証しながら、少しずつコードを綺麗に書き換えていきます。

3. 試験ごとの視点

ITパスポート試験では、システム保守の重要性として問われます。機能追加だけでなく、保守性を高める作業が長期的な開発効率には不可欠であるという概念的な理解が求められます。単に動けば良いのではなく、綺麗に保つことが重要です。

基本情報技術者試験では、より具体的に、リファクタリングが技術的負債を解消する手段であることを問われます。テスト駆動開発やアジャイル開発のプロセスの中に組み込まれた不可欠な工程として理解し、動作が変わらないことを担保するための自動テストの存在が必須であると押さえます。

4. 紛らわしい語との違い

最適化とは区別が必要です。最適化はプログラムの実行速度やメモリ消費量を減らすための改善ですが、リファクタリングは「読みやすさ」「保守のしやすさ」を目的とします。最適化は往々にしてコードを複雑にするため、リファクタリングとはトレードオフの関係になることもあります。

バグ修正とは目的が明確に異なります。バグ修正は「誤った動作を正しい動作へ」と変える作業ですが、リファクタリングは「正しい動作を維持したまま、コードの書き方だけを変える」作業です。リファクタリング中にバグを混ぜてしまうことは最も避けるべき失敗です。

5. 身近な例

部屋の片付けを想像してください。不用品を捨て、本棚を整理し、服を分類する作業は、部屋で生活するという「機能」自体は何も変えません。しかし、整理整頓された部屋なら、必要なものをすぐに見つけられ、次に何かを作るときもスムーズに動けます。

プログラムのリファクタリングも同じで、プログラムを実行するという機能は変わりませんが、コードが綺麗になれば、開発者はバグを見つけやすくなり、新しい機能を追加する際の修正ミスも劇的に減ります。生産性を維持するための、投資的活動です。

試験で問われること

ITパスポート試験

  • 外部からの振る舞いを変えずに内部構造を改善することを押さえる。
  • 保守性を高める目的があることを理解する。
  • 技術的負債の解消に役立つことを押さえる。

基本情報技術者試験

  • リファクタリングの前後で動作を変えてはいけない(テストが必要)点を押さえる。
  • 最適化(パフォーマンス向上)とは目的が異なることを区別する。
  • 機能追加やバグ修正とは別物であることを押さえる。