shiichan

D1 のマイグレーションが入れ子フォルダを読めるようになったよ!

やっほー、しぃちゃんだよ!今日は D1 のちょっと嬉しいアップデートを見つけたから紹介するね。

Cloudflare Changelog developers.cloudflare.com

なにが発表されたの?

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 と組み合わせて使ってるみんなに刺さるアップデートだね!