The composer.json Schema – Composer
ComposerはPHPのパッケージマネージャです。パッケージマネージャということからかパッケージのオートロードとその拡張機能があります。これを使うと一々 require 等ファイル読み込みを気にして記述する必要がなくなります。これをcomposer.jsonに設定します。
Laravelのプロジェクトを作った時、ほぼデフォルトのオートロード設定は次の様になっています。
"autoload": { "psr-4": { "App\\": "app/" }, "classmap": [ "database/seeds", "database/factories" ], "files": [ "app/helpers.php" # これは追記した部分 ] },
psr-4, classmap, filesがあります。この中にない設定にpsr-0もあります。PSR-0は陳腐化した規約なので今後使われることは減るでしょう。この中で最もよく使って便利なのはPSR-4です。次いで都度更新が面倒ですが一気に読み込めるclassmap、単一で自由に読み込めるfilesとなります。
PSR-4はnamespaceとディレクトリ構成を対応させる規約です。次の様にあったらApp\\以下とapp/が対応します。
"autoload": { "psr-4": { "App\\": "app/" }, },
例としてapp/Models/Eloquents/User.phpファイルをApp\Models\Eloquents\Userクラスと定義します。こうするとcomposerがいい感じにrequire等を動かします。ファイルやクラスを増やしたときに何かしらを変更する必要がないので取り扱いが楽です。
classmapはComposerにオートローダを探索させ、その結果を読み込む仕組みです。classを追加する度、オートローダの探索結果を更新する必要があります。
"autoload": { "classmap": [ "database/seeds", "database/factories" ], },
こちらはnamespace、ディレクトリ、ファイル名など色々定義する必要はなく、全てグローバル範囲に置いても動きます(名前の衝突が起こると謎の動作を起こすので注意の必要あり)。更新コマンドは composer dump-autoload です。Laravelでデータベース関連を更新した時にundefinedエラーを起こしていたら結構な割合でcomposer dump-autoload漏れです。
filesは一ファイルずつ読み込むオートローダです。自分がこれを使うのはグローバルに定義するモノを読み込む時です。例ではhelperファイルです。
Composerのautoload機能を把握しておくとPackagistに登録されていないパッケージ(業務的なモノ、有料ライブラリ、開発中のフレームワーク拡張など)を扱う時に楽ができます。