コンテンツにスキップ

NextPDF バックポートのブートとディスカバリー

ビルドツールであり、ランタイムの依存関係ではありません。このドキュメントでは、ビルダーがメンテナーまたは CI ホスト上でどのようにブートストラップされるかを説明します。ダウンストリームのアプリケーションがこのコードを読み込むことはありません。

ビルダーには、フレームワーク、依存性注入コンテナー、サービスプロバイダーの自動検出はありません。require_once と Composer の PSR-4 オートローダーで結線された、一連の PHP CLI スクリプトです。ここでいう「ディスカバリー」は、具体的には 2 つの意味です。マージステージがどのソースリポジトリを読み取るか、そしてオーケストレーターがターゲット向けの Rector 構成をどのように選択するかです。

オーケストレーターは scripts/build.php です。ブート後、順序付けられた 5 つのステージを実行します。各ステージにはゲートがあり、最初の失敗でビルドが停止します。

  1. ソースのマージ — ソースリポジトリを 1 つのツリーにコピー。
  2. Rector ダウングレードの実行 — PHP 8.1 はシングルパス、PHP 7.4 は 2 パスに加えて修正処理。
  3. composer.json の生成 — 生成されたパッケージマニフェストを replace マップとともに書き出し。
  4. 静的アセットのコピー — ライセンスと生成された変更履歴。
  5. 出力の検証 — 出力された PHP ファイル数をカウント。正式な構文ゲートは後続の CI で実行されます。

scripts/build.phprun()step())と照合して確認済み。ルール選択の詳細は /integrations/backport/configuration/ に、CI ゲートは /integrations/backport/production-usage/. にあります。

ソースのディスカバリーはマニフェスト駆動ではありません。scripts/merge-sources.php 内の固定マップで、リポジトリ名をキーとし、ターゲットに応じて選択されます。

PHP 8.1 ターゲットでは、マップに nextpdf(コア)、nextpdf-Artisannextpdf-compat-legacynextpdf-Laravelnextpdf-Symfonynextpdf-CodeIgniter、そして Pro が含まれる場合は nextpdf-Pro が含まれます。PHP 7.4 ターゲットでは、マップは nextpdf のみに縮小されます。各リポジトリは、--source-dir ルート配下の兄弟ディレクトリとして解決されます。想定されるすべてのリポジトリはコピー前に検証され、不足がある場合は、その名前とパスを示してマージが中止されます。scripts/merge-sources.phpMergeSources::__construct()run())と照合して確認済み。

マージでは、コアを src/ に配置し、各アダプターをその名前空間付きのサブディレクトリ(src/Artisan/src/Laravel/ など)配下に配置します。Pro は、独自のパッケージとして出力できるように、別個の pro/src/ ツリーに配置されます。MergeSourcesmergeCore()mergeArtisan()mergePro())と照合して確認済み。

  1. scripts/build.php が CLI SAPI 上で呼び出されます。これは merge-sources.phpadjust-composer.phprequire_once します。
  2. CLI エントリーポイントは getopt() でオプションを読み取ります — --version--source-dir--output-dir--target--dry-run--no-pro です。
  3. Build インスタンスが構築されます。コンストラクターは --target['php74', 'php81'] に照らして検証し、無効な値の場合は処理が始まる前に InvalidArgumentException を送出します。PHP 7.4 ターゲットでは、コアのみを強制し、Pro を無効化します。
  4. 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 フラグとして、スクリプトに組み込まれたデフォルトに照らして解決されます。

  1. CLI フラグ(指定時)。
  2. getopt() パースブロック内のデフォルト(たとえばターゲットのデフォルトは php81、バージョンは 2.0.0)。
  3. コンストラクターがターゲットから導出する動作(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.phpstep()dryRun 分岐)、scripts/merge-sources.phprun() のドライランパス)、および composer.jsonscripts と照合して確認済み。

  • /integrations/backport/overview/ — ビルダーの役割と生成物。
  • /integrations/backport/integration/ — ビルドホストの統合コントラクト。
  • /integrations/backport/configuration/ — Rector 構成とフラグリファレンス。
  • /integrations/backport/troubleshooting/ — ステージごとの失敗リファレンス。