リファクタリングか、リライトか【前編】
コードの“大掃除”「リファクタリング」とは? 主なメリットとデメリット
ソースコードの劣化や保守性低下の対策として、現状の挙動を大きく変えずにソースコードを修正する「リファクタリング」がある。ソースコードを修正する上での、リファクタリングのメリットとデメリットを紹介する。
アプリケーションのソースコードは、パッチ(修正プログラム)の適用、計画性のない保守や機能追加などを重ねるうちに、次第に管理しづらくなるものだ。こうした場合、開発者は「リファクタリング」か「リライト」のいずれかを選択する必要に迫られる。リファクタリングは、アプリケーションの挙動を大きく変えずに既存のソースコードを修正する手法だ。リライトは、既存のソースコードの大部分を破棄し、一から書き直す手法だ。
これらの手法にはどちらにもメリットとデメリットが存在し、どちらかが絶対的に優れているということはない。プロジェクトごとに、どちらが適しているのかを判断すべきだ。本連載は、リファクタリングとリライトそれぞれの長所と短所を比較し、適切な判断を下すための指針を示す。
リファクタリングのメリットとデメリット
冗長なソースコードを削除したり、さまざまな機能や役割を詰め込みすぎた1つの部品を、それぞれが単一の役割だけを担う、より小さな複数の部品に分割、整理したりする作業がリファクタリングの例だ。
設計から公開までの小規模なサイクルを素早く繰り返すことで、質の高いアプリケーションを継続的に提供することを目指す手法「エクストリームプログラミング」は、継続的なリファクタリングに重きを置いている。理論上、リファクタリングを重ねるたびにソースコードは洗練されることになる。
リファクタリング後のソースコードは、他の開発者が容易に理解できる状態であることが望ましい。これによって、修正の影響が怖くて誰も変更したがらないような複雑なソースコードを、皆が安心して自力で更新できる見通しの良いソースコードに変えることができる。
リファクタリングのメリット
メリット1.開発者の判断で進めてよい場合がある
リライトのような大規模なソースコードの変更にはチームの合意が必要になる。これに対して、リファクタリングのような小規模の修正であれば、より少ない関係者との合意で済むことが一般的だ。開発者の判断で進められる場合もある。
メリット2.アーキテクチャを選ばない
モノリシック(巨大な一枚岩的)な構成から大規模な分散システムまで、どのようなアーキテクチャでもリファクタリングは可能だ。
メリット3.リソースを効率的に活用できる
リライトの場合、古いアプリケーションの保守と新しいアプリケーションの開発が並行して進むため、人員や予算などのリソースが二重で必要にになる。一方のリファクタリングは、現在稼働している単一のコードベース(ソースコード群)を直接改善する。このような進め方は、新機能の開発と並行して、効率的にソースコードの改善を進めることを可能にする。
メリット3.費用を抑えやすい
リファクタリングはコードベース全体ではなく、必要な部分に限定して修正を進められる。作業範囲を絞って段階的に修正できるため、一度に大きな費用がかかりにくい。
リファクタリングのデメリット
デメリット1.効果が限定的
リファクタリングはソースコードの一部を改善できるが、根本的なアーキテクチャの問題は解決できない。「Visual Basic 6.0」(1998年公開)のような古いプログラミング言語で書かれたソースコードは、リファクタリング後も実装言語はVisual Basic 6.0のままだ。
デメリット2.新機能の追加には直結しない
リファクタリングは現状のアーキテクチャやソースコードを維持、改善する手法だ。そのため、リファクタリング自体がアプリケーションに新機能をもたらすわけではない。
デメリット3.スキルが求められる
開発者個人のスキル、変更することに対する勇気に加え、チーム全体で規律ある開発をすることがリファクタリングには必要だ。複雑なリファクタリングパターンになじみがない開発者は、作業への着手をためらう可能性がある。
リファクタリングの目的は、「外部から見た動作を変えずに、内部の構造を改善する」ことにある。機能などの要素単位で動作を検証する「単体テスト」は、この点を保証してくれるテスト手段だ。単体テストを実施できる体制が整っていなければ、開発者は時として、リファクタリングによって意図せずにアプリケーションの機能を変更してしまう可能性におびえることになる。これが、リファクタリング経験が浅い開発者が、「リファクタリングはリスクがある、開発の阻害要因だ」と考えがちな原因だ。
デメリット4.ソースコードの構成要素が増える可能性がある
リファクタリングは、1つの巨大で複雑な機能を、より小さな単一の役割を持つ部品群に分割していく作業だ。各部品の役割を明確かつシンプルにすることで、アプリケーション全体としての見通しが良くなる。一方で、この作業は結果として、ファイルや関数(機能)を増やしてしまう場合がある。
アプリケーションのアーキテクチャ自体に問題がある場合、ソースコードをきれいにするだけでは限界がある。そうなれば抜本的な解決策、つまりリライトを検討すべき時期だ。
次回はリライトのメリットとデメリットを紹介した上で、どちらの手法が適切なのかを見極めるポイントを解説する。
Copyright © ITmedia, Inc. All Rights Reserved.
本記事は制作段階でChatGPT等の生成系AIサービスを利用していますが、文責は編集部に帰属します。
TechTarget.AI
TechTarget.AI編集部は生成AIなどのサービスを利用し、米国TechTargetの記事を翻訳して国内向けにお届けします。
この記事の著者
関連記事
新着ホワイトペーパー PR
-
製品資料
[LRM株式会社] 「標的型攻撃メール」事例・サンプル集 -
製品資料
[LRM株式会社] セキュリティ教育はなぜ「年間計画」を立てる必要があるのか? -
製品資料
[LRM株式会社] セキュリティの重要性が伝わらない…… 効果がない社員教育から脱却する方法 -
製品資料
[LRM株式会社] 「標的型攻撃メール訓練」導入ガイド 社員の意識を確実に高める仕組みの作り方 -
事例
[株式会社マクニカ] アイカ工業に学ぶ脆弱性対策 情シスが把握できずにいたアセットも正確に把握
こんなメディアも見られています
TechTargetジャパンに関連する情報をお探しであれば、こちらのメディアもお役に立てるかもしれません。
ベンダーコンテンツ PR
From Informa TechTarget
SpecialPR
アクセスランキング
-
1
「VMware離れ」は本当か 3000社がVCF 9にかじを切った現実的な理由
-
2
100億円の「Linux更新」を回避 みずほ銀行が選んだ“おきて破り”のRHEL延命策
-
3
Microsoft製品でここまで自動化できる 情シスがやめられる手作業10選
-
4
「Microsoft 365」が乗っ取られる 跡形もなくMFAを破る手口
-
5
Oracle巨大ITプロジェクトはなぜつまずいたのか 8年で導入1割、追加で170億ドル
-
6
Netflixのバックエンドは「ほぼJava」 3000超のアプリを支える開発基盤の裏側
-
7
エンジニアが選考を辞退する本当の理由 7割が隠す“面接の違和感”とは
-
8
ISMSの“コンサル丸投げ”が招く数千万円の無駄 NTTドコモビジネスの脱出劇
-
9
AI全部入り「Microsoft 365 E7」に企業が二の足を踏む訳 移行意向はわずか4%
-
10
「Windows派」「Linux派」を分ける決定的な違い
ホワイトペーパーランキング PR
-
1
AIエージェントで多様な日常業務を効率化するための入門ガイド
-
2
AIが「わざわざ使うツール」になっていない? 業務で自然に使う導線にする秘訣
-
3
5回聞くだけじゃ足りない? トヨタ式「なぜなぜ分析」の正しい実践方法
-
4
JR西日本ITソリューションズが「監視業務の属人化」を解消した方法とは?
-
5
「脱Excel」か「Excel快適化」か? 現場にやさしい業務改善の進め方
-
6
インシデント対応工数を約3割削減、東京ガスの事例に学ぶ監視体制刷新のコツ
-
7
PostgreSQLの「機能」「性能」「運用」「拡張性」に関する悩みの解消法
-
8
5分で分かる「セキュア大容量ファイル転送サービス」の機能とメリット
-
9
Macの安全神話は崩壊? 最新の脅威動向から見えた攻撃のトレンドと有効な対策
-
10
情報セキュリティ対策早分かりガイド:25の自社診断で弱点と解決策を理解
TechTargetジャパン SNS
インフォメーション
注目情報をチェック
TechTargetジャパンをフォロー