こう 聞かれます
- 「CI/CD は
どう 組みますか」 - 「PR を
出したら、 何が 自動で 走るようにしますか」 - 「本番に
出した あと 不具合が 見つかったら、 どうしますか」
面接官が 見ている点
- CI (変更の
たびに 自動で 確かめる ) と CD (通った 物を 自動で 出す) を 分けて 説明できるか - lint、
テスト、 ビルド、 配備の 流れを 順に言えるか - PR ごとの
プレビュー環境で、 出す前に 画面を 見られるように しているか - 本番には
少しずつ出し、 すぐ前の 版に 戻せるように しているか
短い答え
- PR を
出すたびに、 GitHub Actions のような 仕組みで lint、 テスト、 ビルドを 自動で 回し、 通らない物は マージできないようにします (CI)。 - PR ごとに
プレビュー環境を 作って 画面を 確かめ、 main に 入った 物は 決まった 手順で 自動で 配備します (CD)。 - 本番には、
一部の 利用者から 少し ずつ出し、 問題が あれば 前の 版へ すぐ 戻せるように して、 出すことの 怖さを 小さくします。
少し 詳しい答え
CI で 確かめること
CI (継続的インテグレーション) は、
- lint と型の検査書き方の
誤りや型の 食い 違いを、 すぐ 見つけます - テスト単体テストや
結合 テストを 回し、 前に 動いていた 物が 壊れていないかを 確かめます - ビルド本番と
同じ 手順で 組み立てられるかを 確かめます
YAML
name: ci
on: pull_request
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci
- run: npm run lint
- run: npm test
- run: npm run buildこの
CD で出すこと
CD (継続的デリバリー、
- プレビュー環境 PR ごとに、
その 変更だけを 入れた 環境を 作り、 URL を PR に 貼ります。 レビューする 人が、 画面を 実際に 触って 確かめられます - 自動の配備 main に
入った 物を、 手を 介さずに ステージング、 本番の 順に 出します。 人の 手順を 減らすほど、 出し忘れや 手順の 間違いが減ります - 少しずつ出す新しい
版を、 まず 一部の 利用者や 一部の サーバーに だけ出し (カナリアリリースと 呼ばれます)、 エラーの 率や 遅さを 見てから広げます - すぐ戻す前の
版を 残して おき、 問題が 出たら 1 つの 操作で 前の 版に 切り替えます。 直してから 出し直すより、 まず戻すほうが 利用者への 影響が 短く済みます
トレードオフ
検査を
少しずつ出す仕組みも、
話すときは、
よく ある間違い
- CI が
赤いまま マージする 壊れた 物が main に 入り、 次の 人の 作業まで 止まります。 検査が 通らないと マージできないようにします - 配備を
人の 手順に頼る 手順の 抜けや 間違いが 起きます。 同じ 手順を 自動で回します - 戻し方を
決めずに出す問題が 出てから 戻し方を 考えると、 利用者への 影響が 長引きます
深掘りの問い
- 「CI が
遅くなったら、 どうしますか」どの 検査が 時間を 食っているかを 測り、 並べて 回す、 キャッシュを 効かせる、 変わった 所に 関係する 検査だけ回す、 重い 検査を 後ろに 回す、と答えます - 「たまに
落ちる テストは、 どうしますか」 放っておくと 検査が 信用されなくなるので、 原因を 調べて 直すか、 直すまで 外して 記録を 残す、と答えます - 「データベースの
変更を 含む配備は、 どう 戻しますか」 アプリを 戻しても 動くように、 スキーマの 変更は 足す形で 先に 出し、 消すのは 最後に 回す、と答えます