長年運用されてきたレガシーシステムでは、「システムは動いているが、なぜその処理が必要なのか分からない」「設計書と実際のソースコードが一致していない」「仕様を把握していた担当者がすでにいない」といった問題が少なくありません。
この状態でシステム移行を開始すると、移行後に必要な機能が抜ける、データ変換で不整合が発生する、外部システムとの連携が停止するなど、重大な問題につながる可能性があります。
そこで重要になるのがリバースエンジニアリングです。
リバースエンジニアリングとは、既存のソースコード、データベース、設定ファイル、画面、ログ、外部連携などを分析し、現在のシステムがどのような構造とロジックで動いているのかを再構成する取り組みです。
Migration前のリバースエンジニアリングの目的は、単に古いシステムの仕様書を作り直すことではありません。移行対象、依存関係、業務ロジック、データ構造、リスクを可視化し、「何を残し、何を変更し、何を廃止するのか」を判断できる状態を作ることが重要です。
1. リバースエンジニアリングとは?Migration前に必要となる背景
レガシーシステムでは、長期間にわたって機能追加や修正が繰り返されていることがあります。
その結果、当初の設計書と現在の実装が一致しなくなり、仕様がソースコードの中にしか残っていない状態になることがあります。
さらに、担当者の異動や退職、開発ベンダーの変更によって、システムに関する知識そのものが失われている場合もあります。
1.1. リバースエンジニアリングで明らかにするもの
Migration前のリバースエンジニアリングでは、主に現在のシステム構造、プログラム間の依存関係、業務ロジック、データ構造、外部システムとの連携、バッチ処理、例外処理などを確認します。
例えば、画面上では単純な売上登録に見える機能でも、内部では在庫更新、請求データ生成、会計連携、通知処理など複数の処理が実行されている場合があります。
画面仕様だけを見て新システムを構築すると、こうした裏側の処理を見落とす可能性があります。
1.2. 通常のシステム調査との違い
一般的なシステム調査では、サーバー構成、OS、データベース、利用状況などを中心に確認します。
一方、リバースエンジニアリングでは、さらにソースコードやデータ構造まで掘り下げ、「システムがどのようなロジックで動作しているか」を分析します。
Migrationの判断に必要なのは、インフラ情報だけではありません。
「この処理を新システムでも維持する必要があるのか」「このデータはどこから生成されているのか」「このモジュールを変更するとどこに影響するのか」といった情報まで把握する必要があります。
2. Migration前にReverse Engineeringが必要な理由
Migrationでは、現在のシステムを理解することと、移行先の技術を選択することの両方が必要です。
特に仕様書が不足しているレガシーシステムでは、現状分析を省略して移行方式を決定すると、計画段階では見えていなかった問題が開発やテストの段階で発生しやすくなります。
2.1. 隠れた業務ロジックを発見するため
レガシーシステムには、長年の業務運用によって追加された独自ロジックが含まれている場合があります。
例えば、特定顧客だけに適用する価格計算、月末だけ実行するデータ処理、特定条件で変更される承認フローなどです。
こうしたロジックがドキュメント化されていなければ、Migration時に失われる可能性があります。
そのため、ソースコードだけでなく、実際の業務担当者への確認も重要です。
コードから「何をしているか」を確認し、業務担当者から「なぜ必要なのか」を確認することで、移行すべき機能と不要な機能を判断しやすくなります。
2.2. システム間の依存関係を把握するため
Migrationで特に注意したいのが依存関係です。
一つのアプリケーションを変更した結果、別のシステムのバッチ処理やデータ連携が動かなくなる可能性があります。
AWSの移行ガイダンスでも、初期調査ではアプリケーション、インフラ、既知の依存関係などを把握し、情報不足を特定することが重要とされています。
そのため、Migration前にはアプリケーション単体ではなく、関連システムを含めた構成を確認します。
3. Reverse Engineeringはどのように進めるべきか
リバースエンジニアリングは、すべてのソースコードを最初から詳細に読むことが目的ではありません。
Migrationの判断に必要な情報を定義し、重要度の高い部分から分析することが実務上重要です。
3.1. Step 1:対象システムとMigrationの目的を定義する
最初に、なぜMigrationを行うのかを明確にします。
例えば、保守期限への対応、クラウド移行、開発言語の変更、データベース刷新、保守性向上などでは、必要な分析範囲が異なります。
同時に、対象となるアプリケーション、データベース、サーバー、外部システムを整理します。
この段階で範囲を決めずに詳細分析を始めると、調査工数が大きくなりやすいため注意が必要です。
3.2. Step 2:既存資料とシステム資産を収集する
次に、設計書、ソースコード、データベース定義、設定ファイル、ジョブ定義、運用マニュアル、障害履歴などを収集します。
ここで重要なのは、既存資料をそのまま正しい仕様と判断しないことです。
長期間運用されているシステムでは、資料が更新されていない可能性があります。
そのため、「ドキュメント上の仕様」と「実際の実装」を分けて確認します。
3.3. Step 3:コード・データ・依存関係を可視化する
次に、Migrationへの影響が大きい部分を分析します。
分析結果は、システム構成図、依存関係図、データフロー、機能一覧などに整理します。
コードを読むこと自体ではなく、Migrationの意思決定に利用できる情報へ変換することが重要です。
3.4. Step 4:業務担当者と仕様を確認する
コードから確認できるのは、現在実装されている処理です。
しかし、その処理が現在も業務上必要なのかまでは、コードだけでは判断できません。
例えば、10年前に追加された例外処理が現在も必要なのか、すでに使われていないのかは、業務担当者への確認が必要です。
ここで、現行機能を「維持する」「変更する」「廃止する」に分類すると、Migration後の要件を整理しやすくなります。
4. Reverse Engineeringの結果をMigration方式の判断につなげる
リバースエンジニアリングの成果物は、詳細な仕様書を作るためだけのものではありません。
最も重要なのは、分析結果をMigration方式の選択につなげることです。
4.1. Rehost・Replatform・Refactor・Rebuildを判断する
例えば、既存アプリケーションの業務ロジックに大きな問題がなく、主な課題がインフラの老朽化であれば、RehostやReplatformを検討できます。
一方、コードの依存関係が複雑で変更が困難、または既存アーキテクチャが現在の業務要件に対応できない場合は、RefactorやRebuildを検討する必要があります。
Microsoftのアプリケーションモダナイゼーションガイダンスでも、現状のアプリケーション、データ、インフラを評価したうえで、適切なモダナイゼーション戦略を検討する考え方が示されています。
関連するMigration方式については、##「Legacy Migrationにはどんな選択肢がある?」の記事へのInternal Linkを配置してください。
4.2. すべてを解析する必要があるとは限らない
Reverse Engineeringは有効ですが、すべてのシステムに同じ深さで実施する必要はありません。
例えば、近いうちに廃止するシステムや、業務への影響が小さいアプリケーションに対して、すべてのコードを詳細に分析すると、調査費用が移行による価値を上回る可能性があります。
一方、基幹業務を支えるシステム、仕様書が不足しているシステム、外部連携が多いシステム、独自の業務ロジックが多いシステムでは、より詳細な分析が必要です。
5. Reverse Engineeringを実施すべきか判断する基準
Migration前にどこまでリバースエンジニアリングを行うべきかは、ドキュメントの不足だけで判断するものではありません。
システムの重要度とMigrationリスクを組み合わせて判断します。
5.1. Reverse Engineeringの優先度が高いケース
特に優先度が高いのは、設計書と実装が一致していない、システムを理解している担当者が少ない、独自の業務ロジックが多い、外部システムとの連携が複雑、長期間にわたり改修が繰り返されている、といったケースです。
さらに、Migration後も既存システムと同じ結果を保証する必要がある場合は、現行ロジックの把握が重要になります。
「新しいシステムが動く」ことと、「既存システムと同じ業務結果を出す」ことは同じではありません。
5.2. 判断基準をチェックする
これらの項目が複数該当する場合、Migrationの設計を確定する前に、対象範囲を決めたリバースエンジニアリングを実施する価値が高くなります。
6. Migration前のReverse Engineeringで重要なのは「完全な仕様書」ではなく「判断できる状態」を作ること
リバースエンジニアリングというと、既存システムをすべて解析し、詳細な仕様書を一から作成する大規模な作業を想像しがちです。
しかし、Migration前の目的は必ずしも完全なドキュメントを作ることではありません。
重要なのは、移行方式と範囲を判断するために必要な情報を揃えることです。
どの機能が業務上重要なのか。
どのコードやデータが相互に依存しているのか。
どの機能を新環境でも維持する必要があるのか。
どの機能は変更または廃止できるのか。
そして、どの部分にMigrationリスクが集中しているのか。
これらを明確にできれば、Migrationの見積もり、方式選定、テスト範囲、移行順序について、より根拠のある判断が可能になります。
7. まとめ
レガシーシステムのMigrationでは、新しい技術や移行先を選ぶ前に、現在のシステムを正しく理解することが重要です。
特に、設計書が不足している、担当者が不在、複雑な業務ロジックが存在する、外部連携が多いといったシステムでは、Reverse EngineeringがMigration前の重要な工程になります。
ただし、目的は既存システムのすべてを文書化することではありません。
ソースコード、データ、依存関係、業務ロジックを必要な範囲で可視化し、「何を残すのか」「何を変えるのか」「何を廃止するのか」を判断できる状態を作ることが重要です。
そのうえでRehost、Replatform、Refactor、Rebuildなどの選択肢を比較し、業務への影響と技術リスクを踏まえてMigration方針を決定します。
現行システムの仕様や依存関係が十分に把握できていない場合は、Migration計画を確定する前にアセスメントとReverse Engineeringの必要範囲を整理することが、移行リスクを抑える第一歩になります。
詳細はこちら
■RIKAIについて
高い技術と高い品質で事業を成功させる。
RIKAIはソフトウェア開発を軸に、「人と技術を中心としたビジネス」を展開しています。お客様に寄り添うことで、お客様の「真のニーズ」を把握し、本当に価値のあるサービスを提供します。私たちは、お客様と長期的かつ信頼できるパートナーになることを目指しています。
🏢 商号:RIKAI株式会社
📅 設立:2017年11月15日
👤 代表者:代表取締役 ドアン・ハイ・バン
📍 所在地:〒160‐0023 東京都新宿区西新宿6-12-1 パークウエスト5階
👥 従業員数:300名
🛠️ 業務内容:
・システム開発(業務システム、モバイルアプリ、インターネットサービスサイト、IoT・AIアプリ)
・システムマイグレーション
・システム保守・運用
・通信販売
🌐 公式WEBサイト:https://rikai.technology/
✉️ お問い合せ先:https://rikai.technology/contact


