composer install と artisan のキャッシュ系コマンドは、どういう順番で実行しますか。なぜその順番ですか。
composer install が先です。config:cache や route:cache はアプリを起動して設定を読むため、依存パッケージが揃っていないと失敗します。本番では開発用依存を外します。
面接官が見ているのは手順を暗記でなく理解しているか。
これは「Laravel アプリをダウンタイムほぼ無しでデプロイする方法として妥当なのはどれですか。」への追撃質問です。
よくある答えと、面談でどう見られるか
- composer install が先。config:cache などはアプリを起動して設定を読むため依存が必要
その通りです。本番では --no-dev --optimize-autoloader を付けます。なお config:cache を入れたら、config/ の外での env() 呼び出しが残っていないか必ず確認してください。ここが本番だけ壊れる定番の落とし穴です。 - config:cache が先。設定が無いと composer が動かないため
composer は Laravel の設定に依存しません。順序が逆です。 - 順序は関係ない
依存が入っていないと artisan コマンド自体が動きません。 - migrate が最初。DB が無いと何も動かないため
migrate も artisan なので、composer install の後でないと実行できません。
面接官は何を見ているか
- composer install が先だと言えた
- 理由(キャッシュ生成にオートロードが必要)を説明できた
- --no-dev / --optimize-autoloader に触れた
模範解答
composer install が先です。config:cache や route:cache はアプリを起動して設定を読むので、依存パッケージが揃っていないと失敗します。本番では composer install --no-dev --optimize-autoloader を使います。開発用パッケージを入れず、オートローダを最適化するためです。その後に config:cache、route:cache、view:cache を流します。Laravel 11 以降はこれらをまとめた optimize コマンドがあります。
ここで一点、古い知識のまま話すと逆に危ない論点があります。「route:cache はクロージャで書いたルートがあると失敗する」は Laravel 6 までの話です。Laravel 7 でクロージャがシリアライズできるようになり、現在は通ります。本当に気をつけるのは config:cache の方で、config/ の外に env() の呼び出しが残っていると、そこが本番だけ動かなくなります。