動機
Webアプリケーションの開発を請けていると、途中経過などお客さんに動作を見てもらいたいときがある。
そういうときのためにVPS契約しておくとか、あるいはAWSなどIaaSをそのときだけ立ち上げてデプロイして~とやるのが王道だと思う。
ただ開発自体をローカル環境でやっていると、いちいちサーバー立ち上げるとかデプロイするためにアップロードするとか面倒くさい。。
その都度手作業するのを自動化するためにCI/CDを組むというのも良いのだろうけど、本番サービスでもないし、テスト環境ですらない、レビュー環境を必要なときだけ作るためだけにそれをするのもイマイチモチベーションが上がらない。
そんな人達のために存在するのがngrok。
こいつは超絶スグレモノ。
ngrok
準備はngrokにアカウント登録して、ngrok.exe(Windowsの場合)をダウンロードして、コマンドプロンプトから起動するだけ。
例えば、僕は今仕事でSpring Bootを使ったWebアプリケーションの開発をしているので、
http://localhost:8080
でデバッグしている。
この環境をそのままインターネットからアクセスできるようにするには以下のコマンドを打つ。
> ngrok.exe http 8080 --region jp
これはローカルの8080ポートをhttp(s)でアクセスできるようにする、という意味。
最後の–region jpはなくても動くけど、アメリカ経由のアクセスになるので物理的な距離によるネットワーク遅延があるため、付けた方がスピードが速い。
コマンドを叩くと以下のように表示される。
ngrok by @inconshreveable (Ctrl+C to quit)
Session Status online
Account chaki (Plan: Free)
Version 2.3.35
Region Japan (jp)
Web Interface http://127.0.0.1:4040
Forwarding http://cb3d6e32.jp.ngrok.io -> http://localhost:8080
Forwarding https://cb3d6e32.jp.ngrok.io -> http://localhost:8080
Connections ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00
これを立ち上げている限りは、Forwardingに記載されている
http(s)://xxxxxxxx.jp.ngrok.io
にアクセスすることで直接ローカルの8080番にアクセスできるようになっている。
このURLをお客さんに教えて見てもらうことができる。
(xxxxxxxxの部分はngrokを起動する毎にランダムな文字列が付与されるので、都度変わる)
確認してもらうタイミングを終えたらCtrl+Cやコマンドプロンプトを閉じてシャットダウンしてしまえば良い。
しかもSSLにも対応しているし、パラメータのオプションでベーシック認証をかけることだって可能。
日本リージョンにだって対応しているし、無料でここまでできるとは…まさに至れり尽くせり。最高か!
すごく便利…だけど不満もある
これまで書いた通りのことがngrokを使って無料でできるのは素晴らしいことだ。
また、外部に公開するタイミングが少なければこれで十分だと思う。
ただ、僕のケースでは
- お客さんにURLを告知するものの、いつ見てもらえるかわからないので、ある程度の期間立ち上げっぱなしにしておく必要がある
- その間にOSアップデートなどによる再起動がかかることがあると、ngrokのURLが変わってしまい、その度にURL変更の通知をしないといけない
特にランダムに変わるURLが一番のネックだった。

ngrokの有償プランにアップグレードすれば、カスタムサブドメインが使えるようになって、この不満から解消されるのだろうけど…
これだけのために毎月約500円を支払うのはなぁ…正直毎回URL伝える作業をガマンして続けようかなと思うレベル。
コメント