wranglerを使って、Cloudflare D1(SQLite DB)にアクセスする
Cloudflare入門中です。 SQLiteのマネージドDBサービス「Cloudflare D1(Alpha版)」のセットアップやwranglerでのアクセスに挑戦しました。 Cloudflareダッシュボードから、D […]
目次
Cloudflare入門中です。
SQLiteのマネージドDBサービス「Cloudflare D1(Alpha版)」のセットアップやwranglerでのアクセスに挑戦しました。
Cloudflareダッシュボードから、D1のデータベースを作成する
セットアップは、ダッシュボードからも行えます。(wranglerからもできるそうなので、そちらはまた次回試します。)
[Workers]タブ内にありますので、一旦Workersページに移動する必要があるかもしれません。
[データベースを作成]を選ぶと、そのままGUIで進めるか、Wranglerを使うかを選べます。
データベース名を設定して、作成しましょう。
これで完成です。
データベース名とデータベースIDをコピーしておきましょう。
作成したデータベースにwranglerでアクセスする
Remixなどのアプリから、D1にアクセスする設定を行います。
wrangler.toml
にデータベース情報を追加しましょう。
compatibility_date = "2022-04-05"
compatibility_flags = ["streams_enable_constructors"]
[[ d1_databases ]]
binding = "DB"
database_name = "first-remix"
database_id = "1234-xxxx-xxxx-xxxx-5678"
ドキュメントにあるサンプルのSQLファイル(schema.sql
)を配置します。
DROP TABLE IF EXISTS Customers;
CREATE TABLE Customers (CustomerID INT, CompanyName TEXT, ContactName TEXT, PRIMARY KEY (`CustomerID`));
INSERT INTO Customers (CustomerID, CompanyName, ContactName) VALUES (1, 'Alfreds Futterkiste', 'Maria Anders'), (4, 'Around the Horn', 'Thomas Hardy'), (11, 'Bs Beverages', 'Victoria Ashworth'), (13, 'Bs Beverages', 'Random Name');
wranglerでSQLを実行しましょう。
% npx wrangler d1 execute first-remix --local --file=./schema.sql
▲ [WARNING] Processing wrangler.toml configuration:
- D1 Bindings are currently in alpha to allow the API to evolve before general availability.
Please report any issues to https://github.com/cloudflare/workers-sdk/issues/new/choose
Note: Run this command with the environment variable NO_D1_WARNING=true to hide this message
For example: `export NO_D1_WARNING=true && wrangler <YOUR COMMAND HERE>`
--------------------
🚧 D1 is currently in open alpha and is not recommended for production data and traffic
🚧 Please report any bugs to https://github.com/cloudflare/workers-sdk/issues/new/choose
🚧 To request features, visit https://community.cloudflare.com/c/developers/d1
🚧 To give feedback, visit https://discord.gg/cloudflaredev
初回の場合、データベースファイルを作成するか聞かれます。
? About to create .wrangler/state/d1/DB.sqlite3, ok? › (Y/n)
y
を選ぶと、.wrangler/state/d1
ディレクトリにSQLiteのファイルが生成されます。
--local
フラグをつけているので、ローカルに配置された。と一旦解釈しています。
SELECTクエリも、--local
をつけないと「そんなテーブルは存在しない」となります。
% npx wrangler d1 execute first-remix --command="SELECT * FROM Customers"
✘ [ERROR] A request to the Cloudflare API (/accounts/xxxx/query) failed.
ERROR 9009: SQL prepare error: no such table: Customers [code: 7500]
If you think this is a bug, please open an issue at:
https://github.com/cloudflare/workers-sdk/issues/new/choose
--local
をつけると、schema.sql
で登録したデータが取得できます。
% npx wrangler d1 execute first-remix --command="SELECT * FROM Customers" --local
┌────────────┬─────────────────────┬───────────────────┐
│ CustomerID │ CompanyName │ ContactName │
├────────────┼─────────────────────┼───────────────────┤
│ 1 │ Alfreds Futterkiste │ Maria Anders │
├────────────┼─────────────────────┼───────────────────┤
│ 4 │ Around the Horn │ Thomas Hardy │
├────────────┼─────────────────────┼───────────────────┤
│ 11 │ Bs Beverages │ Victoria Ashworth │
├────────────┼─────────────────────┼───────────────────┤
│ 13 │ Bs Beverages │ Random Name │
└────────────┴─────────────────────┴───────────────────┘
終わりに
これまでKey-Value型のDBばかり触っていましたので、SQLiteが手軽に扱えるのは、なかなかアツいなと思います。
Workersからしか利用できないのかや、WorkersなどからD1にSQLを実行する方法などは追って紹介します。
参考資料
- D1 Get Started: https://developers.cloudflare.com/d1/get-started
- おなじみクラスメソッド: https://dev.classmethod.jp/articles/getting-started-cloudflare-workers-hono-cloudflare-d1/
- 実際に実装された方のスライド: https://speakerdeck.com/kuroppe1819/remix-plus-cloudflare-pages-plus-d1-de-pokemon-sv-norentarutimuwojian-suo-dekiruapuriwozuo-tutemita