ソースコードの劣化や保守性低下の対策として、現状の挙動を大きく変えずにソースコードを修正する「リファクタリング」がある。ソースコードを修正する上での、リファクタリングのメリットとデメリットを紹介する。
アプリケーションのソースコードは、パッチ(修正プログラム)の適用、計画性のない保守や機能追加などを重ねるうちに、次第に管理しづらくなるものだ。こうした場合、開発者は「リファクタリング」か「リライト」のいずれかを選択する必要に迫られる。リファクタリングは、アプリケーションの挙動を大きく変えずに既存のソースコードを修正する手法だ。リライトは、既存のソースコードの大部分を破棄し、一から書き直す手法だ。
これらの手法にはどちらにもメリットとデメリットが存在し、どちらかが絶対的に優れているということはない。プロジェクトごとに、どちらが適しているのかを判断すべきだ。本連載は、リファクタリングとリライトそれぞれの長所と短所を比較し、適切な判断を下すための指針を示す。
冗長なソースコードを削除したり、さまざまな機能や役割を詰め込みすぎた1つの部品を、それぞれが単一の役割だけを担う、より小さな複数の部品に分割、整理したりする作業がリファクタリングの例だ。
設計から公開までの小規模なサイクルを素早く繰り返すことで、質の高いアプリケーションを継続的に提供することを目指す手法「エクストリームプログラミング」は、継続的なリファクタリングに重きを置いている。理論上、リファクタリングを重ねるたびにソースコードは洗練されることになる。
リファクタリング後のソースコードは、他の開発者が容易に理解できる状態であることが望ましい。これによって、修正の影響が怖くて誰も変更したがらないような複雑なソースコードを、皆が安心して自力で更新できる見通しの良いソースコードに変えることができる。
リライトのような大規模なソースコードの変更にはチームの合意が必要になる。これに対して、リファクタリングのような小規模の修正であれば、より少ない関係者との合意で済むことが一般的だ。開発者の判断で進められる場合もある。
モノリシック(巨大な一枚岩的)な構成から大規模な分散システムまで、どのようなアーキテクチャでもリファクタリングは可能だ。
リライトの場合、古いアプリケーションの保守と新しいアプリケーションの開発が並行して進むため、人員や予算などのリソースが二重で必要にになる。一方のリファクタリングは、現在稼働している単一のコードベース(ソースコード群)を直接改善する。このような進め方は、新機能の開発と並行して、効率的にソースコードの改善を進めることを可能にする。
リファクタリングはコードベース全体ではなく、必要な部分に限定して修正を進められる。作業範囲を絞って段階的に修正できるため、一度に大きな費用がかかりにくい。
リファクタリングはソースコードの一部を改善できるが、根本的なアーキテクチャの問題は解決できない。「Visual Basic 6.0」(1998年公開)のような古いプログラミング言語で書かれたソースコードは、リファクタリング後も実装言語はVisual Basic 6.0のままだ。
リファクタリングは現状のアーキテクチャやソースコードを維持、改善する手法だ。そのため、リファクタリング自体がアプリケーションに新機能をもたらすわけではない。
開発者個人のスキル、変更することに対する勇気に加え、チーム全体で規律ある開発をすることがリファクタリングには必要だ。複雑なリファクタリングパターンになじみがない開発者は、作業への着手をためらう可能性がある。
リファクタリングの目的は、「外部から見た動作を変えずに、内部の構造を改善する」ことにある。機能などの要素単位で動作を検証する「単体テスト」は、この点を保証してくれるテスト手段だ。単体テストを実施できる体制が整っていなければ、開発者は時として、リファクタリングによって意図せずにアプリケーションの機能を変更してしまう可能性におびえることになる。これが、リファクタリング経験が浅い開発者が、「リファクタリングはリスクがある、開発の阻害要因だ」と考えがちな原因だ。
リファクタリングは、1つの巨大で複雑な機能を、より小さな単一の役割を持つ部品群に分割していく作業だ。各部品の役割を明確かつシンプルにすることで、アプリケーション全体としての見通しが良くなる。一方で、この作業は結果として、ファイルや関数(機能)を増やしてしまう場合がある。
アプリケーションのアーキテクチャ自体に問題がある場合、ソースコードをきれいにするだけでは限界がある。そうなれば抜本的な解決策、つまりリライトを検討すべき時期だ。
次回はリライトのメリットとデメリットを紹介した上で、どちらの手法が適切なのかを見極めるポイントを解説する。
Copyright © ITmedia, Inc. All Rights Reserved.
本記事は制作段階でChatGPT等の生成系AIサービスを利用していますが、文責は編集部に帰属します。
なぜクラウド全盛の今「メインフレーム」が再び脚光を浴びるのか
メインフレームを支える人材の高齢化が進み、企業の基幹IT運用に大きなリスクが迫っている。一方で、メインフレームは再評価の時を迎えている。

「サイト内検索」&「ライブチャット」売れ筋TOP5(2025年5月)
今週は、サイト内検索ツールとライブチャットの国内売れ筋TOP5をそれぞれ紹介します。

「ECプラットフォーム」売れ筋TOP10(2025年5月)
今週は、ECプラットフォーム製品(ECサイト構築ツール)の国内売れ筋TOP10を紹介します。

「パーソナライゼーション」&「A/Bテスト」ツール売れ筋TOP5(2025年5月)
今週は、パーソナライゼーション製品と「A/Bテスト」ツールの国内売れ筋各TOP5を紹介し...