IT-Q

Laravel アプリをダウンタイムほぼ無しでデプロイする方法として妥当なのはどれですか。

コード配置、composer install、マイグレーション、キャッシュ再生成、キューワーカー再起動の順です。シンボリックリンク切り替えにすれば、実質のダウンタイムはほぼ無くなります。

面接官が見ているのはリリース作業を自分の仕事として捉えているか。

よくある答えと、面談でどう見られるか

  • 新しいリリースディレクトリを用意し、準備が済んでからシンボリックリンクを切り替える
    その通りです。切り戻しもリンクを戻すだけで済むので速いのが利点です。
  • 稼働中のディレクトリで git pull して composer install する
    よく使われますが、install 中は依存が中途半端な状態になり、その瞬間のリクエストが落ちます。
  • メンテナンス画面を出して作業する
    確実ですが、それはダウンタイムを取るという意味です。
  • コンテナを停止してからイメージを入れ替える
    停止時間が発生します。無停止にするなら新旧を並行稼働させる必要があります。

面接官は何を見ているか

  • 手順を具体的に説明できた
  • ダウンタイムの有無を認識していた
  • 失敗時にどうするかを考えていた

模範解答

コードを配置して、composer install、マイグレーション、各種キャッシュの再生成、キューワーカーの再起動、という流れです。シンボリックリンク切り替え方式にすれば、実質ダウンタイムはほぼ無くなります。失敗時は前のリリースディレクトリにリンクを戻せば済むので、切り戻しの速さも含めてこの方式を選びます。

ここからどう深掘りされるか

この問いに答えられた場合、面談は次の質問に進みます。