バグを繰り返さないために
危険ファイルを解き明かす「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
-
製品資料
[株式会社kickflow] 2社の事例に学ぶワークフロー改革:属人化解消や年数万件の申請書類削減のコツ -
製品資料
[NTTPCコミュニケーションズ株式会社] 「回線速度不足」だけが原因ではない? Web会議の遅延を解決する方法とは -
製品資料
[東京エレクトロン デバイス株式会社] 工場の可用性向上に重要な「7つの領域」と対策 OTセキュリティ強化の基礎知識 -
製品資料
[リコージャパン株式会社] 問い合わせ対応で本来の業務が進まない、総務や情シスの負担をどう減らす? -
製品資料
[リコージャパン株式会社] 自社データから高精度な回答を生成、簡単に生成AIチャットボットを構築する方法
こんなメディアも見られています
TechTargetジャパンに関連する情報をお探しであれば、こちらのメディアもお役に立てるかもしれません。
ベンダーコンテンツ PR
From Informa TechTarget
SpecialPR
アクセスランキング
-
1
全社標準Copilotに絶望? MS Copilotで問い合わせ6割減できた企業は何が違った
-
2
ITエンジニア1265人調査 生成AIを使い込むほど「人の確認」が重い理由
-
3
Microsoft製品でここまで自動化できる 情シスがやめられる手作業10選
-
4
脱VMwareの前提が崩れる BroadcomのVDDK公開停止で確認すべき点
-
5
業務影響を抑えた“小さなPoC”から始めるVPN見直し
-
6
「Copilot」はなぜ放置される? “議事録要約止まり”を脱する処方箋
-
7
「Microsoft一択」で本当にいいのか 知らぬ間にライセンス費用が膨らむ真相
-
8
APIキー奪取から3時間でクラウド掌握 Anthropicが暴いた「バイブハッキング」の現実的な防御策
-
9
「Wi-Fi 7」は何がすごい? Wi-Fi 5、Wi-Fi 6からの抜本的な進化とは
-
10
【基本情報技術者試験】「デュプレックスシステム」と「デュアルシステム」の違いは?
ホワイトペーパーランキング PR
-
1
5回聞くだけじゃ足りない? トヨタ式「なぜなぜ分析」の正しい実践方法
-
2
JR西日本ITソリューションズが「監視業務の属人化」を解消した方法とは?
-
3
生成AIで文書活用を進めるには? 効率化と安全性をどう両立する
-
4
Windows PCとMacの選択制で生産性向上 LINEヤフーが実践する運用管理方法とは
-
5
インシデント対応工数を約3割削減、東京ガスの事例に学ぶ監視体制刷新のコツ
-
6
国税庁の次世代基幹システム「KSK2」稼働開始に向けて、対応すべき変更点とは?
-
7
「スクラム」と「カンバン」の違いとは? アジャイル型開発手法を徹底比較
-
8
AI時代に成功するための「ナレッジマネジメント」ベストプラクティス
-
9
「オンプレミス回帰」せざるを得ない“合理的な理由”
-
10
Microsoft 365を安全に運用 うっかりミスやサイバー攻撃に備えるデータ保護術
TechTargetジャパン SNS
インフォメーション
注目情報をチェック
TechTargetジャパンをフォロー