Skip to content

運用 / デプロイ

コマンドは monorepo ルートから bun run --filter @tied-workspace/leader-collie <script>、 または apps/leader-collie/ 内で bun run <script>

ローカル開発

bash
bun install                  # monorepo ルートで
bun run db:migrate           # ローカル D1 作成(初回 / スキーマ変更時)
bun run db:seed              # テストデータ投入
cp .dev.vars.example .dev.vars   # ローカル用 Worker 環境変数
bun run dev                  # http://localhost:3000 (react-router dev)

react-router dev@cloudflare/vite-plugin)が SSR を workerd 上で実行し、 wrangler.jsonc の binding(ローカル D1 / R2)と .dev.vars を提供する。 Slack ログインを試さないなら .dev.varsSKIP_AUTH=true で認証をスキップできる (事前に db:seed が必要)。

データベース運用

bash
bun run db:generate        # スキーマ変更 → マイグレーション SQL 生成
bun run db:migrate         # ローカル D1 に適用
bun run db:migrate:remote  # 本番 D1 に適用
bun run db:reset           # ローカル D1 の全データ削除
bun run db:backup          # 本番 D1 の JSON ダンプ(D1 HTTP API)
bun run db:sync-slack      # Slack メンバーを本番 D1 に upsert
  • SQL ダンプは wrangler d1 export DB --remote --output backup.sql でも取得できる
  • D1 Time Travel で 30 日以内の任意時点に復元できる(wrangler d1 time-travel

テスト

bash
bun run test               # vitest(unit + integration)
bun run type-check         # tsc --noEmit
bun run lint               # ESLint
bun run test:e2e           # Playwright(事前に bun run db:migrate が必要)

E2E はローカル D1 の SQLite ファイルをフィクスチャが直接操作する (e2e/fixtures/database.tslib/db/local-db.ts)。 認証バイパス用の E2E_TEST_USERe2e/global-setup.ts.dev.vars を 一時的に差し替えて Worker に注入する(既存の .dev.vars は退避・復元される)。

デプロイ

bash
bun run deploy   # react-router build && wrangler deploy

事前に一度だけ:

  1. D1 / R2 を作成し wrangler.jsoncdatabase_id を実値にする
  2. varsBETTER_AUTH_URL / R2_* など)を本番値にする
  3. シークレットを登録する(Cloudflare リソース 参照)
  4. bun run db:migrate:remote でマイグレーション適用

デプロイ後の動作確認: ログイン(Slack OAuth)→ ダッシュボード表示 → イベント作成 → レポートのメディアアップロード(presigned URL が R2 に向くこと)。

既知の注意点

  • D1 は対話型トランザクション非対応db.transaction を使わず、 必要なら db.batch か単一 SQL で表現する
  • presigned PUT URL は R2 の S3 互換 API を使うため、 R2_ACCESS_KEY_ID / R2_SECRET_ACCESS_KEY(R2 API トークン)が必要
  • メディアの公開配信には R2 のカスタムドメイン(または r2.dev)を有効化し、 R2_PUBLIC_URL_BASE を設定すること
  • 旧 Server Actions の戻り値は JSON 経由になったため Date は ISO 文字列になる (現状の呼び出し側は id / フラグ程度しか使っておらず影響なし)
  • 旧 tied-event(Turso)からデータ移行する場合は、Turso からダンプした SQL を wrangler d1 execute DB --remote --file で流し込む