「このJARファイル、本当にProGuardで難読化されているのか、逆コンパイルしてみないと分からない」「Struts1で構築された基幹システムの一部を試しに解析して、成果物のイメージを確認したい」――JavaEEやStrutsといった古いエンタープライズフレームワークで構築されたレガシーシステムに対してリバースエンジニアリングを検討する際、いきなり全面的な解析に着手するのは大きなリスクを伴います。Javaのリバースエンジニアリングとは、クラスファイルやJAR・WAR・EAR形式のアーカイブを解析して失われた設計情報・業務仕様を復元する、刷新・移行プロジェクトの前段に位置する分析・調査工程です。この工程自体にも、本格着手前の小規模なPoC(概念実証)・プロトタイプ・モックアップという「試し撃ち」の段階を設けることで、逆コンパイルの技術的な実現可能性と発注側・受注側の認識のズレを事前に確認できます。
本記事では、Javaのリバースエンジニアリングにおける PoC・プロトタイプ・モックアップ開発について、その目的と進め方、パイロットモジュールの選定基準、逆コンパイラの精度検証、期間・費用感、そしてPoC後の本格着手の判断基準までを具体的に解説します。「まずは小さく試してから決めたい」という担当者の方に向けた実務的な内容です。
本テーマに関する全体ガイドは、以下の記事をご覧ください。
▼全体ガイドの記事
・Javaのリバースエンジニアリングの完全ガイド
Javaリバースエンジニアリングとは何か(なぜPoCから始めるべきか)

Javaのリバースエンジニアリングは、クラスファイルやJAR・WAR・EARから設計情報・業務ロジックを逆方向に復元する技術であり、刷新・移行プロジェクトに着手する前段の現状分析・調査工程として位置づけられます。しかし、この調査工程そのものが、対象システムの規模やProGuard等による難読化の有無、JavaEE/Strutsの構成の複雑さによっては数ヶ月から1年以上の期間、数百万円規模の費用を要することもあります。いきなり本格的な全面解析に踏み切る前に、対象システムの一部を使った小規模なPoC(Proof of Concept:概念実証)を実施することで、本格着手前にリスクを見極めることができます。
いきなり全面解析に踏み切るリスク
対象システムの全体を一度に解析対象とすると、想定していなかったProGuard等による難読化やJavaEE特有のアプリケーションサーバ設定が途中で発覚し、当初見積もりを大きく超過するリスクがあります。また、逆コンパイラの精度がそのシステムの技術構成(Java言語バージョン、使用フレームワーク、ラムダ式の多用度合いなど)に対してどこまで通用するかは、実際に一部を解析してみなければ分からない部分も多くあります。さらに発注側と受注側の間で「仕様書」という言葉のイメージが食い違っていることも多く、フローチャートレベルを期待していたのに詳細設計書レベルの成果物が納品された(あるいはその逆)というミスマッチも典型的な失敗パターンです。PoCは、これらの技術的リスクと認識のズレを、小さな投資で事前に洗い出すための工程です。
PoCが果たす2つの役割(技術検証と合意形成)
JavaリバースエンジニアリングのPoCには、大きく分けて2つの役割があります。1つ目は「技術検証」で、対象のJava言語バージョン・フレームワーク(JavaEE、Struts、Spring等)に対して選定した逆コンパイラがどの程度の精度で動作するか、難読化やラムダ式・匿名クラスといった特殊な言語要素にどこまで対応できるかを、実際のコードの一部を使って確認します。2つ目は「合意形成」で、成果物のサンプルを実際に確認することで、発注側と受注側の間で「どこまで復元できれば十分か」というゴールイメージをすり合わせます。この2つの役割を意識してPoCを設計することで、本格解析フェーズでの手戻りやトラブルを大幅に減らすことができます。
PoC・プロトタイプの進め方

PoCを効果的に実施するには、対象範囲の選び方とツールの検証方法をあらかじめ設計しておく必要があります。
パイロットモジュールの選定基準
PoCの対象として選ぶパイロットモジュールは、闇雲に選ぶのではなく明確な基準を持って選定することが重要です。1つ目の基準は「代表性」で、対象システム全体の技術的な特徴(Java言語バージョン、Struts1/Struts2の別、難読化の有無など)を代表するような、典型的なWARモジュールやパッケージを選びます。2つ目は「独立性」で、他のモジュールへの依存が少なく、単体で解析結果を評価しやすいものを選ぶことで、検証結果の解釈がしやすくなります。3つ目は「業務的な重要性」で、今後のモダナイゼーション計画において優先度が高いと想定される機能を選んでおくと、PoCの成果物がそのまま本格解析の一部として活用できる場合もあります。多くの場合、1つのWARモジュール、あるいは数十〜数百クラス程度の規模がパイロットとして選ばれます。
逆コンパイラの精度検証
PoCの中核となるのが、逆コンパイラの精度検証です。無料で利用できるJD-GUIはまず全体像を素早く把握するのに適しており、多くのプロジェクトでここから検証を始めます。複雑な制御フローやジェネリクスの復元精度を重視する場合はCFR、アノテーションの復元まで確認したい場合はProcyon、IDE上でシームレスに確認したい場合はFernflower(IntelliJ IDEA内蔵)を使って検証します。パイロットモジュールに対してこれらのツールを実際に適用し、逆コンパイル結果の可読性、ラムダ式や匿名クラスの復元精度、変数名の消失度合い(難読化の有無)を具体的に評価することで、本格解析での期間・費用の見積もり精度を高めることができます。難読化が検出された場合は、この段階でどの難読化ツール(ProGuard、yGuard等)が使われているかを特定し、対応する解析手法を検討します。
仕様書モックアップ試作という手法

技術検証と並行して重要なのが、成果物のイメージをすり合わせる「仕様書モックアップ」の試作です。
成果物イメージを事前にすり合わせる目的
「仕様書を復元します」という言葉だけでは、発注側と受注側の間でイメージが一致しないことがよくあります。パイロットモジュールに対して実際に仕様書のモックアップ(試作版)を作成してもらうことで、粒度・記法・図表の使い方といった成果物の実物を発注前に確認できます。この確認を怠ると、本格解析が完了した後になって「想定していた詳細度と違った」というトラブルに発展し、追加の解析工数と費用が発生するリスクがあります。Javaリバースエンジニアリング特有の論点として、struts-config.xmlのアクションマッピングをどのレベルの画面遷移図に落とし込むか、EJBの呼び出し関係をどこまでシーケンス図として可視化するかといった点も、モックアップの段階で具体的にすり合わせておくことが、後工程でのトラブルを防ぐポイントです。
フローチャート/業務仕様書/詳細設計書のサンプル比較
成果物の粒度は大きく3段階に分けられます。フローチャートレベルは処理の大まかな流れと画面遷移を図示したもので、保守担当者の引き継ぎや現状把握が目的の場合に十分です。業務仕様書レベルは各機能の処理内容・入出力項目・業務ルール・エラー処理まで文書化したもので、モダナイゼーション計画の策定やRFP作成に必要な情報を含みます。詳細設計書レベルは画面遷移図・DB設計(テーブル定義とHibernate/MyBatisのマッピング関係)・インターフェース仕様まで含む最も詳細な成果物で、新システムの開発会社にそのまま渡せる情報量です。PoCの段階でこの3段階のサンプルを実際に見比べ、自社の目的にはどの粒度が適切かを判断しておくことで、本格発注時のスコープ齟齬を防げます。
PoCの期間・費用感

PoCは本格解析に比べて小規模に設計されるため、期間・費用ともに抑えられます。ただし、目的を達成できる最小限の規模を見極めることが重要です。
期間の目安
パイロットモジュールの規模にもよりますが、PoCの期間はおおむね1〜2週間程度が目安です。これは、本格解析の第1フェーズにあたる「対象選定」とほぼ同じ期間感であり、PoCをこの対象選定フェーズと一体で設計することで、無駄なく本格着手へと移行できるケースもあります。JavaEE/Strutsの多層構成に対応した検証まで含める場合は、XML設定ファイル群の解析も加わるため2〜3週間程度を見込んでおくとよいでしょう。ProGuard等による難読化の有無を確認する検証まで含める場合は、さらに数日〜1週間程度の余裕を持たせることをお勧めします。
費用の目安と本格解析費用への充当
PoCの費用は、パイロットモジュールの規模がLOC課金の基本料金レンジ(4,000行程度まで)に収まる場合、数万円〜数十万円程度で実施できることが多くなります。ベンダーによっては、PoCで実施した解析結果を本格解析の一部として引き継ぎ、本格発注時の費用から充当してもらえるケースもあります。発注前の提案段階で、PoC費用が本格解析の見積もりに充当可能かどうかを確認しておくと、無駄なく本格着手へ移行できます。なお、PoCをあまりに小規模に絞りすぎると、JavaEE/Strutsの多層構成特有の複雑さや難読化の実態が検証範囲に含まれず、本格解析での見積もり精度が上がらないこともあるため、代表性のあるモジュール選定とのバランスが重要です。
PoC後の意思決定(Go/No-Go判断)

PoCの結果は、そのまま本格着手の可否を判断する材料になります。
本格着手の判断基準
本格着手を判断する基準としては、まず逆コンパイラがパイロットモジュールに対して実用的な精度で動作したか(逆コンパイル結果が業務ロジックの理解に耐えうる可読性を持っていたか、難読化がどの程度復元を阻んでいたか)を確認します。次に、モックアップとして提示された成果物の粒度・品質が自社の目的に合致していたかを評価します。さらに、PoCで判明した工数実績をもとに、対象システム全体に換算した場合の期間・費用が予算感と乖離していないかを確認します。これらの検証項目をあらかじめチェックリストとして用意しておくことで、PoC完了後の意思決定をスムーズに進めることができます。
フルスクラッチ切替を検討すべきケース
PoCの結果、難読化の程度が著しく強く逆コンパイラでの復元精度が極めて低いと判明した場合や、パイロットモジュールの業務ロジックの大半がすでに使われなくなったStruts1時代の古い仕様であると分かった場合は、無理にリバースエンジニアリングを継続するのではなく、要件定義からやり直すフルスクラッチ開発への切り替えを検討すべきサインです。PoCはこうした「リバースを続ける価値があるかどうか」を早期に見極めるためのセーフティネットとしても機能します。判断に迷う場合は、パイロットモジュールで確認できた業務ロジックのうち、新システムでも必要と判断できる機能の割合を試算し、次の意思決定の材料とすることをお勧めします。
まとめ

本記事では、JavaのリバースエンジニアリングにおけるPoC・プロトタイプ・モックアップ開発について、PoCが果たす技術検証と合意形成という2つの役割、パイロットモジュールの選定基準、逆コンパイラの精度検証の進め方、仕様書モックアップによる成果物イメージのすり合わせ、期間・費用感、そしてPoC後の本格着手判断までを解説しました。JavaEE/Strutsで構築されたレガシーシステムに対して、いきなり本格的な全面解析へ踏み切るのではなく、まず1〜2週間程度の小規模なPoCで逆コンパイラの実現可能性と成果物イメージを確認することが、後工程での手戻りとトラブルを大幅に減らします。
PoCで得られた工数実績と成果物サンプルは、本格解析の見積もり精度を高めるだけでなく、リバースエンジニアリングを継続すべきか、フルスクラッチ開発に切り替えるべきかという重要な判断材料にもなります。JavaEE/Strutsの解析実績を持つパートナーとともに、まずは小さく試すところから始めることをお勧めします。
▼全体ガイドの記事
・Javaのリバースエンジニアリングの完全ガイド
株式会社riplaでは、IT事業会社出身のプロフェッショナルが「Impact-Driven型支援」を通じて、プロダクトやシステムの納品・提供を目的とせず、お客様と同じ目線で、事業成果の達成をゴールとして、高品質なDX/開発支援をいたします。

また、当社独自の開発テンプレート「Boxシリーズ」による標準機能の高速開発と、AI駆動開発の独自フレームワーク「GoDD」による独自機能のAI実装を組み合わせることで、低コスト・短期間で開発を実現いたします。

もし、システム開発やプロダクト開発に関するご要望がございましたら、お気軽にお問い合わせください。
・サービス概要資料のURLはこちら >>>
・お問合せページのURLはこちら >>>
・お役立ち資料のURLはこちら >>>


株式会社ripla 代表取締役CEOとして、システムパッケージ活用、システム開発、データ分析、生成AI活用、SaaS開発、アプリ開発、EC構築など、幅広い領域で企業のDX推進と事業成長を支援している。IT事業会社出身のプロフェッショナルが集う株式会社riplaにおいて、「Impact-Driven型支援」を掲げ、単なるシステム納品にとどまらず、クライアントと同じ目線で事業成果の実現に向けた伴走支援を行う。早稲田大学卒業後、ラクスル株式会社、LINEヤフー株式会社にて事業開発やDX推進などに従事した後、株式会社riplaを創業。
