本番環境でマイグレーションを実行するとき、開発環境と違う点として正しいのはどれですか。
本番では確認プロンプトが出るため、デプロイスクリプトでは migrate --force を使います。流す位置は新しいコードを配置した後、アプリを切り替える前。実行前にバックアップを取ります。
面接官が見ているのは開発と本番で運用が違うことを認識しているか。
よくある答えと、面談でどう見られるか
- 確認プロンプトが出るため --force が必要で、実行前にバックアップの確認が要る
その通りです。デプロイ手順の中では、新しいコードを配置した後・アプリを切り替える前に流すのが基本です。 - 本番では artisan が使えないので SQL を直接流す
使えます。手で SQL を流すと適用履歴がずれて、以後の管理ができなくなります。 - 開発環境と完全に同じコマンドで問題ない
コマンドは同じですが --force が要ります。非対話環境ではプロンプトで止まります。 - 本番では migrate:fresh を使って作り直す
migrate:fresh は全テーブルを削除します。本番で実行すると全データが消えます。絶対に使ってはいけません。
面接官は何を見ているか
- --force フラグが必要なことに触れた
- 実行タイミング(デプロイ手順のどこか)を説明できた
- 失敗した時にどうなるかを考えていた
模範解答
デプロイスクリプトの中で php artisan migrate --force を実行します。本番環境では確認プロンプトが出るので --force が必要です。流す位置は、新しいコードを配置した後・アプリを切り替える前が基本。実行前にバックアップが取れていること、失敗時にどこで止まるかを把握した上で流します。
ここからどう深掘りされるか
この問いに答えられた場合、面談は次の質問に進みます。
観点をすべて押さえられた場合
カラムを1本削除するマイグレーションを、ダウンタイム無しで流すにはどうしますか。一部しか触れられなかった場合
本番で php artisan migrate:rollback を実行するのが危険なのはなぜですか。