リファクタリング(refactoring)

分類
マネジメント系 ソフトウェア開発管理技術
出る試験
基本情報応用情報
重要度
★★★☆☆

外から見た動きを変えずに、ソースコードの構造を整理すること。機能を増やす作業とは分けて行う。

もう少し詳しい説明

リファクタリングは、外から見た動きを変えずに、ソースコードの構造を整理することです。

変えるものと変えないもの

変わるか
ソースコードの構造変わる
外から見た動き変わらない
入力に対する出力変わらない
機能の数変わらない

他の作業との区別

作業外から見た動き
リファクタリング変わらない
機能の追加増える
不具合の修正変わる(正しくなる)
性能の改善速さが変わる

同時に行わないところが決まりです。

混ぜると起きること
整理と機能追加を同時に行う動きが変わったとき、どちらが原因か分からない
整理と不具合の修正を同時に行うテストが通らない理由が切り分けられない

整理の回と、機能を変える回を分けます。 整理だけの変更なら、テストの結果は変わらないはずだ、という形で確かめられます。

なぜ整理するのか

放っておくと整理すると
同じ処理が何か所にも増える1か所にまとまり、直すときに1回で済む
1つの処理が長くなり、読めなくなる分かれて、読めるようになる
手を入れるたびに別の場所が壊れる影響する範囲が狭くなる
新しい人が読めない読んで分かる形になる

手を入れる速さが落ちていくことを防ぐための作業です。 機能が増えないので、すぐには効果が見えません。

よく行う整理

整理中身
名前を分かる名前に変えるa、tmp のような名前を、中身を表す名前にする
長い処理を分ける1つの処理を、意味のまとまりで分ける
重複をまとめる同じ処理が複数あるところを1つにする
深い入れ子を浅くするif の入れ子を減らす
使われていないものを消す呼ばれない処理、使われない変数

安全に行うための前提

テストが無い状態で整理すると、動きが変わったことに気づけません。

手順すること
1先にテストを用意する(いまの動きを確かめられる状態にする)
2小さく整理する
3テストを実行して、結果が変わっていないことを確かめる
42と3を繰り返す

一度に大きく変えないところが要点です。 小さく変えて確かめる形にすると、動きが変わった時点が分かります。

変更のたびに自動でテストを動かす仕組み(継続的インテグレーション)があると、この確認が早く回ります。

進め方の中での置き場所

進め方置き場所
アジャイル各回の中に組み込む。機能の追加と同じ回に、別の作業として入れる
ウォーターフォール工程の中に入れにくい。保守の段階で行うことが多い

繰り返して作る進め方では、整理を続けることが前提になります。 作って直すのを繰り返すと、構造が崩れていくためです。

時間が取れないとき

起きること中身
整理を後回しにし続ける手を入れる速さが下がっていく
その状態が積み上がる技術的負債と呼ばれる状態になる

負債という言い方は、後で返す必要がある、という意味で使われています。 返さないままにすると、新しい機能を作る時間が、既存の部分の手当てに取られていきます。

一方で、

整理に時間をかけすぎると中身
機能が進まない外から見た成果が出ない
終わりが決まらないどこまで整理するかの線が引きにくい

どこまで整理するかは、手を入れる予定があるかで決めるという考え方があります。これから触る部分を整理し、触らない部分はそのままにする形です。

試験ではこう出る

科目A(旧・午前)では、用語の意味が問われます。外から見た動きを変えない、という部分が答えの軸です。機能追加や不具合の修正と並べて、どれがリファクタリングかを選ぶ形が多くあります。

午後や応用情報(プロジェクトマネジメント、開発技術)では、作業の一覧の中に出てきます。この作業を入れる理由、整理の回を分ける理由、という読み取りになります。

関連する用語

アジャイル開発
繰り返して作る進め方。その中でこの作業を挟む
継続的インテグレーション
変更のたびに自動でテストする仕組み。整理の安全網になる
ホワイトボックステストとブラックボックステスト
動きが変わっていないことを確かめる方法
ソフトウェア保守
作ったあとの手入れ。整理もここに含まれる
構造化プログラミング
読みやすい構造にする考え方

ミニクイズ

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

正解は 2番:外部から見た振る舞いを変えずに、ソースコードの内部構造を改善すること

リファクタリングは、外から見た動きを変えないまま、ソースコードの内部の構造を整えることです。機能の追加、不具合の修正、速さの改善は、いずれも外から見た動きや結果が変わる作業なので、リファクタリングとは分けて考えます。これらを同時に行うと、動きが変わった原因が構造の整理なのか別の変更なのか分からなくなります。

間違えた用語の復習リストを見る →

この分野をまとめて解く → システム開発とユーザーインタフェースのミニテスト(全40問)

最終更新:2026-11-09