Holo CI Workers - CI結果をホロの口調でDiscord通知
なんで作ったか
Section titled “なんで作ったか”- 自作ルーターのISOを作成するのに1時間くらい待つ
- なんか暇だし、失敗したときにメールくるのカスだなぁ
- 成功・失敗両方通知きてほしいなぁ
- じゃあDiscordBotつくるかぁ
- 成功・失敗両方通知きてほしいなぁ
- 自作ルーターは記事にするか微妙ではある(大人の事情で)
- 無線6GHzで1.9G、有線で7G出ました☺️(upload)
- GitHub Actions CIの結果を「狼と香辛料」のホロの口調でDiscordに通知するBot
- Cloudflare Workers上で動作するサーバーレスアプリケーション
- Claude API (claude-sonnet-4) でホロ口調に変換
技術スタック
Section titled “技術スタック”| 分類 | 技術 |
|---|---|
| Runtime | Cloudflare Workers |
| 言語 | TypeScript (ES2024) |
| Package Manager | bun |
| テスト | Vitest + @cloudflare/vitest-pool-workers |
| AI | Anthropic Claude API |
| ストレージ | Cloudflare Workers KV |
アーキテクチャ
Section titled “アーキテクチャ”GitHub Actions → Webhook → CF Workers → Claude API → Discord ↓ 署名検証 (Web Crypto API) ↓ 履歴管理 (KV)- GitHub Webhookでworkflow_run completedを受信
- HMAC-SHA256署名検証 (Web Crypto API)
- ペイロード解析 (success/failure判定)
- Claude APIでホロ口調に変換
- Discord Webhookで通知送信
- KVに履歴保存
ホロ口調変換の仕組み
Section titled “ホロ口調変換の仕組み”8パターンの口調バリエーション
Section titled “8パターンの口調バリエーション”- 心配そうに / 茶化し気味に / 励まし調で / 淡々と
- 呆れ気味に / 分析的に / 驚いた様子で / 同情的に
履歴管理で重複回避
Section titled “履歴管理で重複回避”- 直近5件の口調を記録
- 同じ口調が連続しないよう制御
Cloudflare Workers固有の工夫
Section titled “Cloudflare Workers固有の工夫”| 制約 | 対応 |
|---|---|
| Node.js crypto不可 | Web Crypto API (crypto.subtle) |
| 即座レスポンス必要 | ctx.waitUntil()で非同期処理 |
| 状態管理 | Workers KV |