Zenn Dev Ryo Kawamata Articles Hono Cloudflare Discord App
Hono + Cloudflareでもくもく会用のDiscord Botを作ってみた
- URL: https://zenn.dev/ryo_kawamata/articles/hono-cloudflare-discord-app
- 日付: 2026-06-26
- Tier: Tier 3
- 要旨: 茨城県水戸市のもくもく会コミュニティ運営補助のため、HonoとCloudflare Workers・D1を使ってDiscord BotをDiscord.jsなしで実装した事例。チェックイン機能(参加者の自己紹介と今日やることの投稿)、もくもく会の開始・終了通知(Cron Triggerで15:00と17:50に自動送信)、次回イベント概要生成の3機能を持つ。HonoのBindingsによるCloudflareスタックとの統合のしやすさ、Drizzle ORMとの組み合わせによる強力な型補完、TestHelperによるテストの書きやすさが評価されている。
詳細
主要機能
- /checkin コマンド: モーダルで自己紹介と今日やることを入力→フォーマットされた内容をチャンネルに投稿。2回目以降はD1から自己紹介を自動補完
- /mokumoku-start コマンド: スケジュール・ルール投稿。実行当日の15:00(LT通知)と17:50(終了通知)をCron Triggerで送信
- /generate-event-description コマンド: 次回イベント概要を生成(前回参加者の「今日やること」を自動埋め込み)
技術スタック
- Hono + Cloudflare Workers(サーバーレスHTTPハンドリング)
- Cloudflare D1(SQLite互換DBでチェックイン履歴を永続化)
- Drizzle ORM(D1操作、型補完が強力)
- Discord.jsを使わない純粋なJSでのDiscord Bot実装
実装のポイント
- /interaction エンドポイントでApplicationCommandObjectのTypeを見て処理を分岐
- モーダル表示はスラッシュコマンドのレスポンスでコンポーネントを返し、custom_idでサブミット結果と紐づけ
- Cron Triggerは毎週土日15:00と17:50に実行し、当日のEventモデルが存在する場合のみ通知を送る設計
開発体験
bunx create-honoでプロジェクト作成、bunx deployでCloudflareへデプロイ- Hono TestHelperでほぼ全処理にテストを記述