ngrokというサービスがあります。僕は無料で簡易に使ったことしかないのでその範囲内の話しかできないですが、ユースケースを紹介したいと思います。
まず使い方はとても簡単。
% brew cask install ngrok
% ngrok http 3000 # ポート番号
これで、xxxxxxx.ngrok.com
みたいなURLが発行されます。このURLにアクセスするとローカルマシンの3000番ポートにリクエストが飛んできます。
ではこれができると何が嬉しいか。僕は主に2つのユースケースで使ってします。
アプリ開発
Webサービスのスマートフォンクライアント開発をするとき、ローカルのサーバーでAPIを開発しつつアプリ側を開発することがまあよくあります。
この場合アプリはサーバーありきのため、アプリからサーバーへWebのリクエストが飛びます。大抵の場合はシミュレータから(localhost:3000)とかにアクセスすれば事足りますが、写真撮影してアップロード、みたいなことをやろうとすると、(iOS)では実機を使って動作させるしかありません。
そのようなとき、例えばRailsならpuma-devなどを利用してxip.ioドメインで実機から開発機にアクセスすることは可能です。ですが、ちょとした拍子に名前解決ができなくなってしまい、サーバーの再起動などを頻繁にすることになります。
その点、ngrokを使えば名前解決のあたりが安定します。インターネットを経由する分少し遅くなりますが、限定的な用途だと考えれば受け入れられる程度で、メリットのほうが大きい気がしています。
また、iOSの場合はATSによりhttps
を使わないといけないなど、証明書周りで面倒なことがありがちですが、ngrokでは回避できるはず。多少遅いことを受け入れられるケースであれば使うと◎です。
外部サービス連携
外部のサービスから定期的にリクエストを受け付ける、みたいな機能を作ろうとすると、外部のサービスが投げるリクエストを受け取る必要があります。
例えばGitHubでは、リポジトリのWebhooksにURLを登録しておくと、コミット時やプルリクエスト作成時などのイベントが起こったときに、その内容などなどを登録したURLにPOSTで投げつけてくれます。
そして、そのURLは外部に公開されている必要があります。GitHubにhttps://localhost:3000/github
みたいなURLを登録したところで、自分の開発機にはリクエストは飛んできません。
そこでngrokです。ngrokで発行したURLをwebhookとして登録しておけば、開発機に連携サービスからのリクエストが飛んでくるというわけです。URLには有効期限があり(8時間)、それをすぎると使えません。
お金を払うとサブドメインの部分を固定にしたり任意の文字列に設定したりとできるらしいので、人によっては払う価値が出てくるのではないかと思われます。