homura Docs App | Posts About Login
Ctrl+K

sequel-d1

Sequel の :d1 アダプタと、Opal / Workers 向けの接続層です。

接続

require 'sequel'

DB = nil

get '/users' do
  DB ||= Sequel.connect(adapter: :d1, d1: d1)
  content_type 'application/json'
  DB[:users].order(:id).all.to_json
end

d1: には prepare(sql) 可能なオブジェクト(D1 の Ruby ラッパ)を渡します。homura の /demo/sequel/posts が実コード例です。

マイグレーション

bundle exec homura db:migrate:compile db/migrations
bundle exec homura db:migrate:apply --database homura-db
bundle exec homura db:migrate:apply --remote --database homura-db

データベース名は --database または環境変数 CLOUDFLARE_D1_DATABASE。Wrangler バイナリは WRANGLER_BIN または PATH の wrangler

Opal ビルドパス

gem の lib を Opal の -Ivendor より前に置く(sequel.rb が vendored 版へフォールバックする順序)。

-I gems/sequel-d1/lib -I lib -I vendor

できること / できないこと

できることできないこと
SQLSQLite 方言で D1 に送る(Dataset#sql で確認可能)PostgreSQL 専用方言をそのまま
非同期Dataset#all 等は auto-await が Ruby の同期形に寄せるdynamic dispatch で receiver の型を隠す書き方
マイグレーションRuby マイグレーションを SQL にコンパイルして applyAR の schema.rb をそのまま流用