DBマイグレーション忘れでビルドを落とすCIチェック
共有者はまさにこのプロジェクトをBrightloomの面接で話し、その後リターンオファー(内定)を獲得しました。
この面接を練習する
実際の深掘り4問 · うち難問2 · 約12分
各質問に自分で答えると、本人の実際の答えが見られます。
本人はこう語った
モデルの変更に対応するマイグレーションを入れ忘れたままマージして、stagingを壊す人が後を絶ちませんでした。私はマージ前にそれを検知するCIステップを追加しました。
全文を読む
中規模のSaaS企業で、繰り返し起きる困りごとがありました。誰かがpull requestでデータベースのモデルを変更したのにマイグレーションファイルを入れ忘れ、マージ後にstagingが壊れるのです。あまりに頻発してあだ名までついていました。インターンだった私は、CIで検知してみてもいいかと聞きました。最初のアイデアは素朴なもので、モデルファイルが変更されたらマイグレーションファイルも変更されているかをチェックするだけでした。しかしこれには誤検知がありました。コメントのリネームやdocstringの編集にマイグレーションは不要なはずです。そこでORM自体のツールに頼ることにしました。フレームワークの「未作成マイグレーション検出」コマンドを使い捨てのデータベース上で実行するCIステップを追加し、マイグレーションのないスキーマ変更が報告されたらビルドを失敗させるのです。ファイルのdiffから推測するのではなくフレームワーク自身に問い合わせるので、これは信頼できる判定でした。難しかったのは失敗メッセージを役立つものにすることです。説明のない赤いバツ印はただ人を苛立たせるだけなので、不足しているマイグレーションを生成するための正確なコマンドを表示するようにしました。テストとして、マイグレーションなしのモデル変更PRをわざと開いて赤になることを確認し、両方揃ったPRで緑のままであることも確認しました。結果、私たちのチームでは「マイグレーション忘れ」によるstaging破壊がほぼゼロになりました。
実際に聞かれた質問
最初のアプローチはファイルのdiffでしたね。なぜやめたのですか?どんなエッジケースを取りこぼしましたか?
難しいそのチェックが正しく、人を不当にブロックしないと、どうやって確信しましたか?
普通正当なPRが初めてブロックされて誰かが不満を持ったとき、何が起きましたか?
難しいインターン終了後もパイプラインに残っていましたか?他のチームにも広がりましたか?
易しい