リファクタリングか、リライトか【前編】
コードの“大掃除”「リファクタリング」とは? 主なメリットとデメリット
ソースコードの劣化や保守性低下の対策として、現状の挙動を大きく変えずにソースコードを修正する「リファクタリング」がある。ソースコードを修正する上での、リファクタリングのメリットとデメリットを紹介する。
アプリケーションのソースコードは、パッチ(修正プログラム)の適用、計画性のない保守や機能追加などを重ねるうちに、次第に管理しづらくなるものだ。こうした場合、開発者は「リファクタリング」か「リライト」のいずれかを選択する必要に迫られる。リファクタリングは、アプリケーションの挙動を大きく変えずに既存のソースコードを修正する手法だ。リライトは、既存のソースコードの大部分を破棄し、一から書き直す手法だ。
これらの手法にはどちらにもメリットとデメリットが存在し、どちらかが絶対的に優れているということはない。プロジェクトごとに、どちらが適しているのかを判断すべきだ。本連載は、リファクタリングとリライトそれぞれの長所と短所を比較し、適切な判断を下すための指針を示す。
リファクタリングのメリットとデメリット
冗長なソースコードを削除したり、さまざまな機能や役割を詰め込みすぎた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
-
技術文書・技術解説
[Jamf Japan 合同会社] MDMだけでモバイルセキュリティは十分? 不足する対策を16項目でチェック -
事例
[Wrike Japan 株式会社] 世界的な家電メーカーが実践する「クリエイティブプロセス効率化」の方法とは? -
事例
[Wrike Japan 株式会社] 世界的テクノロジー企業に学ぶ、プロセス標準化とプロジェクト納品自動化の秘訣 -
事例
[Wrike Japan 株式会社] ソニー・ピクチャーズ テレビジョンに学ぶ、次世代サービスデリバリーのヒント -
事例
[Wrike Japan 株式会社] ソミック石川に学ぶ、ICT浸透後に直面した「工数管理」の課題と解決策
こんなメディアも見られています
TechTargetジャパンに関連する情報をお探しであれば、こちらのメディアもお役に立てるかもしれません。
ベンダーコンテンツ PR
From Informa TechTarget
SpecialPR
アクセスランキング
-
1
「Copilot」はなぜ放置される? “議事録要約止まり”を脱する処方箋
-
2
脱VMwareの前提が崩れる BroadcomのVDDK公開停止で確認すべき点
-
3
「Microsoft一択」で本当にいいのか 知らぬ間にライセンス費用が膨らむ真相
-
4
Oracle巨大ITプロジェクトはなぜつまずいたのか 8年で導入1割、追加で170億ドル
-
5
「データストレージの活用方法」に関するアンケート
-
6
【基本情報技術者試験】「デュプレックスシステム」と「デュアルシステム」の違いは?
-
7
ANAが専用回線から移行した「NaaS」の全貌 ネットワーク準備が数カ月から数週間に
-
8
「AI活用を前提とした業務PCへの移行」に関するアンケート
-
9
AI全部入り「Microsoft 365 E7」に企業が二の足を踏む訳 移行意向はわずか4%
-
10
「プログラマー不要論」にThe Linux Foundationが示した答え
ホワイトペーパーランキング PR
-
1
マンガで解説:「ゼロトラスト」「SASE」の必要性とメリット
-
2
5回聞くだけじゃ足りない? トヨタ式「なぜなぜ分析」の正しい実践方法
-
3
インシデント対応工数を約3割削減、東京ガスの事例に学ぶ監視体制刷新のコツ
-
4
AIエージェントで多様な日常業務を効率化するための入門ガイド
-
5
JR西日本ITソリューションズが「監視業務の属人化」を解消した方法とは?
-
6
国税庁の次世代基幹システム「KSK2」稼働開始に向けて、対応すべき変更点とは?
-
7
5分で分かる「セキュア大容量ファイル転送サービス」の機能とメリット
-
8
ドラマで分かる、標的型攻撃メールの被害を受ける企業と回避できる企業の分岐点
-
9
「脱Excel」か「Excel快適化」か? 現場にやさしい業務改善の進め方
-
10
少額減価償却資産が40万円未満へ拡大、令和8年度税制改正で押さえるべき変更点
TechTargetジャパン SNS
インフォメーション
注目情報をチェック
TechTargetジャパンをフォロー