Open4
CloudflareのWorkers & D1試してみる
やること
- honoのセットアップ
- CloudFlare D1のセットアップ
- D1のマイグレーション
honoのセットアップ
- インストール
$ npm i hono
- 初期化
import { Hono } from 'hono'
const app = new Hono()
app.get('/', (c) => c.text('Hono! Hono!'))
export default app
- デプロイして確認
CloudFlare D1のセットアップ&素振り
データベースの初期化
D1用のCLIコマンドを叩いて出力されたtomlをwrangler.toml
に追加する
wrangler d1 create my-db
🚧 D1 is currently in open alpha and is not recommended for production data and traffic.
Please report any bugs to https://github.com/cloudflare/wrangler2/issues/new/choose.
To request features, visit https://community.cloudflare.com/c/developers/d1.
To give feedback, visit https://discord.gg/cloudflaredev
✅ Successfully created DB 'my-db'!
Add the following to your wrangler.toml to connect to it from a Worker:
[[ d1_databases ]]
binding = "DB" # i.e. available in your Worker on env.DB
database_name = "my-db"
database_id = "XXX"
ローカルで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 CLIでschema.sqlを実行
$ wrangler d1 execute feedness --local --file=./schema.sql
- wrangler CLIでデータが保存されたことを確認
$ wrangler d1 execute feedness --local --command='SELECT * FROM Customers'
┌────────────┬─────────────────────┬───────────────────┐
│ CustomerID │ CompanyName │ ContactName │
├────────────┼─────────────────────┼───────────────────┤
│ 1 │ Alfreds Futterkiste │ Maria Anders │
├────────────┼─────────────────────┼───────────────────┤
│ 4 │ Around the Horn │ Thomas Hardy │
├────────────┼─────────────────────┼───────────────────┤
│ 11 │ Bs Beverages │ Victoria Ashworth │
├────────────┼─────────────────────┼───────────────────┤
│ 13 │ Bs Beverages │ Random Name │
└────────────┴─────────────────────┴───────────────────┘
Workersから参照する
Workerのコードの以下を追加する
- EnvにD1を追加
- データを取得するエンドポイント追加
- エンドポイント上でSQLを実行
export interface Env {
DB: D1Database
}
const app = new Hono()
app.get('/api/beverages', async (c) => {
const res = await c.env.DB.prepare(
'SELECT * FROM Customers WHERE CompanyName = ?'
)
.bind('Bs Beverages')
.all()
return c.json(res.results)
})
参考
D1のマイグレーション
参考: https://developers.cloudflare.com/d1/platform/migrations/
マイグレーションファイルの作成
$ wrangler d1 migrations create my_app "create_providers"
✅ Successfully created Migration '0000_create_providers.sql'!
The migration is available for editing here
/XXX/migrations/0000_create_providers.sql
マイグレーション一覧の確認
$ wrangler d1 migrations list my-app
🌀 Mapping SQL input into an array of statements
🌀 Parsing 1 statements
🚣 Executed 1 command in 0.3363149999640882ms
Migrations to be applied:
┌───────────────────────────┐
│ Name │
├───────────────────────────┤
│ 0000_create_providers.sql │
└───────────────────────────┘
マイグレーションの実行
$ wrangler d1 migrations apply feedness
Migrations to be applied:
┌───────────────────────────┐
│ Name │
├───────────────────────────┤
│ 0000_create_providers.sql │
└───────────────────────────┘
About to apply 1 migration(s)
Your database may not be available to serve requests during the migration, continue? (y/n)
🌀 Mapping SQL input into an array of statements
🌀 Parsing 2 statements
🚣 Executed 2 commands in 7.415894000791013ms
┌───────────────────────────┬────────┐
│ Name │ Status │
├───────────────────────────┼────────┤
│ 0000_create_providers.sql │ ✅ │
└───────────────────────────┴────────┘