複数のモニターがあり、窓から街の景色が見えるオフィスのコンピューターでヘッドフォンをつけている人。

レガシー・コードの移行:その概要、重要性、正しい方法

レガシー・コードの移行とは

レガシー・コードの移行では、既存の、しばしば密結合されたコードベースを新しいプラットフォーム、テクノロジー、またはアーキテクチャー・パターンに移行することでモダナイズします。目的は、システムを刷新することではなく、既存の機能を現在の要件に対応できる環境に移行することであり、これがレガシー・コードのモダナイゼーションの中核となる目標です。このモダナイゼーションの取り組みには、クラウドネイティブ環境での運用、マイクロサービス・エコシステムとの統合、最新のAPIの提供、または開発チームの日々のワークフローの効率化などが含まれます。

移行は、より大きな概念であるモダナイゼーションの一環であり、多くの場合、戦略的なリファクタリングを伴います。 その明確で具体的な役割は、組織が、技術的負債や長年にわたる脆弱性が蓄積した老朽化したメインフレーム、時代遅れのフレームワーク、モノリシック構造から脱却するのを支援することです。

さまざまな業界で、組織はCOBOL、Java™、またはその他のレガシー言語で書かれた数十年前のアプリケーションに依存しています。これらのシステムには、長年にわたる段階的な変更によって蓄積された、深く組み込まれたビジネス・ロジックとワークフローが含まれていることがよくあります。これらのシステムが老朽化するにつれて、対処が難しくなります。レガシー・システムの老朽化に伴い、保守、統合、機能開発はますます複雑になってきます。ドキュメントが限られていること、古い依存関係、互換性の制約により、最新のプラットフォームやサービスと統合する際の運用および開発の負担が大きくなる可能性があります。

レガシー・コードの移行アプローチ

移行にはさまざまなアプローチがあり、適切な選択は、システムをどの程度緊急に移行する必要があるか、企業がどの程度の混乱を許容できるか、移行先の環境がどのようなものかによって異なります。

リホスティング

再ホスティングでは、コードを大きく変更することなく、アプリケーションをクラウド・インフラストラクチャーにそのまま移行します。このシステムはクラウド上で稼働していますが、オンプレミスとまったく同じように動作します。AWS、Azure、IBM Cloud、その他の主要なクラウド・プロバイダーはすべて、実際の移行を簡素化するように設計されたクラウド移行ツールによって、このアプローチをサポートしています。

魅力はスピードとリスクの低さです。再ホストは比較的迅速に実行でき、可用性の向上、マネージド・サービス、オンプレミスのハードウェア・コストの削減などのインフラストラクチャーのメリットを即座に実現します。 これは、決められた期限までにデータセンターを廃止する必要がある組織にとって、適切な最初のステップであることが多いです。また、ビジネス価値を引き出すための、より大規模なアーキテクチャー変更にまだ投資する準備ができていないチームもサポートします。

ここでの制約は、再ホストがモダナイゼーションを伴わない移行であることです。技術的負債は残ります。コードベースの構造は変わらず、依存関係も同じままで、拡張性に関する制約もそのままです。 

リプラットフォーム

リプラットフォームでは、アプリケーションをクラウド・インフラストラクチャーに移行しながら、その過程で小規模な変更を意図的に加えます。ビジネス・ロジックと全体的なアーキテクチャーは変更されません。変更されるのは、新しい環境で適切に機能するよう更新が必要なコンポーネントです。例えば、セルフマネージドのデータベースをクラウド管理のデータベースに置き換えたり、構成を調整したり、依存関係をターゲット・プラットフォームが想定するものに合わせたりします。

このモダナイゼーション・アプローチは中間的な選択肢です。一部のモダナイゼーションのメリットを実現することで再ホスト以上の効果をもたらし、完全な再アーキテクチャー化よりもコストとリスクを抑えられます。 

リプラットフォーミングは、クラウドへの移行が必要であり、その過程で運用パフォーマンスを向上させ、リソースを最適化したい組織に適しています。アプリケーションをマイクロサービスに分解したり、最初から再構築したりすることに投資する準備ができていないチームにも適しています。

カプセル化

カプセル化はアプリケーションを移行するわけではありませんが、特定の実用的な意味では移行戦略の1つといえます。既存のシステムをクラウドベースのリソースや最新のインフラストラクチャーに拡張します。これは、システムをAPI層でラップすることで実現します。 レガシー・アプリケーションは、内部的には変更されず、現在の環境で引き続き実行されます。クラウドサービス、新しいアプリケーション、外部パートナーはすべて、システムに干渉することなくそのAPIを介して接続できます。

業務の中断を許容できない組織にとって、これは大きな利点となります。既存のコードベースを完全に保持します。その代わりに、このシステムは、当初は連携するように構築されていなかった最新のインフラストラクチャーと統合できるようになります。カプセル化は、レガシー・システムに組み込まれたビジネス・ロジックに問題がなく、他の最新システムから簡単にアクセスできないことが主な問題である場合に有効です。 

カプセル化をステージング戦略として検討することも有効です。複雑なシステムをすぐに完全移行できない組織は、まずシステムをカプセル化し、移行を計画しながらモダンなインターフェースを確立し、準備が整った段階で物理的な移行を実行できます。

AI Academy

AIの専門家になる

ビジネスの成長を促進するAIへの投資を優先できるように知識を習得します。今すぐ無料のAI Academyを試して、貴社のAIの未来をリードしましょう。

レガシー・コードの移行プロセス

次のフレームワークは、レガシー・コードの移行プロセスを反映しています。 

発見と評価

コードを移行したり、完全な書き換えを試みたりする前に、開発チームは対象となるシステムの全体像を把握する必要があります。つまり、コードベースのマッピング、すべての依存関係の特定、システム間のデータ・フローの理解、アプリケーションに組み込まれたビジネス・ルールの文書化が必要になります。メインフレーム・インフラストラクチャー上で稼働するCOBOLアプリケーションなどのレガシー・システムでは、このドキュメントが利用できないことが多く、調査フェーズが重要で時間のかかるものになります。

ターゲット環境を定義する

エンジニアリング・チームと利害関係者は、AWSやAzure上のクラウドネイティブ・プラットフォーム、マネージド・コンテナ環境、更新されたフレームワークを実行する最新のアプリケーション・サーバーなど、移行先について合意する必要があります。 互換性要件、ツールの選択、テスト戦略はすべてその決定に基づいて決まるため、この認識合わせは不可欠です。目標とする状態が曖昧だと、スコープ・クリープや手戻りを招きやすくなります。

ロードマップを定義する

アセスメントから得られた成果は、ロードマップに直接反映されます。 調査結果から、どのコンポーネントを最初に移行できるか、また、それぞれにどの移行方法が適しているかが分かります。また、現実的なタイムラインがどのようなものかを示します。コードベースの実際の複雑さを理解することで、この点が明確になり、チームはより正確に計画を立てられるようになります。

有用なロードマップは、タスクを順番にリストアップするだけでなく、最もリスクの高い領域を早い段階で明らかにし、利害関係者に具体的な成果として示せる早期の成功を特定します。 また、チームが問題を早期に検知できるように、チェックポイントも組み込まれています。

環境セットアップ

コードを移行する前に、AWSやAzure上のクラウド・インフラストラクチャー、新しいアプリケーション・フレームワーク、モダンな言語ランタイムなど、ターゲット環境を準備する必要があります。開発環境がプロビジョニングされ、CI/CD パイプラインが設定され、テストフレームワークが導入されます。

段階的な移行

すべてを一度に移行すると、移行が失敗する原因になります。代わりに、チームはコードベースをコンポーネントごとに段階的に移行していきます。1つのモジュールを移行し、テストして検証してから、次のモジュールに進みます。 単体テストは、移行のこの段階で重要な役割を果たします。

単体テストにより、移行した各コンポーネントが元のコンポーネントと同じように動作することを確認でき、問題がまだ局所的なうちにデバッグやリグレッションの検出を行えます。また、これらの問題がシステム全体に波及した後にのみ表面化するのを防ぎます。

検証とテスト

通常の条件下で正しいアウトプットを得ることは、難しくない部分です。 より難しい作業は、レガシー・システムが何年にもわたってひそかに処理してきたエッジ・ケースを突き止めることです。多くの場合、そのようなケースが存在することすら文書化されていません。 個々のコンポーネントが正常に動作することを確認したら、エンドツーエンド・テストを開始し、すべてのコンポーネントを組み合わせて実行したときにもシステム全体が正常に機能するかどうかを確認するために、システム全体に負荷をかけます。

AIがレガシー・コード移行をどのように変えているか

ソフトウェア開発の歴史のほとんどにおいて、レガシー・コードの移行はほぼすべて手動で行われていました。人工知能とその幅広い応用により、この状況は変わり始めています。

生成AIや大規模言語モデル(LLM)は、移行にかかる期間を実際に短縮する形で活用されています。これらは、人間の判断に取って代わるのではなく、これまでコストのかかっていた準備作業を担うことで、この作業を行います。 この基礎的な作業を担うことで進捗を加速し、エンジニアは真に専門知識を必要とする判断に集中できるようになります。

その効果がまず現れるのは、コード分析です。LLMはレガシー・コードベースを読み取り、モジュールの機能、コンポーネント間のデータの流れ、コア・ビジネス・ロジックが存在する場所について、平易な言葉での要約を作成できます。元の開発者が数年前に退職したCOBOLアプリケーションを移行する組織では、この機能により、調査フェーズを数カ月から数週間に短縮できます。

次の段階として、コード変換が挙げられます。AIを活用したツールは、ソースコードをある言語から別の言語に変換できます。例えば、AIを活用してCOBOLからJavaに変換したり、古いフレームワークから同等のクラウドネイティブ・フレームワークに移行したりできます。アウトプットは必ずしも本番環境に対応しているとは限らず、依然として人間によるレビューは不可欠です。それでも、チームが処理できる量は大幅に増加します。

AIエージェントは、この進展をさらに加速させています。エージェント型システムは、プロンプトに応答するだけでなく、複数のステップにわたる移行タスクを実行し、レガシー・コードを分析し、コードを変換し、単体テストを作成して実行し、失敗を人間によるレビューのために検出できます。初期の成果からは、エージェントが明確に定義された反復作業を確実に処理できることが示されています。ビジネス・ルールが曖昧であったり、コード・パターンがトレーニングの範囲外であったりする場合には、依然として監視が必要です。

AIには限界があることも認識しておく必要があります。AIモデルは、複雑に絡み合ったビジネス・ロジックへの対応に苦慮したり、構文上は正しくても動作上は正しくない変換を生成したりすることがあり、レガシー・システムに存在するセキュリティー上の脆弱性を自動的に解決することもありません。アウトプットの品質は、ツールに関するワークフローがどれだけ適切に構造化されているかに大きく依存します。

最良の成果を得ているチームは、AIをオートメーションの効果を高める手段として活用しています。 AIを使用してコード分析、翻訳、テスト生成などの機械的な作業を加速する一方で、最もリスクの高い判断には経験豊富なエンジニアが引き続き関与するようにします。このようにAIを活用することで、レガシー・コードの移行を迅速化するだけでなく、より徹底したものにすることができます。

レガシー・コードの移行における課題

移行のたびに、計画には含まれていなかった問題が明らかになります。 そのほとんどは、よくあるいくつかのカテゴリーに分類されます。

  • 最も一般的なものは、文書化されていないビジネス・ロジックです。長期的な運用を想定して構築されていないコードベースには、何年にもわたる修正や回避策が積み重なっており、その背後にあるロジックはコード自体以外には存在しません。移行前のリバース・エンジニアリングには時間がかかりますが、それを省くと、テストには合格しても本番環境で問題が発生するシステムになってしまいます。
  • 依存関係と複雑さ。コンポーネントが密結合され、依存関係が循環していると、1つのモジュールを変更しただけで、何かが壊れるまで気付かない形で他のモジュールに影響を及ぼすことがよくあります。移行を開始する前に依存関係を早期にマッピングすることで、移行の順序を管理しやすくなります。
  • 互換性の問題。オンプレミスで適切に機能していたライブラリー、内部API、データ形式、およびスキーマは、ターゲット環境でも必ずしも同等に機能するとは限りません。そのまま移行できないものは早期に特定する必要があります。移行の途中でそれらを発見すると、解決にははるかに大きなコストがかかるためです。
  • ダウンタイムは、リアルタイム・オペレーションをサポートするシステムにとっては厳しい制約です。段階的な実行と新旧のコンポーネントの並行実行により、移行中もビジネスを継続させることができます。
  • 多くの移行プロジェクトが予定より長引くのは、スコープを過小評価しているためです。アセスメント段階では対処可能に見えた複雑さが、作業を開始すると想定以上に大きくなることがよくあります。調査のための余裕を計画に組み込み、計画を固定された契約ではなく状況に応じて更新する文書として扱うことが、予期せぬ問題に対応できるチームと、それによって計画が頓挫するチームの違いにつながります。

まとめ

レガシー・コードの移行は複雑ですが、長期的なソフトウェア・モダナイゼーションに不可欠な要素です。技術的負債が積み重なるにつれて、開発チームは新しいシステムを構築するよりも古いシステムの保守に多くの時間を費やします。  

モダナイゼーションの取り組みを成功させている組織には、いくつかの共通点があります。移行前に適切な発見に投資し、システムの実際の複雑さに合った移行アプローチを選択し、一度にすべてを移行するのではなく段階的に移行しています。また、AIを含む利用可能なツールを活用しつつ、どのようなツールにも置き換えることのできない人間の判断を重視しています。 

移行は、ゴールを設定した単一のプロジェクトではなく、ソフトウェア・ライフサイクルにおける重要な段階です。これは、変化するビジネス・ニーズを継続的にサポートできるよう、コードベースを保守可能な状態に保つための継続的な取り組みです。 

執筆者

Jobit Varughese

Technical Content Writer

IBM

関連ソリューション
IBM Bob

セキュリティーで保護された意図認識型の開発を実現するAIパートナー、IBM®  Bobにより、ソフトウェア・デリバリーを加速します。

IBM Bobはこちら
開発者向けAIソリューション

企業向けツールを活用し、AIアプリケーションの開発、デプロイ、管理をより迅速に実行します。

開発者向けAIの詳細はこちら
アプリケーション・モダナイゼーション・サービス

インテリジェントなAIモダナイゼーションにより、レガシー・システムを再構築します。

アプリケーション・モダナイゼーション・サービスの詳細はこちら
次のステップ

生成AIと高度な自動化を活用し、企業向けのコードをより迅速かつ一貫性を持って提供します。Bobモデルは開発者のスキルを拡張し、モダナイゼーション・ワークフローの効率化や複雑な開発タスクの簡素化を実現します。

  1. AIコーディング・エージェントの紹介
  2. 開発者向けAIソリューションの詳細はこちら