JavaのリバースエンジニアリングのPoC・プロトタイプ・モックアップ開発について

Javaのリバースエンジニアリングでは、いきなり全面解析に入るのは大きなリスクです。そこで、本格着手の前に一部でPoC(概念実証)やモックアップを作り、逆コンパイルの実現性と成果物のイメージを確かめます。

「まずは小さく試してから決めたい」担当者の方に向けて、進め方から本格着手の判断まで、順に説明します。

  • 対象:改修する範囲と業務上の条件
  • 工程:計画から実装まで
  • 確認:品質と運用の条件

本テーマの全体像は、次の記事にまとめています。

▼全体ガイドの記事
・Javaのリバースエンジニアリングの完全ガイド

Javaリバースエンジニアリングの概要とPoCから始める理由

Javaリバースエンジニアリングとは何か(なぜPoCから始めるべきか)

Javaのリバースエンジニアリングは、クラスファイルやJAR・WAR・EARから設計情報と業務ロジックを逆方向に復元する技術です。刷新や移行のプロジェクトに着手する前段で行う、現状分析・調査の工程に位置づけられます。

調査工程そのものが、対象システムの規模やProGuard等による難読化の有無、JavaEE/Strutsの構成の複雑さによっては、数ヶ月から1年以上の期間と数百万円規模の費用を要することもあります。

このため、いきなり全面解析に踏み切る前に、対象システムの一部を使った小規模なPoC(Proof of Concept:概念実証)を行い、リスクを見極めます。

いきなり全面解析に踏み切るリスク

対象システム全体を一度に解析すると、想定していなかったProGuard等による難読化やJavaEE特有のアプリケーションサーバ設定が途中で発覚し、当初の見積もりを大きく超えるリスクがあります。また、逆コンパイラの精度が、そのシステムの技術構成(Java言語バージョン、使用フレームワーク、ラムダ式の多用度合いなど)にどこまで通用するかは、一部を解析してみないと分からない部分が多くあります。

さらに、発注側と受注側で「仕様書」のイメージが食い違うことも多く、フローチャートレベルを期待して詳細設計書レベルの成果物が届く(あるいはその逆)ミスマッチも、典型的な失敗パターンです。PoCは、こうした技術的リスクと認識のズレを、小さな投資で事前に洗い出すための工程です。

PoCの2つの役割:技術検証と合意形成

PoCには大きく分けて2つの役割があります。1つ目は「技術検証」で、対象のJava言語バージョンやフレームワーク(JavaEE、Struts、Spring等)に対して、選んだ逆コンパイラがどの程度の精度で動くかを、実際のコードの一部で確かめます。難読化やラムダ式・匿名クラスといった特殊な言語要素に、どこまで対応できるかも見ます。

2つ目は「合意形成」で、成果物のサンプルを実際に見ることで、発注側と受注側の間で「どこまで復元できれば十分か」というゴールイメージをすり合わせます。

この2つの役割を意識してPoCを設計すると、本格解析の段階での手戻りやトラブルを大幅に減らせます。

ポイント

対象に難読化や複雑なJavaEE・Strutsの構成が見込まれるなら、全面解析の前に一部でPoCを行い、期間と費用を見積もるのが安全です。

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等)が使われているかを特定し、対応する解析手法を検討します。

ポイント

PoCの対象は、システム全体を代表し、他への依存が少なく、精度を見極めやすい範囲に絞るのが目安です。絞りすぎると、本格解析の見積もり精度が上がらなくなります。

仕様書モックアップ試作という手法

仕様書モックアップ試作という手法

技術検証と並行して進めたいのが、成果物のイメージをすり合わせるための「仕様書モックアップ」の試作です。

成果物イメージを事前にすり合わせる目的

「仕様書を復元します」という言葉だけでは、発注側と受注側でイメージが一致しないことがよくあります。そこで、パイロットモジュールについて仕様書のモックアップ(試作版)を作成してもらうと、粒度・記法・図表の使い方といった成果物の実物を、発注前に確認できます。

この確認を怠ると、本格解析が完了した後になって「想定していた詳細度と違う」というトラブルに発展し、追加の解析工数と費用が発生するおそれがあります。

Javaリバースエンジニアリング特有の論点として、struts-config.xmlのアクションマッピングをどの粒度の画面遷移図に落とし込むか、EJBの呼び出し関係をどこまでシーケンス図で示すかがあります。そのため、これらをモックアップの段階で具体的にすり合わせておけば、後工程のトラブルを防げます。

フローチャート/業務仕様書/詳細設計書のサンプル比較

成果物の粒度は大きく3段階に分けられます。フローチャートレベルは、処理の大まかな流れと画面遷移を図で示したもので、保守担当者への引き継ぎや現状把握が目的なら十分です。

業務仕様書レベルは、各機能の処理内容と業務ルールを文書にしたものです。入出力項目やエラー処理まで含むため、モダナイゼーション計画の策定やRFP作成に必要な情報がそろいます。

詳細設計書レベルは、画面遷移図やインターフェース仕様まで含む最も詳細な成果物です。DB設計ではテーブル定義とHibernate/MyBatisのマッピング関係も含み、新システムの開発会社にそのまま渡せる情報量です。PoCの段階で3段階のサンプルを見比べ、自社に合う粒度を判断しておけば、本格発注時の範囲のずれを防げます。

ポイント

発注前にモックアップで粒度と記法を確かめ、発注側と受注側のイメージが合うかを判断の目安にします。合わないまま進むと、追加の工数と費用がかかるおそれがあります。

PoCの期間・費用感

PoCの期間・費用感

PoCは本格解析より小さく設計されるため、期間も費用も抑えられます。ただし、目的を果たせる最小限の規模を見極めることが大切です。

期間の目安

パイロットモジュールの規模にもよりますが、PoCの期間はおおむね1〜2週間程度が目安です。

これは、本格解析の第1フェーズにあたる「対象選定」とほぼ同じ期間感です。そこで、PoCをこの対象選定フェーズと一体で設計すれば、無駄なく本格着手へ移れるケースもあります。

JavaEE・Strutsの多層構成に対応した検証まで含める場合は、XML設定ファイル群の解析も加わるため、2〜3週間程度を見込んでおくとよいでしょう。また、難読化の有無まで検証に含めるなら、さらに数日〜1週間程度の余裕を持たせることをお勧めします。

費用の目安と本格解析費用への充当

PoCの費用は、パイロットモジュールの規模がLOC課金の基本料金レンジ(4,000行程度まで)に収まる場合、数万円〜数十万円程度で実施できることが多くなります。

ベンダーによっては、PoCで実施した解析結果を本格解析の一部として引き継ぎ、本格発注時の費用から充当してもらえるケースもあります。そこで、発注前の提案段階で、PoC費用が本格解析の見積もりに充当できるかを確認しておくと、無駄なく本格着手へ移れます。

なお、PoCを小さく絞りすぎると、JavaEE・Strutsの多層構成特有の複雑さや難読化の実態が検証範囲に入らず、本格解析の見積もり精度が上がらないこともあります。代表性のあるモジュールを選ぶことと、規模とのバランスが大切です。

ポイント

PoCの期間は1〜2週間程度を目安に、検証範囲に応じて見込みを立て、本格発注時の費用に充当できるかを発注前に確かめておくとよいでしょう。

PoC後の意思決定とGo/No-Go判断

PoC後の意思決定(Go/No-Go判断)

PoCの結果は、本格着手の可否を判断するための材料です。

本格着手の判断基準

まず、逆コンパイラがパイロットモジュールに実用的な精度で動いたかを確認します。具体的には、逆コンパイル結果が業務ロジックを理解できる可読性を持っていたか、難読化がどの程度復元を阻んだかを見ます。

次に、モックアップとして示された成果物の粒度と品質が、自社の目的に合っていたかを評価します。さらに、PoCで判明した工数実績をもとに、対象システム全体に換算したときの期間・費用が予算感から大きくずれていないかを確認します。

発注側と受注側が検証項目をあらかじめチェックリストにまとめておけば、PoC完了後の意思決定を円滑に進められます。

フルスクラッチ切替を検討すべきケース

PoCの結果、難読化が著しく強く逆コンパイラでの復元精度が極めて低いと分かった場合は、要件定義からやり直すフルスクラッチ開発への切り替えを検討すべきサインです。業務ロジックの大半がすでに使われなくなったStruts1時代の古い仕様だと分かった場合も、無理にリバースエンジニアリングを続けず、切り替えを考える場面です。

PoCは、こうした「リバースを続ける価値があるかどうか」を早期に見極めるためのセーフティネットとしても機能します。

判断に迷う場合は、パイロットモジュールで確認できた業務ロジックのうち、新システムでも必要な機能の割合を試算し、次の意思決定の材料にするとよいでしょう。

ポイント

PoCで精度・粒度・費用感が目的や予算に合えば本格着手へ進みます。難読化が著しく強いなどの場合は、フルスクラッチ開発への切り替えも検討します。

まとめ

JavaリバースエンジニアリングのPoCまとめ

ここまで、JavaのリバースエンジニアリングにおけるPoC・プロトタイプ・モックアップ開発を解説しました。PoCは、技術検証と合意形成という2つの役割を持ち、パイロットモジュールの選び方や仕様書モックアップの試作まで扱いました。

JavaEE・Strutsで構築されたレガシーシステムでは、いきなり全面解析に進むより、まず1〜2週間程度の小規模なPoCで、逆コンパイラの実現性と成果物のイメージを確かめるほうが安全です。これにより、後工程での手戻りとトラブルを大幅に減らせます。

PoCで得られた工数実績と成果物のサンプルは、本格解析の見積もり精度を高めるだけでなく、リバースエンジニアリングを続けるか、フルスクラッチ開発へ切り替えるかを決める大切な判断材料にもなります。

JavaEE・Strutsの解析実績を持つパートナーとともに、まずは小さく試すところから始めることをお勧めします。

▼全体ガイドの記事
・Javaのリバースエンジニアリングの完全ガイド

会社紹介

株式会社riplaでは、お客様の事業・ユーザー・業務に最適化したオーダーメイド型システムを、構想策定・要件定義から開発・改善まで一気通貫で支援。事業会社でIT・DXを経験したプロフェッショナルによる高い要件定義力・システム設計力を活かし、事業成果の最大化に伴走します。

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

もし、システム開発やプロダクト開発に関するご要望がございましたら、お気軽にお問い合わせください。

・サービス概要資料のURLはこちら >>>
・お問合せページのURLはこちら >>>
・お役立ち資料のURLはこちら >>>

執筆者プロフィール
張田谷凌央
張田谷凌央

株式会社ripla 代表取締役CEOとして、システムパッケージ活用、システム開発、データ分析、生成AI活用、SaaS開発、アプリ開発、EC構築など、幅広い領域で企業のDX推進と事業成長を支援している。事業会社でIT・DXを経験したプロフェッショナルが集う株式会社riplaにおいて、お客様の事業・ユーザー・業務に最適化したオーダーメイド型システムを構想策定・要件定義から開発・改善まで一気通貫で支援し、単なるシステム納品にとどまらず、クライアントと同じ目線で事業成果の最大化に向けた伴走支援を行う。早稲田大学卒業後、ラクスル株式会社、LINEヤフー株式会社にて事業開発やDX推進などに従事した後、株式会社riplaを創業。