webhook-proxy — Webhook プロキシ(Hono + Cloudflare Workers)
概要
webhook-proxy は、外部サービスから届く webhook を受け取り、それらのイベントをリアルタイムに WebSocket や SSE でクライアントへ配信するための軽量プロキシ実装です。Hono フレームワークを使ったルーティングと、Cloudflare Workers 上でのサーバレス実行を前提として設計されており、低レイテンシでスケーラブルに動作します。TypeScript で書かれており、Cloudflare Workers へのデプロイボタンや MIT ライセンスによる利用の自由度が高い点が特徴です。開発中の受信確認やリアルタイム通知、ブラウザでのデバッグ用途に向きます。
リポジトリの統計情報
- スター数: 10
- フォーク数: 0
- ウォッチャー数: 10
- コミット数: 22
- ファイル数: 21
- メインの言語: TypeScript
主な特徴
- Hono フレームワークによるシンプルで高速なルーティング設計
- Cloudflare Workers を利用したサーバレスでのエッジ実行(ワンクリックデプロイ対応)
- WebSocket と SSE の両方で webhook イベントをリアルタイム配信
- TypeScript 実装、MIT ライセンスでカスタマイズや組み込みが容易
技術的なポイント
本プロジェクトは「受け取った HTTP ベースの webhook をイベントストリームに変換して配信する」ことにフォーカスしています。Hono を採用することでルーティングやミドルウェアが軽量に記述でき、Cloudflare Workers 上でのサーバレス運用に適しています。Workers はエッジで動くため低レイテンシかつスケーラブルで、外部サービスからの大量の webhook を扱う場面で有利です。
WebSocket と SSE の二形態をサポートする点は重要です。SSE は一方向のイベント配信に適しブラウザからの受信が簡単、WebSocket は双方向通信やリアルタイム双方向対話が必要な場合に有効です。実装上は、受信した webhook を内部のトピックやチャネルにマッピングし、接続中のクライアントへ即時にプッシュするアーキテクチャが想定されます。
Cloudflare Workers の制約(実行時間やコネクションの特性)を踏まえ、永続的な状態管理が必要な場合は Durable Objects や KV ストアとの組み合わせが考えられますが、本リポジトリはまずは軽量かつサーバレスに動かすことを優先しています。セキュリティ面では、Webhook の署名検証やトークンベースの認証、CORS 設定、レート制御などを組み込むことで信頼性を高められます。TypeScript による型安全やビルド環境を活かし、テストやデプロイの自動化(Cloudflare のデプロイボタン対応)も整備しやすい構成です。
開発や運用で注意すべき点として、Webhook の再送・重複受信への対処、クライアントの切断・再接続時のイベント補完(必要ならキューや短期ストレージを導入)があります。また、ログと監視を整備して配信遅延や失敗を検出できるようにすることが実用上重要です。軽量な設計を保ちつつ、必要に応じて Cloudflare のストレージや Durable Objects を導入して堅牢性を向上させる方針が現実的です。
プロジェクトの構成
主要なファイルとディレクトリ:
- .dev.vars.example: file
- .gitattributes: file
- .github: dir
- .gitignore: file
- CHANGELOG.md: file
- README.md, package.json, tsconfig.json, src/(ソースコード)や public/(フロント資材)などの典型的なファイルが含まれます
- 他にも CI 設定やデプロイ用の設定ファイル、ドキュメントが含まれている想定です
…他 16 ファイル
まとめ
Cloudflare Workers と Hono を組み合わせた、軽量で導入しやすい webhook→ストリーム変換プロキシです。
リポジトリ情報:
- 名前: webhook-proxy
- 説明: 开源 webhook 代理服务,基于 Hono 框架和 Cloudflare Workers 构建。将 webhook 事件实时转换为 WebSocket 或 SSE 事件流。
- スター数: 10
- 言語: TypeScript
- URL: https://github.com/lc-cn/webhook-proxy
- オーナー: lc-cn
- アバター: https://avatars.githubusercontent.com/u/31359947?v=4
READMEの抜粋: