Skip to content

運用 / デプロイ

ワンだふる (apps/suteki-bot) の環境変数、ローカル開発、デプロイ、テスト。

環境変数 / シークレット

すべて wrangler secret put <NAME> で設定。ローカルは .dev.vars (.dev.vars.example 参照)。

変数用途
SLACK_BOT_TOKENSlack Web API の Bot Token (xoxb-...)
SLACK_SIGNING_SECRETリクエスト署名検証

KV namespace は secret ではなく wrangler.toml[[kv_namespaces]] バインディング (TEAM_CONFIG_KV) で指定する。

旧 Container 構成の SLACK_APP_TOKEN / CLOUDFLARE_ACCOUNT_ID / CLOUDFLARE_KV_NAMESPACE_ID / CLOUDFLARE_API_TOKEN は不要になった。

ローカル開発

bash
cp apps/suteki-bot/.dev.vars.example apps/suteki-bot/.dev.vars
# 値を埋める
bun run --filter @tied-workspace/suteki-bot dev

wrangler dev で起動する (KV はローカルシミュレーション)。Slack から実イベントを受けるには公開 URL が必要なので、cloudflared tunnel 等でトンネルして Slack App の Request URL を一時的に向けるか、署名付きリクエストを curl で再現する。

デプロイ

bash
bun run --filter @tied-workspace/suteki-bot deploy
# = bunx wrangler@^4 deploy

# ビルド検証のみ (デプロイしない。Cloudflare クレデンシャル不要)
bun run --filter @tied-workspace/suteki-bot build
# = bunx wrangler@^4 deploy --dry-run

main への push で GitHub Actions (deploy-suteki-bot.yml) が自動デプロイする。PR ではプレビュー版を wrangler versions upload でアップロードする。加えて横断 CI (ci.yml) が全 PR で build (dry-run) と test を実行する。

Socket Mode (Container) からの移行手順

旧構成から切り替える際の手順。順番が大事 (イベント取りこぼしを最小化する)。

  1. wrangler.tomlTEAM_CONFIG_KVid に既存 namespace (旧 CLOUDFLARE_KV_NAMESPACE_ID) を設定する。
  2. wrangler secret put SLACK_BOT_TOKEN / SLACK_SIGNING_SECRET を (未設定なら) 設定し、Worker をデプロイする。
  3. Slack App の Event Subscriptions を有効化し、Request URL に https://<worker-url>/slack/events を設定する (url_verification チャレンジに自動応答する)。
  4. Slash Command の Request URL を https://<worker-url>/slack/commands に設定する。
  5. Socket Mode を無効化する。
  6. 不要になったシークレット (SLACK_APP_TOKEN, CLOUDFLARE_*) と App-level Token を削除する。

テスト

bun test で全層をユニットテスト。

  • domain / application は依存ゼロなので普通にテスト可能。
  • ports の置き換えには application/test-fakes.ts のフェイク実装を使う。
  • presentation はハンドラ関数を直接呼んで検証する。
  • index.test.ts は署名付きリクエストを組み立てて Worker の fetch ハンドラを end-to-end で検証する (ルーティング / 署名拒否 / url_verification / コマンドディスパッチ / 3 秒 ack / 重複排除)。

新しいユースケースを追加するときは domain → application → infrastructure → presentation の順に書き、各層でテストを足す。