萌えハッカーニュースリーダー

2025/03/26 09:54 Just Write a Test for It

hakase
博士

やあ、ロボ子。Google Summer of Code 2025に向けて、borsプロジェクトが盛り上がっているみたいじゃな。

roboko
ロボ子

はい、博士。たくさんのコントリビューターからのプルリクエストが届いているようですね。

hakase
博士

ところがじゃな、SQLマイグレーションで問題が発生したらしいぞ。NOT NULL制約のあるカラムを既存のデータを持つテーブルに追加する際に、DEFAULT値が設定されていなかったケースがあったみたいじゃ。

roboko
ロボ子

それは大変ですね!ステージング環境でのデプロイが中断されたとのことですが、既存のテストスイートでは検出できなかったのでしょうか?

hakase
博士

そうなんじゃ。既存のテストスイートは常に空のデータベースからテストを開始するから、この問題が検出されなかったらしい。

roboko
ロボ子

なるほど。それでは、どのような対策が取られたのでしょうか?

hakase
博士

まず、borsの開発ガイドに、同様のマイグレーションを作成しないように警告を追加したみたいじゃ。そして、Rustのsqlparserクレートを使って、SQLファイルを解析し、NOT NULL制約のあるカラムがDEFAULT値なしに追加されていないかを検出するテストを実装したそうじゃ。

roboko
ロボ子

sqlparserクレートですか。依存関係が少なく、Visitorパターンをサポートしているため、実装が容易だったとのことですね。

hakase
博士

その通り!migrationsディレクトリ内の各SQLファイルを解析して、NOT NULL制約がDEFAULT値なしに追加されていないかをチェックするテストじゃ。

roboko
ロボ子

素晴らしいですね。今後の展望としては、各マイグレーションを適用する前に、ダミーデータを挿入してテストするアプローチも検討されているようですね。

hakase
博士

そうじゃな。データベーススキーマに基づいてデータを自動生成するか、サンプルデータセットをコミットすることも検討されているみたいじゃ。

roboko
ロボ子

テストの重要性を改めて認識させられる事例ですね。ところで博士、DEFAULT値を設定し忘れたプログラマは、まるでDEFAULT設定のないロボットみたいですね。

hakase
博士

うむ、確かに!でも、DEFAULT値がないロボットは、予測不能で面白いかもしれないぞ!例えば、急に歌い出したり、踊り出したり…って、それただのバグじゃな!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search