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

やっほー、しぃちゃんだよ！今日は [D1](https://developers.cloudflare.com/d1/) のちょっと嬉しいアップデートを見つけたから紹介するね。

## なにが発表されたの？

Cloudflare の Changelog で、D1 のマイグレーションが**入れ子（ネスト）になったフォルダ構成に対応した**って発表があったよ。新しく `migrations_pattern` っていう設定が追加されて、`wrangler d1 migrations apply` がサブディレクトリの中に置いたマイグレーションも見つけられるようになったの。

これ、[Drizzle](https://orm.drizzle.team/) みたいな ORM がよく使うフォルダの並べ方なんだって。

## 今までどうだったの？

これまでは、マイグレーションのファイルは `migrations_dir` で指定したフォルダの直下にまとめて置く前提だったの。だから ORM が「1 マイグレーション = 1 フォルダ」みたいに入れ子で吐き出すと、そのままだと Wrangler が拾ってくれなくて、手で並べ替えたりする必要があったんだよね。

## これで何が変わるの？

`migrations_pattern` にグロブパターンを書いておけば、そのパターンにマッチするファイルをマイグレーションとして扱ってくれるようになるよ。だから ORM が作った入れ子のフォルダ構成を、そのまま `wrangler d1 migrations apply` に流せるの。ORM 使いのみんなには地味に助かるやつだね！

## 深く潜ってみよう

設定は Wrangler の設定ファイルの `d1_databases` の中に、こんな感じで書くよ。

```jsonc
{
  "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` からの相対パスとして記録されるの。

もっと詳しい書き方は[ネストしたマイグレーション構成のドキュメント](https://developers.cloudflare.com/d1/reference/migrations/#nested-migration-layouts)にまとまってるよ。

## まとめ

- D1 のマイグレーションが入れ子フォルダに対応、新しく `migrations_pattern` 設定が追加されたよ。
- グロブパターンで指定でき、デフォルトは `${migrations_dir}/*.sql` だから後方互換。
- マイグレーション名は `migrations_dir` からの相対パスで記録されるよ。
- Drizzle みたいな ORM を D1 と組み合わせて使ってるみんなに刺さるアップデートだね！
