運用 / デプロイ
ワンだふる (apps/suteki-bot) の環境変数、ローカル開発、デプロイ、テスト。
環境変数 / シークレット
すべて wrangler secret put <NAME> で設定。ローカルは .dev.vars (.dev.vars.example 参照)。
| 変数 | 用途 |
|---|---|
SLACK_BOT_TOKEN | Slack 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は不要になった。
ローカル開発
cp apps/suteki-bot/.dev.vars.example apps/suteki-bot/.dev.vars
# 値を埋める
bun run --filter @tied-workspace/suteki-bot devwrangler dev で起動する (KV はローカルシミュレーション)。Slack から実イベントを受けるには公開 URL が必要なので、cloudflared tunnel 等でトンネルして Slack App の Request URL を一時的に向けるか、署名付きリクエストを curl で再現する。
デプロイ
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-runmain への push で GitHub Actions (deploy-suteki-bot.yml) が自動デプロイする。PR ではプレビュー版を wrangler versions upload でアップロードする。加えて横断 CI (ci.yml) が全 PR で build (dry-run) と test を実行する。
Socket Mode (Container) からの移行手順
旧構成から切り替える際の手順。順番が大事 (イベント取りこぼしを最小化する)。
wrangler.tomlのTEAM_CONFIG_KVのidに既存 namespace (旧CLOUDFLARE_KV_NAMESPACE_ID) を設定する。wrangler secret put SLACK_BOT_TOKEN/SLACK_SIGNING_SECRETを (未設定なら) 設定し、Worker をデプロイする。- Slack App の Event Subscriptions を有効化し、Request URL に
https://<worker-url>/slack/eventsを設定する (url_verificationチャレンジに自動応答する)。 - 各 Slash Command の Request URL を
https://<worker-url>/slack/commandsに設定する。 - Socket Mode を無効化する。
- 不要になったシークレット (
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 の順に書き、各層でテストを足す。