NextPDF バックポートのブートとディスカバリー
ビルドツールであり、ランタイムの依存関係ではありません。このドキュメントでは、ビルダーがメンテナーまたは CI ホスト上でどのようにブートストラップされるかを説明します。ダウンストリームのアプリケーションがこのコードを読み込むことはありません。
ビルダーには、フレームワーク、依存性注入コンテナー、サービスプロバイダーの自動検出はありません。require_once と Composer の PSR-4 オートローダーで結線された、一連の PHP CLI スクリプトです。ここでいう「ディスカバリー」は、具体的には 2 つの意味です。マージステージがどのソースリポジトリを読み取るか、そしてオーケストレーターがターゲット向けの Rector 構成をどのように選択するかです。
ビルドパイプラインの概要
「ビルドパイプラインの概要」という見出しのセクションオーケストレーターは scripts/build.php です。ブート後、順序付けられた 5 つのステージを実行します。各ステージにはゲートがあり、最初の失敗でビルドが停止します。
- ソースのマージ — ソースリポジトリを 1 つのツリーにコピー。
- Rector ダウングレードの実行 — PHP 8.1 はシングルパス、PHP 7.4 は 2 パスに加えて修正処理。
composer.jsonの生成 — 生成されたパッケージマニフェストをreplaceマップとともに書き出し。- 静的アセットのコピー — ライセンスと生成された変更履歴。
- 出力の検証 — 出力された PHP ファイル数をカウント。正式な構文ゲートは後続の CI で実行されます。
scripts/build.php(run()、step())と照合して確認済み。ルール選択の詳細は /integrations/backport/configuration/ に、CI ゲートは /integrations/backport/production-usage/. にあります。
ソースモジュールのディスカバリー
「ソースモジュールのディスカバリー」という見出しのセクションソースのディスカバリーはマニフェスト駆動ではありません。scripts/merge-sources.php 内の固定マップで、リポジトリ名をキーとし、ターゲットに応じて選択されます。
PHP 8.1 ターゲットでは、マップに nextpdf(コア)、nextpdf-Artisan、nextpdf-compat-legacy、nextpdf-Laravel、nextpdf-Symfony、nextpdf-CodeIgniter、そして Pro が含まれる場合は nextpdf-Pro が含まれます。PHP 7.4 ターゲットでは、マップは nextpdf のみに縮小されます。各リポジトリは、--source-dir ルート配下の兄弟ディレクトリとして解決されます。想定されるすべてのリポジトリはコピー前に検証され、不足がある場合は、その名前とパスを示してマージが中止されます。scripts/merge-sources.php(MergeSources::__construct()、run())と照合して確認済み。
マージでは、コアを src/ に配置し、各アダプターをその名前空間付きのサブディレクトリ(src/Artisan/、src/Laravel/ など)配下に配置します。Pro は、独自のパッケージとして出力できるように、別個の pro/src/ ツリーに配置されます。MergeSources(mergeCore()、mergeArtisan()、mergePro())と照合して確認済み。
ブートシーケンス
「ブートシーケンス」という見出しのセクションscripts/build.phpが CLI SAPI 上で呼び出されます。これはmerge-sources.phpとadjust-composer.phpをrequire_onceします。- CLI エントリーポイントは
getopt()でオプションを読み取ります —--version、--source-dir、--output-dir、--target、--dry-run、--no-proです。 Buildインスタンスが構築されます。コンストラクターは--targetを['php74', 'php81']に照らして検証し、無効な値の場合は処理が始まる前にInvalidArgumentExceptionを送出します。PHP 7.4 ターゲットでは、コアのみを強制し、Pro を無効化します。Build::run()は 5 つのステージを実行し、成功時はステータス 0、最初の失敗時は 1 で終了します。
scripts/build.php(CLI エントリーポイント、Build::__construct()、run())と照合して確認済み。
コンテナーのバインディング
「コンテナーのバインディング」という見出しのセクション該当しません。ビルダーは、依存性注入コンテナーもフレームワークのサービスコンテナーも持たない CLI ツールです。結線は、明示的な require_once に加え、NextPDF\Backport\(ルール)と NextPDF\Backport\Scripts\(スクリプト)の Composer PSR-4 オートローディングで行われます。composer.jsonautoload および scripts/build.php 内の require_once 文と照合して確認済み。
構成の解決順序
「構成の解決順序」という見出しのセクション構成ファイルはありません。構成は一連の CLI フラグとして、スクリプトに組み込まれたデフォルトに照らして解決されます。
- CLI フラグ(指定時)。
getopt()パースブロック内のデフォルト(たとえばターゲットのデフォルトはphp81、バージョンは2.0.0)。- コンストラクターがターゲットから導出する動作(PHP 7.4 は
--no-proの有無にかかわらず、コアのみを強制し Pro を無効化)。
scripts/build.php(CLI エントリーポイントと Build::__construct())と照合して確認済み。フラグの完全なリファレンスは /integrations/backport/configuration/. にあります。
オーケストレーター自体が診断の窓口です。ドライラン(composer build:dry)を実行すると、何も書き込まずに、読み取られるソースリポジトリと各ステージの意図を出力します。各ステージは、成功時のチェックマークまたは名前付きの失敗を出力します。独立した diagnose サブコマンドも bin/ エントリーポイントもありません。ビルダーは scripts/build.php またはその Composer スクリプトエイリアスを通じて呼び出されます。scripts/build.php(step()、dryRun 分岐)、scripts/merge-sources.php(run() のドライランパス)、および composer.jsonscripts と照合して確認済み。
- /integrations/backport/overview/ — ビルダーの役割と生成物。
- /integrations/backport/integration/ — ビルドホストの統合コントラクト。
- /integrations/backport/configuration/ — Rector 構成とフラグリファレンス。
- /integrations/backport/troubleshooting/ — ステージごとの失敗リファレンス。