AboutCommand::add() を使えば、専用コマンドを実装せずに php artisan about の出力へパッケージ用のセクションを追加できます。
公式ドキュメントには登録の基本例があります。このページではLaravel 13の実装まで確認し、情報を収集するタイミング、JSONの型、セクション名の衝突、テストでの登録状態を掘り下げます。
プロバイダーで表示内容を登録する
次の例は、courier.enabled と courier.driver がパッケージの設定として登録済みであることを前提にしています。設定の登録方法はパッケージ設定のマージと更新を参照してください。
runningInConsole() はHTTPリクエストで不要な登録を避ける条件です。about の実行時だけを判定する条件ではなく、他のArtisanコマンドでも登録されます。ただし、上のクロージャー内の設定取得は登録時には実行されません。
登録と評価のタイミングを分けて考える
Laravelv13.35.0 の add() は、その場でデータを収集せず、静的な $customDataResolvers に登録用のクロージャーを追加します。about の実行時に表示用データを組み立て、登録されたデータ取得用クロージャーを評価します。
設定値を add() の外側で先に読み込んで配列へ固定するより、クロージャー内で取得するほうがコマンド実行時の状態を反映できます。一方、--only のフィルターはデータ取得用クロージャーの評価より後です。
Acme Courier のクロージャーは評価されます。表示されないことと、処理されないことは別です。
そのため、追加情報は設定値や軽量なローカル状態から取得します。外部APIへの疎通確認、DBへの問い合わせ、ファイルの書き換えなどを入れると、無関係なセクションを確認するコマンドまで遅くなったり失敗したりします。疎通確認や修復は専用のArtisanコマンドへ分けてください。
CLI表示とJSONの型を両立する
パッケージの情報だけを確認するには、セクション名を小文字のsnake caseにした値を指定します。Acme Courier の場合は acme_courier です。
courier.enabled が true、courier.driver が log のとき、JSONは次の形になります。
Enabled が ENABLED と表示されます。AboutCommand::format() は、CLI用の console とJSON用の json を指定できるヘルパーです。上の例は console だけを指定しているため、JSONでは元のboolean値が返ります。CLIの表示文字列をそのままJSONへ流用する必要はありません。
例のように通常の英語の単語を空白で区切った名前を使うと、フィルターやJSONキーを扱いやすくなります。自動処理で参照するキーは、表示名の変更でも変わり得るため、リリース時に互換性を確認します。
セクションはパッケージ専用の名前にする
add() は同じセクションへの項目を追記します。同じ名前のセクションを指定したからといって、先に登録した内容全体を置き換えるわけではありません。
他のパッケージと区別できる Acme Courier のような名前を選び、Laravel標準の Environment、Cache、Drivers、Storage への追加は必要な場合に限定します。
同一セクションに同名の項目を重複登録すると、CLIでは複数行として残り得ますが、JSONでは同じキーに集約され後の値が残ります。また、異なる表記でもsnake caseへの変換後に同じキーになる名前は避けてください。登録場所を1か所にまとめ、CLIとJSONのどちらでも項目が一意になる設計にします。
静的な登録状態をテストで扱う
about の実行開始時に表示用の $data は初期化されますが、追加情報の登録リスト $customDataResolvers は保持されます。毎回同じ登録から情報を再収集できる一方、同一PHPプロセスでプロバイダーの boot() を繰り返すと登録が累積する可能性があります。
AboutCommand::flushState() はすべてのパッケージの登録と表示用データを消すメソッドです。本番のプロバイダーで自分のセクションを重複回避するために呼ばないでください。他のパッケージの診断情報まで失われます。
独自のテスト基盤でアプリケーションを再構築する場合は、テスト間で状態を初期化する責任を決めます。初期化するなら対象プロバイダーを起動する前に行い、その後に必要な登録をすべて行います。既存のテスト基盤が状態を初期化しているかも確認してください。
リリース前の確認項目
パッケージのテストと実際の利用アプリケーションで、次の組み合わせを確認します。関連ページ
Laravelパッケージ開発
プロバイダーとリソース登録の基本を確認します。
パッケージ設定のマージと更新
既定値、利用者の上書き、設定キャッシュの関係を確認します。