リファクタリングか、リライトか【前編】
コードの“大掃除”「リファクタリング」とは? 主なメリットとデメリット
ソースコードの劣化や保守性低下の対策として、現状の挙動を大きく変えずにソースコードを修正する「リファクタリング」がある。ソースコードを修正する上での、リファクタリングのメリットとデメリットを紹介する。
アプリケーションのソースコードは、パッチ(修正プログラム)の適用、計画性のない保守や機能追加などを重ねるうちに、次第に管理しづらくなるものだ。こうした場合、開発者は「リファクタリング」か「リライト」のいずれかを選択する必要に迫られる。リファクタリングは、アプリケーションの挙動を大きく変えずに既存のソースコードを修正する手法だ。リライトは、既存のソースコードの大部分を破棄し、一から書き直す手法だ。
これらの手法にはどちらにもメリットとデメリットが存在し、どちらかが絶対的に優れているということはない。プロジェクトごとに、どちらが適しているのかを判断すべきだ。本連載は、リファクタリングとリライトそれぞれの長所と短所を比較し、適切な判断を下すための指針を示す。
リファクタリングのメリットとデメリット
冗長なソースコードを削除したり、さまざまな機能や役割を詰め込みすぎた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
-
製品資料
[株式会社うるる] 「入札市場」攻略ガイド:効率的に落札するためのポイントを徹底解説 -
製品資料
[株式会社うるる] 入札情報に特化した「販路拡大」「効率化」のためのサポートツールとは? -
市場調査・トレンド
[株式会社うるる] 公共入札に成功する企業と失敗する企業の「5つの違い」 -
製品資料
[日本ビジネスシステムズ株式会社] 専門家が教える、Microsoft 365の「テナント統合/分離」を成功に導く秘訣 -
製品資料
[rakumo株式会社] Microsoft 365での情報埋没を防ぐ、社内ナレッジを資産化する情報ポータル活用
こんなメディアも見られています
TechTargetジャパンに関連する情報をお探しであれば、こちらのメディアもお役に立てるかもしれません。
ベンダーコンテンツ PR
From Informa TechTarget
SpecialPR
アクセスランキング
-
1
「Microsoft 365」が乗っ取られる MFAを破る“本物の画面”の恐怖
-
2
なぜ「Gemini 4 Argon」は出遅れたのか? Googleが狙う“逆転のシナリオ”
-
3
PHP脆弱性「PHP2Shell」で2260万件に影響 情シスの緊急チェックリスト
-
4
「テザリング依存」に潜む落とし穴 “遅いVPN”を解消するネット構築術
-
5
「Windows」の不要なファイルを安全に消して容量を空ける方法
-
6
「IT運用・情報システム業務」に関するアンケート
-
7
Claude利用8割のGMO、AI人材の評価軸が「トークン管理」に変わった
-
8
AI導入が失敗する“真犯人”は現場のマニュアル 7割が陥る「標準化」のわな
-
9
被害額は過去最高額 それでも「サイバー犯罪者が捕まらない」3つの理由
-
10
「Wi-Fi 7」経由でWindowsが乗っ取られる? 最高権限奪取の恐怖
ホワイトペーパーランキング PR
-
1
AI駆動攻撃にどう対抗する? 超速の攻撃からエンドポイントを保護する方法
-
2
2026年のサイバーセキュリティには何が必要か? 最新データに学ぶ傾向と対策
-
3
経験豊富な即戦力人材に直接アプローチできる、「攻めの採用」への転換術
-
4
「IT史に名を残すシステム障害」8選
-
5
最速72分でデータが流出? 最新の脅威トレンドや侵入手法から分かった防衛策
-
6
不審メールの経路や見せ方に変化? 2026年夏の3事例から見えた動向と対処方法
-
7
Microsoft 365のメールセキュリティ、3つの“死角”と追加で検討すべき対策とは
-
8
AI駆動開発のスピードと安全性を両立 「品質・セキュリティ管理」の実践ガイド
-
9
HDDを使わない「SSDオンリー」が無謀なのはなぜ?
-
10
「標的型攻撃メール」事例・サンプル集
TechTargetジャパン SNS
インフォメーション
注目情報をチェック
TechTargetジャパンをフォロー