バグを繰り返さないために
危険ファイルを解き明かす「Git考古学」でレガシーコードを安全に書き直す
ブラックボックス化したシステムは企業にとって大きなリスクだ。「Git」リポジトリを分析してバグを特定することで、価値あるレガシーシステムを安全にモダナイゼーションする手法とは。
レガシーシステムには長年のビジネス価値が詰まっている一方で、変更時の影響範囲が読めず、ブラックボックス化しやすい課題がある。ソフトウェアベンダーParticular Softwareのウィリアム・ブランダー氏は、同社が大規模システムの品質向上と互換性維持に取り組んできた実績を基に、この課題に対するアプローチを提案する。
ブランダー氏はレガシーコードに対して「理解度」「保守容易性」の評価軸を提示し、システムのライフサイクルを考慮して変更のリスクを最小限に抑えるアプローチを提唱している。同氏が「『Git』考古学」と呼ぶ手法では、Gitリポジトリをデータベースに見立て、どのような変更が反映されたのかを分析し、ファイル内の約6割が書き換えられたといった定量的なデータを可視化する。これによって、重点的にテストやリファクタリングを実施すべき箇所を的確に特定できるようになる。
安全なシステム変更の土台となる観測性の確立や、ライフサイクルに応じた3つのコード改修手法とはどのようなものか。以降でその詳細を解説する。
変更を安全にする「保守容易性」を向上させるには?
本記事は、技術カンファレンス「NDC Sydney 2026」において、ブランダー氏が登壇したセッション「Indiana Jones and the Temple of Legacy Code」の内容を基に構成している。
ブランダー氏は、「レガシーシステムについての理解度も保守容易性も低い状態から、安全に変更が可能な状態へとシステムを引き上げる必要がある」と主張する。
保守容易性を高める第一歩は、再現可能なビルドを確立することだ。特定のマシンの設定に依存せず、CI(継続的インテグレーション)ツールで確実にビルドできる体制を整えることが出発点になる。
レガシーシステムはテストが困難な場合がしばしばある。そこで、ツールを用いてユーザー操作を模倣するテストから着手し、AIツールを利用してテストコードを生成する方法も有効だ。この場合、生成されたテストコードが意味のあるものかどうかを確認するために、ミューテーションテスト(ソースコードに意図的なバグを作ってテストコードの有効性を確かめるテスト)を用いて、ソースコードの分岐ロジックに対するテストの妥当性を検証する手順が不可欠となる。
ブランダー氏は、システム内部の動作を可視化する観測性(オブザーバビリティ)の導入を推奨する。レガシーシステム全体に観測性を追加するのは難しいため、最初は小規模な処理の流れに導入してパイプラインを確立する。次に自身が修正を担当する機能へと適用範囲を広げる。
Git履歴を用いた「考古学」
システムの理解度を深める手段として、ブランダー氏はGitのコミット履歴をデータベースとして分析する手法を示す。単一のファイルが過去1年間で何回変更されたかを集計することに加え、「バグ」「修正」「パッチ」といったキーワードを含むコミットでフィルタリングをする。
ブランダー氏はセッション内でOSS(オープンソースソフトウェア)のメディアプレーヤー「Jellyfin」のリポジトリを分析した。そこで「BaseItemRepository.cs」という約2600行のファイルが1年間で81回変更され、そのうち46回がバグ修正のコミットだったことを実証した。ファイルの約6割が1年間で書き換えられているという定量的な事実を基に、どこにテストを追加し、どこを慎重に扱うべきかのリスク管理が可能になる。
コンパイラでは検出できない「変更の隠れた結合」を特定する方法にもブランダー氏は言及する。あるファイルを変更した際、別のファイルが同時に変更される割合をGitの履歴から分析することで、隠れた依存関係を事前に把握できる。この分析には標準のGitコマンドの他、専用の分析ツールも活用可能だ。
ライフサイクルに応じた3つの改修手法
理解度と保守容易性を高めた上で、実際のコード改修に入る。この際、システムのライフサイクルがどの段階にあるかによって、採用すべき手段が異なる。
1.変更よりも追加
クリティカルなバグのみを修正するフェーズにある場合、既存の機能を変更することには危険を伴う。例えばリストの並び順を変更する際、既存のメソッドを書き換えるのではなく、あえてソースコードを重複させて新しいメソッドを追加する。アクティブな開発では避けるべきソースコードの重複も、このフェーズでは安全性を保証する正当な手段になる。
2.末端の変更
メンテナンスのフェーズにおいては、既存のコアロジックに手を入れるのではなく、呼び出し元やUI(ユーザーインタフェース)に表示される手前といった、処理の末端で変更を適用する。データベースへのクエリを変更するのではなく、取得したデータをメモリ上で並び替えるといった具合だ。
3.機能ごとの切り出し
システムがアクティブな開発フェーズにある場合は、機能単位での分離を進める。対象となる機能専用の新しいインタフェースを作成し、関連するソースコードを既存の巨大なクラスから切り離すことで、影響範囲を限定した安全なモダナイゼーションを実現する。
レガシーシステムが優秀な技術者を育てる
ブランダー氏は「レガシーシステムには長年のビジネス価値が詰まっている。初めから悪いシステムを作ろうとする者はいない」と指摘する。複雑で脆弱(ぜいじゃく)なシステムに変更を加える経験は、開発者に対してリスク管理能力や設計スキルを強制的に学ばせる。困難なレガシーコードに向き合うことは、次世代の優秀なエンジニアを育成する絶好の機会だ。
本稿は、NDC Conferencesが2026年2月11日に公開した動画「Indiana Jones and the Temple of Legacy Code - William Brander - NDC London 2026」を基に作成しました。
Copyright © ITmedia, Inc. All Rights Reserved.
本記事は制作段階でChatGPT等の生成系AIサービスを利用していますが、文責は編集部に帰属します。
関連記事
新着ホワイトペーパー PR
-
製品資料
[株式会社うるる] 「入札市場」攻略ガイド:効率的に落札するためのポイントを徹底解説 -
製品資料
[株式会社うるる] 入札情報に特化した「販路拡大」「効率化」のためのサポートツールとは? -
市場調査・トレンド
[株式会社うるる] 公共入札に成功する企業と失敗する企業の「5つの違い」 -
製品資料
[日本ビジネスシステムズ株式会社] 専門家が教える、Microsoft 365の「テナント統合/分離」を成功に導く秘訣 -
製品資料
[rakumo株式会社] Microsoft 365での情報埋没を防ぐ、社内ナレッジを資産化する情報ポータル活用
こんなメディアも見られています
TechTargetジャパンに関連する情報をお探しであれば、こちらのメディアもお役に立てるかもしれません。
ベンダーコンテンツ PR
From Informa TechTarget
SpecialPR
アクセスランキング
-
1
半数がブルーカラー転向を視野に? ベテランエンジニアを追い込む“54歳の壁”
-
2
PHP脆弱性「PHP2Shell」で2260万件に影響 情シスの緊急チェックリスト
-
3
「Windows」の不要なファイルを安全に消して容量を空ける方法
-
4
なぜ「Gemini 4 Argon」は出遅れたのか? Googleが狙う“逆転のシナリオ”
-
5
「Microsoft 365」が乗っ取られる MFAを破る“本物の画面”の恐怖
-
6
生成AIが普及しても「技術書」を手放せないエンジニアの本音
-
7
OpenAIやAnthropicでさえ制御不能 2026年夏「3大サイバー攻撃」の衝撃
-
8
ChatGPTは“検索しまくり”でGeminiは“淡泊”? データが明かすAIの裏側
-
9
「Copilot」はなぜ放置される? “議事録要約止まり”を脱する処方箋
-
10
「IT運用・情報システム業務」に関するアンケート
ホワイトペーパーランキング PR
-
1
AI駆動攻撃にどう対抗する? 超速の攻撃からエンドポイントを保護する方法
-
2
最速72分でデータが流出? 最新の脅威トレンドや侵入手法から分かった防衛策
-
3
2026年のサイバーセキュリティには何が必要か? 最新データに学ぶ傾向と対策
-
4
経験豊富な即戦力人材に直接アプローチできる、「攻めの採用」への転換術
-
5
「IT史に名を残すシステム障害」8選
-
6
SASE選定は「見極め力」で大きな差――本当に必要な製品を選ぶための6つの視点
-
7
不審メールの経路や見せ方に変化? 2026年夏の3事例から見えた動向と対処方法
-
8
Microsoft 365のメールセキュリティ、3つの“死角”と追加で検討すべき対策とは
-
9
AI駆動開発のスピードと安全性を両立 「品質・セキュリティ管理」の実践ガイド
-
10
「標的型攻撃メール」事例・サンプル集
TechTargetジャパン SNS
インフォメーション
注目情報をチェック
TechTargetジャパンをフォロー