「Pythonはスクリプト言語だからソースコードが読めるはず」――そう思って着手したものの、実際には.pyc(コンパイル済みバイトコード)や実行ファイルとして配布されており、想定していたよりも解析に時間がかかっている。データサイエンティストや自動化スクリプトの担当者が退職し、機械学習パイプラインの依存関係を誰も把握していない。あるいは、Python2で書かれたまま塩漬けになっているシステムをPython3へ移行する前に、まず現状を調査したい。Pythonのリバースエンジニアリングとは、こうした課題を抱えるPythonシステムのソースコード・バイトコード・実行バイナリを解析し、失われた設計情報や業務仕様を逆方向に復元する技術であり、刷新・移行プロジェクトに着手する前段の「分析・調査」工程として位置づけられます。
本記事では、Pythonのリバースエンジニアリングの開発期間・スケジュール・納期に焦点を当て、なぜ期間が読みにくいのかという構造的要因から、対象形態・規模別の期間目安、期間を左右するPython固有の3つの要因、納期遅延のリスクと対策、依頼先選定が期間に与える影響までを体系的に解説します。「.pycなのかPyInstaller製バイナリなのか」「機械学習パイプラインが含まれているか」「Python2からの移行前調査か」といった対象の実態を正しく把握することが、現実的なスケジュールを描くための第一歩です。
本テーマに関する全体ガイドは、以下の記事をご覧ください。
▼全体ガイドの記事
・Pythonのリバースエンジニアリングの完全ガイド
Pythonリバースエンジニアリングの開発期間はなぜ読みにくいのか

COBOLやC言語のリバースエンジニアリングであれば「バイナリ解析が必須で工数がかかる」という前提を共有しやすいのに対し、Pythonの場合は「スクリプト言語だから読めば分かるはず」という先入観が期間見積もりを狂わせる最大の要因になります。実際の現場では、純粋な.pyファイルがそのまま入手できるケースは限られており、.pyc(バイトコード)のみの配布、PyInstallerやcx_Freezeで単一実行ファイルにパッケージングされた状態、CythonでコンパイルされたC拡張モジュール(.so/.pyd)、PyArmorによるランタイム暗号化など、対象の配布形態によって解析工程そのものが根本的に変わります。この「対象形態の見極め」を発注前に済ませているかどうかが、期間見積もりの精度を大きく左右します。
「スクリプト言語だから解析は簡単」という誤解と5つの対象形態
Pythonの対象形態は大きく5つに分類できます。第一に純粋な.pyファイル(可読なソースコードそのもの)、第二に.pycのみの配布(uncompyle6やdecompile3による逆コンパイルが必要)、第三にPyInstaller等でパッケージングされた単一実行ファイル(pyinstxtractorによるアンパック工程が加わる)、第四にCython拡張として配布された.so/.pydファイル(実質的にCバイナリ解析が必要)、第五にPyArmorなどでランタイム暗号化されたコード(静的解析が困難で動的解析が中心になる)です。この5形態は解析工数が大きく異なり、同じ「1万行のPythonシステム」でも、純粋な.pyであれば数週間で済む調査が、PyArmor保護されたコードでは数ヶ月に及ぶこともあります。発注側が「Pythonだから早く終わるだろう」という前提でスケジュールを組んでしまうと、着手後に想定を大きく超える工数が判明し、納期そのものが破綻するリスクが高まります。
刷新・移行プロジェクトの「前段」に位置する分析・調査工程という特殊性
Pythonのリバースエンジニアリングは、モダナイゼーションや刷新、移行といった本体プロジェクトに着手する前段で行う現状分析・調査工程であり、成果物は新しいシステムそのものではなく、業務仕様書や設計書、あるいは機械学習パイプラインのアーキテクチャ図・特徴量定義書といった「復元されたドキュメント」です。COBOLのリバースエンジニアリングがJCL・COPY句・VSAMというホスト固有仕様の解読に重心を置くのに対し、Pythonの場合は対象形態の特定(.py/.pyc/PyInstaller/Cython/PyArmor)と、機械学習パイプラインを含む場合のモデル・特徴量エンジニアリングの解読、そしてPython2からPython3への移行を見据えた非互換箇所の洗い出しという、Python特有の論点に重心が移ります。この位置づけを見誤ると、期間見積もりの前提そのものがずれてしまいます。
対象形態・規模別に見る開発期間の目安

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ヶ月以上を要するケースもあります。
期間を左右する3つのPython固有要因

工程別・規模別の目安を押さえた上で、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へ移行する前段の調査では、print文の構文変更、文字列とバイト列の型統一、辞書メソッドの仕様変更といった非互換箇所を洗い出す「2to3互換性調査」という独自の工程が発生します。2020年のPython2サポート終了から時間が経過している案件ほど、有識者の退職が進んでいることが多く、ヒアリングによる仕様確認に想定以上の時間がかかる傾向があります。
納期遅延のリスク要因と対策

期間を左右する構造的要因を理解した上で、実際のプロジェクトで納期が崩れる典型的なパターンとその対策を整理します。
逆コンパイラのバージョンミスマッチによる手戻り
着手前の段階で対象.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のサポート終了という「待ったなし」の状況になる前に、計画的に着手することが期間・費用の両面で最も合理的です。
まとめ

本記事では、Pythonのリバースエンジニアリングの開発期間・スケジュール・納期について、期間が読みにくくなる構造的要因(対象形態の多様性)、工程別・規模別の期間の目安、期間を左右する3つのPython固有要因(バイトコードバージョン、機械学習パイプライン解析、Python2→3移行前調査)、納期遅延を招く2大リスク要因と対策、依頼先選定・体制構築が期間に与える影響を体系的に解説しました。「スクリプト言語だから簡単」という前提を捨て、対象が.pyなのか.pycなのかPyInstaller製バイナリなのかCython拡張なのかPyArmor保護済みなのかを事前に見極めることが、期間見積もりの出発点になります。
純粋な.pyファイルの小規模プロジェクトなら1〜2ヶ月、PyInstallerや機械学習パイプラインを含む中規模なら2〜6ヶ月、PyArmor難読化や複数モデルが絡む大規模なら6ヶ月以上というのが一つの目安ですが、逆コンパイラのバージョン適合と業務部門ヒアリングの早期確保が、この目安を守れるかどうかを分ける鍵になります。対象形態ごとの解析実績とMLエンジニア体制を持つ信頼できるパートナーに、早めに相談することをお勧めします。
▼全体ガイドの記事
・Pythonのリバースエンジニアリングの完全ガイド
株式会社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を創業。
