Webhookはサーバ側から指定したURLにアクセスしてくれる仕組みです。REST APIのようにクライアントからアクセスするのではなく、サーバ側からリクエストしてくれるのでちょうど逆向きになります。イベントが起きた時しかアクセスが来ないので、リソースの最適化にもなります。
Customers Mail CloudでもWebhookの仕組みを提供しています。そんなWebhookの開発を行う際には、開発対象のサーバもインターネット上で公開されている必要があります。しかし、オンライン上で公開しているサーバ上のコードを直接修正するのは難しいはずです。
そこで使ってみたいのが、ローカルサーバの特定のポートをインターネット上に公開し、インターネットからアクセスできるようにするトンネルサービスです。今回は一気にまとめて紹介します。
Argo Tunnel
Cloudflareが提供するサービスです。ホスト名は自由に設定できるようです(あらかじめCloudflare側で設定されている必要があります)。料金は月5ドルから転送量に応じた従量課金となっています。
Argo Tunnel | Secure Tunneling Software | Cloudflare
Beeceptor
APIのモックを提供するサービスです。月10ドルからのプランでlocalhostへのトンネル機能が提供されます。
Beeceptor - Zero Coding Rest API Mocking - Rest API Mock Server
Loophole
執筆時点(2021年3月)でベータ版につき、無料で利用できるポートフォワードサービスです。BASIC認証やトークンを使った認証にも対応しています。
Inlets
Cloudflare Argoのようにドメインを取得した上で、トンネルを作成します。VPNに変わるサービスとして提供されています。
Inlets – The Cloud Native Tunnel
beameio
無料で使えるサービスです。サブドメインは自動的に振られているので、実行するたびにURLが異なるようです。
KubeSail
1GBのトラフィックまで無料で利用できます。接続は2台までとなるようです。
localhost.run
SSHのトンネリングを行えるサービスで、特に専用クライアントアプリケーションはありません。通常のSSHコマンドで接続できます。ドメイン名は自分で取得、指定する必要があります。
Localtunnel
npmでインストールできるコマンドを実行するだけでトンネリングできます。料金表もなく、無料で利用できるようです。
Localtunnel ~ Expose yourself to the world
LocalXpose
無料で利用できますが15分でタイムアウトします。サブドメインは無料でもカスタマイズできます。有料(月6ドル)でタイムアウトがなくなります。
Lynk
類似サービスと比べて6倍高速であると謳っているサービスになります。データは圧縮され、転送量を抑えられます。無料で利用できますが、1時間100コネクションまでになります。
ngrok
この手のサービスで最も有名でしょう。無料で利用できますが、サブドメインは毎回変わってしまいます。月5ドルの有料版で3サブドメインまで利用できます。
ngrok - secure introspectable tunnels to localhost
Openport
無料で月間10MBまでの転送が利用できます。月5ドルで1GBに拡張されます。HTTPに限らず、SSHトンネリングとして、VNCなども利用できます。
Openport - Easy and secure reverse SSH
Packetriot
Let's EncryptベースのHTTPSが利用できます。無料で月間1GBまでの転送量が利用できます。アクセスログなどの機能はありませんが、開発時には十分な量でしょう。
Packetriot - Host applications on the Internet from any network or PC
Pagekite
Pythonスクリプトでクライアントが提供されています。基本的に有料のみですが、トライアルは可能です。月5.99ドルで15GBまでのトラフィックとなっています。
Pagekite - The fast, reliable localhost tunneling solution
Portmap.io
無料から利用できるSSHポートフォワードサービスです。無料の場合はサブドメインが自動的に生成されます。Web開発以外にも利用できます。
Portmap.io - free port forwarding solution
Webhook Relay
Webhookを利用した開発のために作られたサービスです。あらかじめルールを決めて、そのルールに合わせた呼び出しが可能です。CIと組み合わせる、IoTで利用するといったユースケースが紹介されています。
Relay and proxy all your webhooks to public and internal destinations - Webhook Relay
Staqlab Tunnel
利用できるトンネルサービスです。パフォーマンスは不明ですが、無料で利用できるので一時的な開発であれば十分でしょう。
Staqlab Tunnel-Expose Your localhost
Burrow.io
クライアントソフトウェアのダウンロード不要で、コマンドを叩くだけでSSHトンネルが作成されます。カスタムドメインなどは有料プラン(月額4.99ドル)からになります。
The Simple, Stable Localhost Tunnel | Burrow.io
UltraHook
カスタムのサブドメインが使えて無料というサービスです。ライブラリはRubyGemsで配布されており、あらかじめAPIキーの取得が必要です。
UltraHook - Receive webhooks on localhost
まとめ
今回紹介したサービスを利用することでWebhookを使った開発が容易になるでしょう。なお、限られたポートとはいえ、インターネット上にローカルマシンのリソースが公開されますので、利用するサービスが問題ないかどうかはきちんと検討してください。また、開発が終わったらきちんとサーバを落として、不用意に公開し続けないように注意してください。