D1 のマイグレーションが入れ子フォルダを読めるようになったよ!
やっほー、しぃちゃんだよ!今日は D1 のちょっと嬉しいアップデートを見つけたから紹介するね。
Cloudflare Changelogなにが発表されたの?
Cloudflare の Changelog で、D1 のマイグレーションが入れ子(ネスト)になったフォルダ構成に対応したって発表があったよ。新しく migrations_pattern っていう設定が追加されて、wrangler d1 migrations apply がサブディレクトリの中に置いたマイグレーションも見つけられるようになったの。
これ、Drizzle みたいな ORM がよく使うフォルダの並べ方なんだって。
今までどうだったの?
これまでは、マイグレーションのファイルは migrations_dir で指定したフォルダの直下にまとめて置く前提だったの。だから ORM が「1 マイグレーション = 1 フォルダ」みたいに入れ子で吐き出すと、そのままだと Wrangler が拾ってくれなくて、手で並べ替えたりする必要があったんだよね。
これで何が変わるの?
migrations_pattern にグロブパターンを書いておけば、そのパターンにマッチするファイルをマイグレーションとして扱ってくれるようになるよ。だから ORM が作った入れ子のフォルダ構成を、そのまま wrangler d1 migrations apply に流せるの。ORM 使いのみんなには地味に助かるやつだね!
深く潜ってみよう
設定は Wrangler の設定ファイルの d1_databases の中に、こんな感じで書くよ。
{
"d1_databases": [
{
"binding": "DB",
"database_name": "my-database",
"database_id": "your-database-id",
"migrations_dir": "migrations",
"migrations_pattern": "migrations/*/migration.sql",
},
],
}
ポイントをいくつか。
- グロブパターンは Wrangler の設定ファイルからの相対パスで書くよ。
migrations_patternを指定しなかったときのデフォルトは${migrations_dir}/*.sqlなの。だから今までどおりの構成の人は何も変えなくて大丈夫、ちゃんと後方互換だよ。- マイグレーションの名前は
migrations_dirからの相対パスとして記録されるの。
もっと詳しい書き方はネストしたマイグレーション構成のドキュメントにまとまってるよ。
まとめ
- D1 のマイグレーションが入れ子フォルダに対応、新しく
migrations_pattern設定が追加されたよ。 - グロブパターンで指定でき、デフォルトは
${migrations_dir}/*.sqlだから後方互換。 - マイグレーション名は
migrations_dirからの相対パスで記録されるよ。 - Drizzle みたいな ORM を D1 と組み合わせて使ってるみんなに刺さるアップデートだね!