コンテンツにスキップ
getnextpdf.com

Enterprise エディション

PHPStan — 詳細リファレンス

  • 公開クラスは 1 つ。use 文を対象とするカスタム PHPStan ルール EditionBoundaryRule
  • 一方向のエディション依存順序を強制します。Core が Pro または Enterprise をインポートすることはなく、Pro が Enterprise をインポートすることもありません。
  • 違反は、問題のある use 行に対して識別子 nextpdf.editionBoundaryViolation を報告します。
  • ビルド時のみ。このルールはランタイムパスを持たず、生成される PDF に影響しません。
  • nextpdf/enterprise に同梱されます。登録は標準の PHPStan 構成を使用します。

この機能は NextPDF Enterprisenextpdf/enterprise)に同梱され、Enterprise ティアのライセンスエンベロープで有効化されます。これはランタイムパスを持たないビルド時の静的解析ルールです。nextpdf/enterprise パッケージの境界がこれをゲートしており、機能ごとの個別のケイパビリティコードは持ちません。Core と Pro は同等品を同梱していません。エディションを比較してライセンスを取得

パッケージをインストールし、PHPStan 構成にルールを登録します。

Terminal window
composer require nextpdf/enterprise:^3
rules:
- NextPDF\Enterprise\PHPStan\EditionBoundaryRule
シンボルパラメータ既定の挙動戻り値スロー/失敗条件備考
EditionBoundaryRuleなし(コンストラクタ引数なし)use 文を購読するステートレスな PHPStan ルールスローしないfinalUse_ に対して PHPStan\Rules\Rule を実装
EditionBoundaryRule::getNodeType()なしルールが購読する AST ノードタイプを宣言stringUse_::classスローしない標準の PHPStan Rule コントラクトメソッド
EditionBoundaryRule::processNode()Node $node, Scope $scope解析対象の名前空間に対して禁止されたプレフィックスと、各インポートシンボルを照合list<IdentifierRuleError>(適合時は空)スローしない。違反はルールエラーとして表面化エラー識別子 nextpdf.editionBoundaryViolation
final class EditionBoundaryRule implements Rule
{
public function getNodeType(): string;
public function processNode(Node $node, Scope $scope): array;
}

EditionBoundaryRule は、Use_ ノードタイプに対して標準の PHPStan Rule コントラクトを実装します。各 use 文について、解析対象ファイルの名前空間とインポートされる各シンボルの名前空間プレフィックスを比較し、一方向の依存順序を強制します。

解析対象の名前空間エディションラベル禁止されるインポートプレフィックス
NextPDF\* サブ名前空間、ただし Pro および Enterprise を除くCoreNextPDF\Pro\NextPDF\Enterprise\
NextPDF\Pro および NextPDF\Pro\*ProNextPDF\Enterprise\
NextPDF\Enterprise および NextPDF\Enterprise\*Enterpriseなし(最上位ティア)
NextPDF\ 外の任意の名前空間なし(制約なし)

インポートが境界を越えると、ルールは識別子 nextpdf.editionBoundaryViolation の下で、問題のある use 文の行に固定してエラーを報告します。メッセージには、インポートされるシンボル、インポートする名前空間、禁止されたプレフィックス、および人間が読めるエディションラベルが記載されます。各インポートシンボルが生成するエラーは最大 1 件です。プレフィックス照合は、最初に一致した禁止プレフィックスで停止します。

このチェックは静的かつアドバイザリーです。インポート文上の境界違反を報告します。解析対象プログラムがそれ以外の点で正しいことを証明するものではありません。

  • NextPDF\ 外の名前空間および名前空間を持たないファイルはエラーを生成しません。ルールは空のリストを返します。
  • ちょうどルート名前空間 NextPDF(サブ名前空間のセグメントを持たない)で宣言されたコードは制約されません。境界検出は NextPDF\ サブ名前空間に一致します。
  • Enterprise ファイルが Pro または Core のシンボルをインポートしたとしてフラグが立てられることは決してありません(設計上、最上位ティアのため)。
  • プレフィックス照合はセパレータを認識します。NextPDF\Professional のような名前空間は Pro ではなく Core に分類され、その配下のインポートが NextPDF\Pro\ プレフィックスに対して誤検出することはありません。
  • リテラル名 NextPDF\Pro または NextPDF\Enterprise を、それ以上のセグメントなしでインポートしてもフラグは立ちません。それらのプレフィックス配下のシンボルのみが一致します。
  • このルールはインポート種別でフィルタしません。クラス、functionconst のいずれのインポートも、禁止プレフィックス配下であれば報告されます。
  • use 文を使わずに書かれた完全修飾のインライン参照は対象外です。境界が強制されるよう、インポートを推奨します。
  • グループ use 宣言は別個の GroupUse ノードタイプとしてパースされ、ルールの Use_ 購読の対象外です。シンボルごとの通常のインポートは境界チェックが維持されます。
  • processNode() はスローしません。すべての結果は PHPStan のルールエラーまたは空の結果として表面化します。
  • ランタイムコンポーネントではありません。暗号操作は行わず、FIPS モードは適用されません。

標準への適合性は主張しません。これは、下流のビルドで内部のアーキテクチャ上の制約(エディションのレイヤリング)を強制する開発者ツールのルールです。第三者ツールの API である PHPStan ルール拡張コントラクトを実装するものであり、正式な標準ではありません。このルールは解析対象コードについてコンプライアンス、認証、正しさの保証を一切行いません。エディション境界のインポート違反を報告するのみであり、アドバイザリーです。

  • このルールは解析中に PHPStan 内で実行され、ソース構造のみを読み取り、生成される PDF やデプロイ済みのサービスに影響しません。
  • ルールの登録と PHPStan レベルの選択は、インテグレーターの責任のままです。
  • クラスは final かつステートレスであるため、PHPStan の並列解析ワーカーの下でも安全です。
  • 解析出力は、所与のソースツリーに対して決定的です。同じ入力は同じエラーリストを生成します。
  • nextpdf/enterprise 2.1.0 以降で利用可能。上記のコントラクトは 3.1.0 を反映しています。

このページは、外部から観測可能な挙動とサポート対象のパブリック API サーフェスのみを記述しています。内部の名前空間パス、ヘルパークラス、メカニズムの表、ランブックのファイル名、チケットのプレフィックスは対象外です。