PHPのリバースエンジニアリングの発注/外注/依頼/委託方法について

PHPのリバースエンジニアリングの外注は、準備から発注先の選定と契約を経て、プロジェクト推進へと順に進めます。

PHPはソースコードがそのまま読めるのに、なぜリバースエンジニアリングが必要なのか、ion.cubeで暗号化されたファイルはどう扱うのかで迷い、発注に進めないケースもあります。

  • 準備:現行資産と発注目的を整理する
  • 発注先の選定:RFPを作り、提案を比べて選ぶ
  • 契約:NDAとクリーンルーム条項を取り決める
  • 役割分担:業務部門とIT部門の役割を決める

PHPリバースエンジニアリング外注前の準備

PHPのバージョン、使用フレームワーク、ファイル数と行数、データベースを並べた確認カード図。
対象情報をそろえると、ベンダーが機能別の工数を見積もりやすくなります。

準備が不十分なままベンダーへ依頼すると、適切な見積もりが出せず、プロジェクト開始後に「聞いていなかった」「対象外だった」というトラブルが相次ぎます。適切な準備なく外注すると、成果物の品質が期待を大幅に下回ったり、業務ロジックの欠損が後の開発フェーズで発覚して手戻りが生じたりするおそれもあります。

PHPは他の言語と異なり、ソースコードがプレーンテキストで読めます。ただ、リバースエンジニアリングの定義・範囲・難易度の認識が、発注側とベンダー側でずれやすいという特有の課題があります。

発注前に棚卸し、技術スタックの把握、難読化の有無の確認を済ませておくことが、スムーズな外注の前提条件となります。

ソースコードの整理と棚卸し

まず、解析対象となるPHPシステムのソース資産を棚卸しし、次の項目を一覧にします。

  • PHPのバージョン:4.x / 5.x / 7.x / 8.xのいずれか
  • 使用フレームワーク:Laravel・CakePHP・Symfony・WordPress・Codeigniter、またはフレームワークなしのスパゲティコード
  • ファイル数と行数:総数と行数の概算
  • データベース:種類(MySQL・PostgreSQL等)とテーブル数

ファイル数と行数は、ベンダーがLOC(行数)ベースで見積もる際の基礎データになるため、できるだけ正確に把握しておきます。さらに、棚卸しの際にファイルを機能別に分類しておくと、より有効です。たとえば次のように整理すると、ベンダーが機能別の工数を見積もりやすくなります。

  • 受注処理:約20ファイル・3,200行
  • 在庫管理:約15ファイル・2,100行
  • 管理画面:約30ファイル・4,500行

また、既存のドキュメント(システム仕様書の断片・データベース設計書・業務マニュアルなど)がどの程度残っているかも整理しておくと、ベンダー側の解析工数を減らせ、費用の節約にもつながります。ドキュメントが全くない場合でも、過去の開発ベンダーへの問い合わせや社内の関係者へのヒアリングで断片的な情報を集めることが、プロジェクト全体の質を高めます。

対象システムの技術スタック把握

技術スタックを正確に把握することは、発注範囲と費用の見積もり精度に直結します。把握が不十分なまま発注すると、「このサーバーの分も見てほしい」「このAPIとの連携も範囲に含めてほしい」といった追加要望が後から生じ、費用とスケジュールの両面でトラブルになります。データベースは、テーブル数と主要テーブルの概要(受注テーブル・顧客テーブルなど)を整理すると、データフロー解析の工数を見積もる材料になります。

Webサーバー(Apache・Nginx・IIS)、OSとそのバージョン、外部APIとの連携の有無(決済API・物流API・外部SaaS連携など)を一覧にしてください。さらに、セッション管理やキャッシュの仕組み(Memcached・Redis)と、フロントエンド技術(jQueryのみか、ReactやVue.jsと組み合わせているか)も書き出します。

PHPのバックエンドとJavaScriptフロントエンドが混在する場合は、「どこまでがPHPリバースエンジニアリングの対象か」の境界線を事前に決めておくことが必要です。複数のサーバーで動く場合(本番サーバー・ステージングサーバー・バッチ処理サーバーなど)は、どの環境を解析対象とするかを明示します。

難読化の有無確認

PHPは本来ソースコードが読めますが、商用PHPアプリケーションの多くはion.cube・SourceGuardian・Zend Guardなどのエンコーダで暗号化されています。そのため、通常のテキストエディタやPHPインタープリタでは中身を読めません。暗号化されたファイルは、次の記述で識別できます。

  • ion.cube:冒頭に「<?php //002」のようなシグネチャが付いている
  • SourceGuardian:「<?php if(extension_loaded(‘SourceGuardian’)」という記述がある

難読化ファイルが含まれる場合は、その解除の技術的・法的可否を発注前に確認することが必須作業となります。技術的には、ion.cubeの正規ライセンス保有者でも独自の復号ツールは提供しておらず、サードパーティの解除ツールを使う方法は利用規約違反となる場合がほとんどです。

法的には、ion.cube社のEULAは通常リバースエンジニアリングを禁止しています。そのうえで、このEULA条項と日本の著作権法(第30条の4)との関係、さらに独占禁止法上の位置づけを、発注前に弁護士や法務部門へ確認することをお勧めします。難読化ファイルの比率と確認結果によっては、スコープから除外するか、法的対応を経て進めるかを判断する必要があります。

ポイント

発注前にソースコードの棚卸し、技術スタックの把握、難読化の有無の確認を済ませておくと、見積もりの前提がそろいます。難読化ファイルが含まれる場合は、解除の可否を確認してから発注範囲を決めてください。

PHP案件特有の発注範囲の定義

難読化解除と設計意図の解読を、それぞれ人が読める状態と業務ルールの背景に対応させて比べた図。
発注時に業務ルールの背景まで成果物に含めるかを明確にできます。

PHPはCOBOLやC言語と異なり、ソースコードがそのまま読めるスクリプト言語です。そのため、PHPのリバースエンジニアリングの中心は、読めるソースコードから設計意図と業務ロジックを読み解く作業になります。バイナリからソースコードを復元する作業とは、性質が異なります。

この点を発注側とベンダー側で揃えることは、PHP案件の発注で特に欠かせません。発注範囲定義が曖昧なまま進むと、「解析はしたが仕様書として使えるものが出てこなかった」という最悪の結果につながります。

「難読化解除」と「設計意図の解読」の違い

PHP案件の発注範囲では、「難読化解除(Deobfuscation)」と「設計意図の解読(Design Recovery)」を明確に区別する必要があります。難読化解除とは、変数名を意味不明な文字列に置き換えたり、コードを複雑に圧縮したりした難読化PHPコードを、人が読める状態に戻す技術的作業です。

一方、設計意図の解読は、コードが「どう動くか(How)」を読み解くだけでなく、「なぜその処理になっているか(Why)」という業務ルールの背景まで明文化する作業です。多くのPHP案件では、難読化解除自体の工数は小さく、設計意図の解読が全体工数の大半を占めます。

ベンダーには、フローチャート作成を「リバースエンジニアリング完了」と定義する場合もあります。そのためRFPでは、「業務ロジックの背景(Why)まで記述した業務仕様書」か「コードの動作フローチャートのみ」かを明確に指定する必要があります。また、関数名・変数名を業務用語に対応付けた「用語対応表」を成果物に求めると、後続の開発フェーズでコードと仕様書を照合する工数を減らせます。

ion.cube / SourceGuardian案件の特殊性と法的注意点

ion.cubeやSourceGuardianで暗号化されたファイルは、正規のデコードツールなしには読み取れず、通常のPHPリバースエンジニアリングとは異なる対応が必要です。サードパーティ製の解除ツールは存在しますが、使うとion.cube社・SourceGuardian社それぞれのEULA(エンドユーザーライセンス契約)に違反するリスクがあります。

外注先がEULA違反をした場合、発注側も法的責任を問われる可能性があります。日本の著作権法第30条の4では、情報解析や仕様書復元などの「非享受目的」のリバースエンジニアリングは原則合法とされています。ただし、EULAの禁止条項と著作権法の関係は一律には判断できず、EULA条項が独占禁止法(不公正な取引方法)に抵触して無効となりうるという見解もあります。

そのため、ion.cube案件では発注前に法務部門か外部弁護士へ相談し、「当該ファイルの暗号化解除が法的に問題ないか」を書面で確認してから発注に進むことを強くお勧めします。また、WordPressの有料プラグインもion.cubeで保護されているケースが多く、プラグイン解析を含む案件では特に注意が必要です。

ポイント

難読化解除と設計意図の解読を分けて、どこまでを発注範囲に含めるかを決めます。業務ロジックの背景まで求めるかをRFPで明示すると、認識のずれを防ぎやすくなります。

発注先の選定とRFP作成

RFPに記載する対象環境、フレームワーク・CMS、難読化と既存資料、成果物の4項目を並べた図。
記載項目をそろえることで、各社の提案内容を比べやすくなります。

準備が整ったら、ベンダーの選定とRFP(発注仕様書)の作成に進みます。PHPのリバースエンジニアリングは専門的な技術と業務理解の両方が求められるため、発注先は慎重に選ぶ必要があります。

特にWordPressサイトの解析やレガシーPHPシステムの仕様書復元では、ベンダーの実績・体制・法務対応能力を複数の観点で評価することが大切です。

PHP・WordPress専門実績の確認

ベンダー選定で最も重視すべきは、PHPバージョン・フレームワーク・WordPressの実績が具体的に示されているかです。企業の種類は目的で変わり、たとえば脆弱性診断・マルウェア解析ならセキュリティ専門企業、業務仕様書の復元・モダナイゼーションなら業務システム経験豊富なSIerを優先します。

問い合わせ段階では、「リバースエンジニアリング実績あり」とだけ記載するベンダーでも、COBOLやJavaのバイナリ解析中心で、PHPの経験が少ない場合があります。そこで、次の実績を確認します。

  • レガシーコードの仕様書化:PHPのバージョン5.x以前のコードを業務仕様書に落とした実績
  • WordPressの解析:カスタムプラグイン・テーマの解析実績

クリーンルーム手法は、解析チームと開発チームを完全に分け、「設計意図(機能・アルゴリズム)」だけを開発チームに渡して著作権侵害(依拠性)を避ける手法です。1980年代のフェニックス・テクノロジーズによるIBM BIOS互換製品開発で有効性が確立され、今も知的財産リスクの高い案件で標準的に使われています。クリーンルーム手法を運用している実績があるベンダーは、法的リスク管理能力が高いといえます。

加えて、発注側は、クリーンルーム手法を自社のプロセスとして運用できる体制があるかどうかも確認しておきます。

RFPに含めるPHP固有の記載事項

PHP固有の項目を明示すると、提案精度と費用の比較しやすさが高まります。RFPには次の項目を書きます。

  • 対象環境:対象PHPバージョン、稼働環境(OS・Webサーバー・DBの種類・バージョン)
  • フレームワーク・CMS:種類と版数(LaravelやWordPressのコアバージョンなど)
  • 難読化と既存資料:ion.cubeなどの難読化ファイルの有無と比率、既存ドキュメントの有無と提供可能な範囲
  • 成果物:定義(フローチャート・業務仕様書・詳細設計書)、希望フォーマット(Excel・Confluenceなど)
  • 解析後の活用目的:バージョンアップグレード・モダナイゼーション・カスタマイズ

希望納期と優先度の高い解析対象機能、NDA締結の有無とソースコードの扱い方針も示したうえで、RFPは3〜5社に送付し、提案内容と費用の相見積もりを取得します。見積もりは、積算根拠の明確さ(LOC数の算出方法と対象ファイルの定義)と、成果物の粒度の具体性(画面遷移・業務ルール・例外処理まで含むかどうか)で比べます。

業務部門ヒアリングの計画と、PHP固有の解析実績(使用フレームワーク・WordPressの経験)も重点的に評価します。RFPを理解したうえで、「このサイトはGPLライセンスのプラグインが多いようですが、解析範囲の確認をさせてください」のような質問を返してくるかどうかも、技術力と誠実さを見る判断材料になります。

ポイント

発注先は、PHP・WordPressの実績を具体的に示せるかで絞り込みます。RFPで成果物の粒度や難読化ファイルの扱いを揃えて示すと、複数社の見積もりを積算根拠で比べやすくなります。

PHPのリバースエンジニアリングを外注する際の契約は、通常のシステム開発委託契約より複雑な法的配慮が必要です。ソースコードという企業の最重要知的財産を外部に提供し、第三者が解析を行うため、発注側の企業が法的リスクを事前に管理することが不可欠です。

特にWordPressのGPLライセンスプラグインやion.cube製品が絡む案件では、契約前の法的確認が後のトラブル防止に直結します。

NDA・クリーンルーム手法の契約条項

外注時の契約には、通常のシステム開発委託契約に加えて、秘密保持契約(NDA)が必須です。ソースコードは企業の重要な知的財産であるため、ベンダーのエンジニアによる流用や漏洩のリスクを契約で明確に禁止します。授受方法(暗号化された形式での提供、解析専用の隔離環境の構築、終了後のデータ消去プロセス)も、契約書に明記します。

発注側が解析専用の隔離環境を提供する場合は、ベンダーのエンジニアがその環境内でのみ作業する条件を付けると、不正持ち出しのリスクを低減できます。クリーンルーム手法を適用する案件では、解析チームと開発チームの分離、法務担当者の配置、著作権保護対象表現の混入防止チェックを、ベンダーの業務フローとして契約上確認します。

具体的には、解析チームが作成した仕様書について、著作権保護対象の表現(コードの直接引用など)が含まれていないかを法務担当者がレビューしてから開発チームに渡す、というプロセスを書面で合意します。また、「非享受目的」の解析であることを示す記録(解析過程のレポート・専用環境の使用記録)の作成と保管をベンダーに義務づける条項も、後の法的紛争の予防に有効です。

商用難読化PHPの取り扱い合意

ion.cube・SourceGuardian等の商用エンコーダで暗号化されたPHPファイルを含む案件では、契約書にその取り扱いの合意条項を設けることが必要です。次の3点を契約上合意します。

  • 解除方法:ベンダーの独自ツールか、発注側のライセンス取得か
  • EULAとの整合性:法的見解(各自の責任範囲の明確化)
  • 解除できなかったファイル:除外するか、代替手段を講じるか

WordPressのプラグイン・テーマ解析が含まれる場合は、著作権とライセンスの観点を整理することも必要です。WordPressのコアおよび多くのプラグイン・テーマはGPL(GNU一般公衆ライセンス)で公開されており、GPLはリバースエンジニアリングを明示的に許可しています。ただし、MIT・商用ライセンス・独自ライセンスで提供されているプラグインは、この限りではありません。

発注側が対象のプラグイン・テーマのライセンスを一覧化し、解析に制約のあるものを事前に特定しておけば、プロジェクト開始後の「このプラグインは解析できません」という問題を防げます。

ポイント

NDAと解析環境の条件を契約書に明記し、ソースコードの流用を防ぎます。商用難読化ファイルや、GPL以外のライセンスのプラグインを含む案件は、扱いを契約前に書面で合意してください。

プロジェクト推進と役割分担

PHPのリバースエンジニアリングを円滑に進めるには、業務部門・IT部門・ベンダーそれぞれの役割を明確にした体制構築が欠かせません。PHPコードの「How(どう動くか)」はベンダーが解析できますが、「Why(なぜその仕様になっているか)」は業務部門の協力なしには得られません。

役割分担が曖昧なまま進むと、業務ルールの確認待ちでプロジェクトが止まったり、成果物の品質が期待を下回ったりします。

業務部門×IT部門×ベンダーのWBS・役割分担

プロジェクト開始前に、業務部門・IT部門・ベンダーそれぞれの具体的な役割をWBS(作業分解構造)として定義します。業務部門は、ベンダーの「この条件分岐はどの業務ルールに対応しているのか」といった質問に、現場の業務知識で答えます。業務担当者は、「システムをよく知っている人」ではなく、業務ルールの背景を熟知したベテランを選ぶことが大切です。

IT部門は、ベンダーとの技術的な窓口として機能します。主な役割は、解析専用の隔離環境の構築・提供、ソースコードの安全な授受管理(暗号化・アクセス権限管理)、プロジェクト全体のスケジュール管理とWBSの維持です。そのうえで、ベンダーの「このファイルはどのサーバーで動いているか」といった技術的な質問に答えます。

ヒアリングは週1回程度を基本とし、ベンダーから事前に質問リストを受け取って回答を準備する形式が効率的です。ベンダーが担うのは、コード解析・フローチャート作成・業務仕様書のドラフト作成・ヒアリングの設問設計です。3者の成果物と提出スケジュールをWBSに明記し、週次の定例会議で進捗を確認すると効果的です。

コードレビュー体制の構築

ベンダーが作成した仕様書のドラフトは、IT部門と業務部門がそれぞれ異なる観点でレビューします。IT部門は「技術的な正確さ」を見て、解析結果がコードの動作と一致するか、処理フローに誤りがないかを確認します。業務部門は「業務ルールとして正しいか」を見て、現場の実態との一致や例外処理の正確さを確認します。

レビューの頻度は、ベンダーの作業フェーズに合わせて設定します。機能単位でレビューを行う「フェーズレビュー方式」が効率的です。たとえば「受注処理機能の解析完了→IT部門・業務部門がレビュー→フィードバックを仕様書に反映→次の機能(在庫管理)へ」というサイクルを繰り返します。

一方、全機能の解析が終わってから一括でレビューする方式は、後半で大量の修正が生じるリスクがあるため、フェーズレビュー方式を推奨します。また、WordPress固有のフック機構(アクション・フィルター・ショートコードなど)の記述が正確かを確認できる専門知識を持つレビュアーも確保する必要があります。

ポイント

業務部門は業務ルールの背景、IT部門は技術面の窓口、ベンダーは解析を受け持つと、役割が重なりにくくなります。レビューは機能単位で回すと、後半の大量の修正を避けやすくなります。

よくあるトラブルと回避策

PHPのリバースエンジニアリング外注でよく発生するトラブルのパターンと、それぞれの回避策を整理します。事前の対策を講じるかどうかで、プロジェクトの品質・コスト・期間が大きく変わります。

特にPHPバージョンの差異に起因する工数膨張は、発注側がほとんど意識していないために発生しやすい問題です。

PHPバージョン差異による工数膨張

PHPリバースエンジニアリング案件で費用・工数が大幅に膨張する最大の原因の一つが、PHPバージョンの差異への対処です。PHP4・5系のレガシーコードは、廃止された関数(mysql_connect・split・ereg等)を多く使い、現行の解析環境と整合しないことがあります。たとえばPHP5.6のシステムをPHP8系で解析すると、コードが動かず、実際に動かして確認する動的解析ができません。

そのため、コードを読んで理解する静的解析だけに頼らざるを得なくなります。静的解析だけで業務仕様書を作ると、動的解析を組み合わせる場合より工数が1.5〜2倍程度増えることもあります。この問題を回避するには、発注前に解析をPHPの何系の環境で行うか、動的解析が可能な環境を発注側で用意できるかをベンダーに確認します。

PHP5.6以前のシステムは、その版で動く解析専用環境を発注側が構築するか、環境構築費用込みの見積もりを依頼します。また、WordPressが4.x・5.x系と古い場合は、現行の6.x系との互換性確認が追加工数として発生する場合があります。LOCベースの見積もりでは、「PHPバージョン対応の環境構築費用」と「旧関数の解読工数」を別途明示してもらうと、追加請求による費用膨張を防げます。

まとめ:PHPリバースエンジニアリング外注を成功させる発注の要点

PHPのリバースエンジニアリング外注を成功させるには、準備から契約、プロジェクト推進まで各段階で適切に対応することが欠かせません。最初に押さえたいのは、PHPはソースコードが読める言語なので、リバースエンジニアリングは設計意図の解読であり、発注側とベンダー側でこの認識を揃えることが最も重要だという点です。

この認識のずれが、多くのトラブルの根本原因になっています。

発注前の準備では、ソースコードの棚卸し(PHPバージョン・フレームワーク・難読化の有無・ファイル数と行数の概算)と技術スタックの把握を完了させることが第一歩です。ion.cube・SourceGuardianなどの商用難読化ファイルが含まれる場合は、法的な可否を事前に確認したうえで発注範囲を決めます。

RFPには、PHP固有の発注条件として、難読化ファイルの扱いとPHPバージョン非互換の調査要否を明示します。さらに、成果物の粒度定義と業務部門ヒアリングの組み込みも書き込みます。そのうえで、複数社の相見積もりを取り、積算根拠の明確さと実績で評価します。

契約では、NDAとクリーンルーム手法の適用を明記し、商用PHPの取り扱いも書面で合意して、法的リスクを事前に管理します。プロジェクト推進では、業務部門・IT部門・ベンダーの役割をWBSで明確にし、機能単位のフェーズレビュー体制でコードレビューを実施します。

PHPリバースエンジニアリングの費用相場は、ソースコード解析による仕様書復元の場合、基本料金30万円(4,000行まで)で、超過分は1行あたり50円前後が標準的です。典型的な事例として、WordPressのポータルサイト解析(CMS構造解析を含む)が約60万円、在庫予約システム(約30ファイル・セキュリティ確認を含む)が約80万円です。

費用相場を参考にしながら、各段階の要点を押さえると、PHPリバースエンジニアリングの外注を高品質・適正コストで完遂できる可能性が大幅に高まります。

全体ガイドの記事として、PHPのリバースエンジニアリングの完全ガイドをご覧ください。

会社紹介

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

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

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

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

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

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