Pythonのリバースエンジニアリングの開発期間・スケジュール・納期について

Pythonのリバースエンジニアリングの期間は、対象の配布形態と規模で大きく変わります。目安は、純粋な.pyの小規模で1〜2ヶ月、PyInstallerやCython、機械学習パイプラインを含む中規模で2〜6ヶ月、PyArmor難読化や複数モデルが絡む大規模では6ヶ月以上かかるケースもあります。

  • Pythonリバースエンジニアリングの開発期間が読みにくい理由
  • 対象形態・規模別に見る開発期間の目安
  • 期間を左右する3つのPython固有要因

たとえば、「Pythonはスクリプト言語だからソースコードが読めるはず」と着手したものの、実際には.pyc(コンパイル済みバイトコード)や実行ファイルとして配布されていて、想定より解析に時間がかかるケースがあります。

また、データサイエンティストや自動化スクリプトの担当者が退職し、機械学習パイプラインの依存関係を誰も把握していない状況もあります。さらに、Python2で書かれたまま塩漬けになっているシステムを、Python3へ移行する前にまず現状調査したい場面もあります。

Pythonのリバースエンジニアリングとは、こうした課題を抱えるPythonシステムのソースコード・バイトコード・実行バイナリを解析し、失われた設計情報や業務仕様を逆方向に復元する技術です。刷新・移行プロジェクトに着手する前段の「分析・調査」工程として位置づけられます。

期間を見積もる前に、対象の実態を正しく把握することが、現実的なスケジュールを描く第一歩です。確認すべきは、「.pycなのかPyInstaller製バイナリなのか」「機械学習パイプラインが含まれているか」「Python2からの移行前調査か」といった点です。

このテーマの全体像は、以下の全体ガイドをご覧ください。

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

Pythonリバースエンジニアリングの開発期間が読みにくい理由

COBOLやC言語なら「バイナリ解析が必須で工数がかかる」という前提を共有しやすいものです。一方、Pythonは「スクリプト言語だから読めば分かるはず」という先入観が生まれやすく、これが期間見積もりを狂わせる最大の要因になります。

実際の現場では、純粋な.pyファイルがそのまま手に入るケースは限られています。.pycのみの配布や、PyInstallerやcx_Freezeで単一実行ファイルにまとめた状態もあります。

さらに、CythonでコンパイルされたC拡張モジュール(.so/.pyd)や、PyArmorによるランタイム暗号化も見られます。配布形態によって、解析工程そのものが根本的に変わります。

そのため、この対象形態の見極めを発注前に済ませているかどうかが、期間見積もりの精度を大きく左右します。

「スクリプト言語だから解析は簡単」という誤解と5つの対象形態

Pythonの対象形態は、大きく次の5つに分けられます。

  1. 純粋な.pyファイル:可読なソースコードそのものです。
  2. .pycのみの配布:uncompyle6やdecompile3による逆コンパイルが必要になります。
  3. PyInstallerなどで単一実行ファイル化されたもの:pyinstxtractorによるアンパック工程が加わります。
  4. Cython拡張(.so/.pyd):実質的にCバイナリ解析が求められます。
  5. PyArmorなどでランタイム暗号化されたコード:静的解析が困難なため、動的解析が中心になります。

この5形態では解析工数が大きく異なります。たとえば、同じ「1万行のPythonシステム」でも、純粋な.pyなら数週間で済む調査が、PyArmor保護されたコードでは数ヶ月に及ぶこともあります。

発注側が「Pythonだから早く終わるだろう」という前提でスケジュールを組むと、着手後に想定を大きく超える工数が判明し、納期そのものが破綻するリスクが高まります。

刷新・移行プロジェクトの「前段」に位置する分析・調査工程という特殊性

Pythonのリバースエンジニアリングは、モダナイゼーションや刷新・移行の前段で行う現状分析・調査です。ここでできあがるのは新しいシステムではなく、業務仕様書や設計書、機械学習パイプラインならアーキテクチャ図や特徴量定義書といった「復元されたドキュメント」です。この位置づけを見誤ると、期間見積もりの前提そのものがずれてしまいます。

COBOLがJCL・COPY句・VSAMといったホスト固有仕様の解読に重心を置くのに対し、Pythonでは論点が変わります。対象形態の特定(.py/.pyc/PyInstaller/Cython/PyArmor)が中心になります。機械学習パイプラインを含む場合はモデルと特徴量エンジニアリングの解読が、Python2からPython3への移行を見据える場合は非互換箇所の洗い出しが加わります。

ポイント

期間を見積もる前に、対象が.pycなのかPyInstaller製バイナリなのか、Cython拡張なのかPyArmor保護済みなのかを確かめておくと、見積もりの前提がずれにくくなります。

対象形態・規模別に見る開発期間の目安

小規模・中規模・大規模プロジェクトの期間目安を3枚のパネルで比較した図。
対象の規模が大きくなるにつれて、期間の目安も長くなります。

Pythonのリバースエンジニアリングは、一連の工程で進めるのが標準的です。対象選定と環境準備から始まり、静的解析、動的解析、抽象化を経て、資料化に至ります。対象形態によって工程の重みが変わるため、工程別の期間の目安を先に押さえておくと、見積もりを読み解きやすくなります。

対象選定〜静的解析(逆コンパイル)までの期間

対象選定では、対象ファイル一覧、使用Pythonバージョン(2.7/3.6/3.10等)、依存ライブラリ、実行形態を洗い出します。標準的な規模(数千〜1万行程度)であれば、1〜2週間が目安です。

純粋な.pyファイルなら、静的解析はAST(抽象構文木)解析によるクラス・関数・モジュールの依存関係の把握が中心で、1〜3週間程度で完了することが多くなります。一方、.pycのみの配布であれば、uncompyle6またはdecompile3による逆コンパイル工程が必要になります。

PyInstaller製実行ファイルであれば、pyinstxtractorによるアンパック工程がさらに加わり、この段階だけで通常の1.2〜1.5倍程度の期間を要します。特に、Cython拡張が含まれる場合は、GhidraやIDA Proによるバイナリレベルの逆コンパイルが必要になり、静的解析フェーズ全体で1〜2ヶ月に伸びることも珍しくありません。

動的解析〜仕様書化までの期間と規模別合計期間

動的解析では、pdbデバッガや実行トレースで実際の処理の流れを確認します。機械学習パイプラインが対象であれば、PyTorchのforward hookやTensorFlowのtf.functionラップによって中間層の出力も記録します。この工程は業務部門や元担当者へのヒアリングと並行して進むため、標準的な規模で2〜6週間を見込みます。

その後の抽象化(Design Recovery)から資料化までは、どこまで詳しく書き起こすかで2週間〜2ヶ月程度の幅があります。具体的には、フローチャートのみか、業務仕様書か、新システム開発に使える詳細設計書かで変わります。

これらを合算すると、純粋な.pyファイルを対象とする小規模プロジェクト(4,000〜1万行程度)は1〜2ヶ月です。PyInstaller・Cython・機械学習パイプラインを含む中規模プロジェクト(1〜10万行程度)は2〜6ヶ月です。PyArmor難読化や複数モデル・複数パイプラインが絡む大規模プロジェクトでは、6ヶ月以上かかるケースもあります。

ポイント

規模の目安を見るときは、対象の形態で工程の重みが変わる点も合わせて確認してください。.pycやPyInstaller、Cython拡張では静的解析の期間が延びやすいためです。

期間を左右する3つのPython固有要因

バイトコードバージョン、機械学習パイプライン、Python2からPython3への移行を期間に影響する要因として並べた図。
対象に含まれる要因を先に洗い出すと、見積もりで確認すべき論点が定まります。

工程別と規模別の目安を押さえたうえで、Python案件の期間を特に左右する3つの固有要因を知っておくと、スケジュールの精度が上がります。

バイトコードバージョン・逆コンパイラ対応可否による解析難易度

Pythonのバイトコード(オペコード)は、マイナーバージョンが変わるだけで構造が変わることがあります。たとえば、定番の逆コンパイラであるuncompyle6は、Python 3.9以降の.pycに対応していません。そのため、新しいバージョンにはdecompile3を使う必要があります。

対象の.pycがどのPythonバージョンでコンパイルされたかを事前に特定できていないと、逆コンパイラの選定を誤ります。その結果、不完全なコードしか復元できず、後工程でやり直しが発生します。また、PyInstallerもバージョンによってアーカイブ形式が異なり、古いpyinstxtractorでは正しくアンパックできないケースもあります。

難読化ツール(変数名の意味のない文字列への置換、eval/exec経由での文字列動的生成など)が併用されていると、逆コンパイル結果の可読性がさらに落ちます。解析期間が通常の1.5倍以上に延びることも珍しくありません。

機械学習パイプライン解析とPython2→3移行前調査に必要な追加期間

機械学習パイプラインやデータ処理スクリプトの依存関係解析は、通常のビジネスロジック解析とは別の専門性が必要です。訓練済みモデル(.pkl/.h5/.ptなど)のアーキテクチャ復元や、前処理・特徴量エンジニアリング手順の文書化には、データサイエンスの知見を持つエンジニアの配置が必須です。ハイパーパラメータや評価指標の定義の解明にも、同じ知見が求められます。

そのため、同規模のビジネスロジック解析と比べて1.5〜3倍の期間を要することが一般的です。一方、Python2で書かれたレガシースクリプトをPython3へ移行する前段の調査では、「2to3互換性調査」という独自の工程が発生します。この工程では、print文の構文変更、文字列とバイト列の型統一、辞書メソッドの仕様変更といった非互換箇所を洗い出します。

2020年のPython2サポート終了から時間が経過している案件ほど、有識者の退職が進んでいることが多く、ヒアリングによる仕様確認に想定以上の時間がかかる傾向があります。

ポイント

バイトコードのバージョン、機械学習パイプライン、Python2からの移行という3つの要因のうち、どれが対象に当てはまるかを発注前に確かめてください。当てはまる要因ごとに、期間が延びる前提で見積もりを見直してください。

納期遅延のリスク要因と対策

対象.pycのPythonバージョン、逆コンパイル結果の可読性、暗黙的な依存、ヒアリング候補者の日程を中央テーマの周囲に配置した図。
解析ツール、実行環境、関係者の確認を着手前から並行して進められます。

期間を左右する要因を踏まえると、実際の案件で納期が崩れる典型的なパターンと、その対策が見えてきます。

逆コンパイラのバージョンミスマッチによる手戻り

着手前に対象.pycのPythonバージョンを特定できていないまま、対応していない逆コンパイラで作業を進めてしまうケースが頻発します。その結果、変数名やクラス構造が大量に欠落した不完全なコードしか得られず、途中で別ツールへの切り替えを迫られます。

この手戻りは、静的解析フェーズ全体を1からやり直すことにつながり、数週間単位の遅延要因になります。対策として、着手前に対象.pycのマジックナンバー(Pythonバージョンを識別するヘッダ情報)を確認し、uncompyle6とdecompile3のどちらが適合するかを事前に検証しておくことが有効です。

少量のサンプルファイルで逆コンパイル結果の可読性を確認するミニPoCを、準備・スコープ確定フェーズに組み込んでおきます。こうしておくと、本格着手後の手戻りを未然に防げます。

「動かしてみて初めて分かる」依存関係地雷とヒアリング遅延

Pythonの自動化スクリプトや機械学習パイプラインでは、requirements.txtに記載のないライブラリへの暗黙的な依存が埋め込まれていることが多くあります。また、特定の実行環境(GPU・特定OSバージョン)でしか動作しない条件分岐も含まれるため、静的解析だけでは全貌が見えません。

実際に動的解析で実行してみて初めて、「このモジュールは別サーバーのAPIを呼び出していた」「この分岐は特定顧客向けの例外処理だった」といった事実が判明し、追加の調査が必要になるケースが頻発します。

コードから読み取れるのは「How(どう動くか)」までで、「Why(なぜその実装か)」は元の担当者にしか分かりません。そのため、業務部門や元担当者へのヒアリングが遅れると、工程全体が停滞します。対策として、動的解析の着手と同時期にヒアリング候補者のスケジュールを確保し、週1回程度の定例ヒアリングをWBSに組み込んでおくことが有効です。

ポイント

納期が崩れる原因は、逆コンパイラの選定ミスや、依存関係の見落とし、ヒアリングの遅れに集まります。着手前のサンプル検証と、ヒアリング日程の早期確保が対策になります。

依頼先選定と体制構築が開発期間に与える影響

同じ規模・対象形態のPythonシステムでも、依頼先や体制によって開発期間は大きく変わります。

Python解析実績・MLエンジニア体制の確認ポイント

依頼先を選ぶ際は、「Python対応可能」というだけでなく、具体的な実績を確認することが重要です。特に、対象形態(.pyc逆コンパイル・PyInstallerアンパック・Cythonバイナリ解析・PyArmor難読化解除)ごとの実績を見ると、対応の差が見えてきます。

機械学習パイプラインが含まれる案件では、MLエンジニアがプロジェクトに配置されるかどうかを事前に確認してください。MLエンジニアが不在のまま解析を進めると、コードは読めても特徴量選定やハイパーパラメータ調整の根拠が分からず、資料の品質を保てないまま期間だけが延びるという事態に陥りがちです。

Ghidra・IDA Pro・uncompyle6・decompile3といった解析ツールの活用実績と、類似規模のPythonプロジェクトでの経験を、提案段階で具体的な事例とともに確認します。この確認が、期間見積もりの妥当性を検証する近道です。

パイロットスクリプトによる段階的着手と契約形態

対象システム全体を一度に解析せず、代表的な数ファイル〜十数ファイル程度をパイロットとして先行着手する段階的な進め方が有効です。逆コンパイラの精度や難読化の有無、機械学習パイプラインの複雑さを実測してから、残りの範囲のスケジュールを具体化していきます。

スコープが不確定な初期調査フェーズは、実働時間に応じた準委任契約が適しています。一方、対象形態と資料の粒度が明確になった本解析フェーズ以降は、請負契約への切り替えが向いています。

どうしても短納期が求められる場合、通常の短縮では総額の20〜30%増、大幅な短縮や休日・深夜対応が必要な場合は40〜60%増が特急料金の相場です。そのため、システム担当者の退職やPython2のサポート終了という「待ったなし」の状況になる前に、計画的に着手することが期間・費用の両面で最も合理的です。

ポイント

依頼先は、対象形態ごとの解析実績とMLエンジニアの配置を確認して選ぶと、期間見積もりの妥当性を検証しやすくなります。段階的に着手すれば、残りの範囲は実測をもとに見積もれます。

まとめ

Pythonのリバースエンジニアリングの開発期間は、対象形態の多様性によって読みにくくなります。ここまで、工程別・規模別の期間の目安と、期間を左右する3つのPython固有要因(バイトコードバージョン、機械学習パイプライン解析、Python2→3移行前調査)を見てきました。さらに、納期遅延を招く2大リスク要因と対策、依頼先選定・体制構築が期間に与える影響も扱いました。

「スクリプト言語だから簡単」という前提を捨て、対象が.pyなのか、.pycやPyInstaller製バイナリなのか、Cython拡張やPyArmor保護済みなのかを発注前に見極めることが、期間見積もりの出発点になります。

小規模(純粋な.py)は1〜2ヶ月、中規模(PyInstallerや機械学習パイプラインを含む)は2〜6ヶ月、大規模(PyArmor難読化や複数モデルが絡む)は6ヶ月以上が一つの目安です。ただし、逆コンパイラのバージョン適合と業務部門ヒアリングの早期確保が、この目安を守れるかどうかを分ける鍵になります。

対象形態ごとの解析実績とMLエンジニア体制を持つ信頼できるパートナーに、早めに相談することをお勧めします。

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

会社紹介

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

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

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

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

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

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