🥝
Cloudflare D1 の UUID を取得するスクリプト
結論
こんな感じのスクリプトになります。
wrangler d1 list --json | jq -r '.[] | select(.name == "d1-example") | .uuid'
d1 list コマンドには json で書き出すオプションがあるので、それを jq でパースしています。
name == "d1-example"
の部分はプロジェクトごとに置き換えてください。
ユースケース
なんでこんなことをするのかというと、Cloudflare D1 のマイグレーションに、sqldef (sqlite3def) を使いたいのですが、sqliite3def は db_name にパスを指定する必要があります。
そこで、ローカルにある D1 (sqlite db) を参照したいのですが、Cloudflare D1 のローカルDBのパスは .wrangler/state/v3/d1/${UUID}/db.sqlite
という形式になっているので、UUID を取得する必要があります。
自分の場合はこれを Makefile でやりたかったので以下リンク先のように実装しています。
これはこれで Makefile 実行の度に D1 UUID の取得をしやがるので、工夫したいなとは考えてます(shell script にしといた方が使いやすいかな 🤔)。
おわりに
D1 + sqldef + sqlc スタックは結構良い感じなので、これからも使っていきたいです。
もっといい感じなソリューションがあればぜひ教えてください!
Discussion