Skip to content

Cloudflare リソース

apps/leader-collie/wrangler.jsonc で定義する。Worker 名は leader-collie。 エントリは workers/app.ts、静的アセットは build/clientreact-router build の出力)。

Bindings

Binding種類リソース名用途
DBD1leader-collie-dbメイン DB(イベント / ユーザー / 投票 / レポート)
ANALYSIS_DBD1leader-collie-analysis-db分析 DB(messages_vectors の読み取り)
REPORTS_BUCKETR2leader-collie-reportsレポート添付メディア

初回プロビジョニング

bash
cd apps/leader-collie
bunx wrangler d1 create leader-collie-db
bunx wrangler d1 create leader-collie-analysis-db   # 分析を使う場合のみ
bunx wrangler r2 bucket create leader-collie-reports

出力された database_idwrangler.jsonc に反映する。 R2 の公開配信用にカスタムドメイン(または r2.dev)を設定し、R2_PUBLIC_URL_BASE に入れる。

D1 マイグレーションは drizzle-kit で生成した SQL(packages/leader-collie-db/migrations/)を wrangler d1 migrations apply で適用する(migrations_dir 設定済み)。

Vars(wrangler.jsonc の vars

変数用途
BETTER_AUTH_URL公開 URL。better-auth の baseURL / OAuth リダイレクト
NEXT_PUBLIC_APP_URL通知などに使うアプリ URL(変数名は旧スタック由来のまま)
R2_ACCOUNT_IDR2 S3 互換エンドポイント(presign)に使用
R2_BUCKET_REPORTSレポートメディアのバケット名
R2_PUBLIC_URL_BASEメディア公開 URL のベース(カスタムドメイン / r2.dev)
OPENAI_MODEL_DEFAULTAI ドラフト生成のモデル(省略時 gpt-4o-mini)

ローカル開発では .dev.vars.dev.vars.example をコピー)で上書きする。

Secrets(wrangler secret put

シークレット用途
BETTER_AUTH_SECRETセッション署名
SLACK_CLIENT_ID / SLACK_CLIENT_SECRETSlack OAuth(ログイン)
SLACK_BOT_TOKENusers.info / メンバー同期
SLACK_CHANNEL_IDイベント通知先チャンネル
TIED_BOT_URL / INTERNAL_API_SECRET通知ボット連携 / 内部 Webhook 認証
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRETGoogle カレンダー連携 OAuth
OPENAI_API_KEYAI ドラフト生成
OPENAI_BASE_URL(任意)AI Gateway 経由にする場合のベース URL
R2_ACCESS_KEY_ID / R2_SECRET_ACCESS_KEYR2 S3 互換 API(presigned URL 生成)

vars / secrets は nodejs_compat により Worker 内の process.env へ注入される。

運用スクリプト用(Workers 外、.env.local

lib/scripts/ の運用スクリプトは Cloudflare REST API で本番 D1 に接続する:

  • CLOUDFLARE_ACCOUNT_ID
  • CLOUDFLARE_D1_DATABASE_ID(メイン DB の database_id)
  • CLOUDFLARE_API_TOKEN(D1 edit 権限)

アクセス制御

本アプリは一般メンバーがログインして使うため Cloudflare Access の外 に置く。 認証はアプリ内の better-auth (Slack OAuth) が担う (monorepo の「Access で保護し authentication logic を書かない」規約の例外)。