ngrok
ngrok - secure introspectable tunnels to localhost
ローカルWebサーバを簡単にインターネットに公開するためのアプリケーションを紹介します。
まえがき
私は、Pebble というスマートウォッチ用のアプリを作っています。
PebbleはiPhoneやAndroidと接続し、Pebble上のアプリの設定をスマートフォン上のアプリから変更するのですが(ややこしい)、設定画面をHTMLで書いて外部サーバに置かなければならないという制約があります。
さらに、開発中もスマートフォンアプリ経由で設定画面を見る必要があるので、インターネットに公開されたサーバ上で開発するのが望ましいです。
Webサーバは Caddy が解決してくれましたが、私はインターネットに公開するサーバを持っていないので途方に暮れていました。
ngrokとは
ngrokはローカルWebサーバを簡単にインターネットに公開するためのアプリケーションです。
以下の特徴があります。
設定無しでNATを超える
ローカルサーバは通常ファイアウォールの内側に居るため、ローカルサーバからインターネットにアクセスできても、インターネットからローカルサーバへはアクセスできません。
これを解決する技術がいわゆる「NAT超え」という技術です。
ngrokはローカルサーバが置かれた環境により適切な手段でNATを超えてくれます。
使う側は何も考えず
$ ngrok http 80
するだけです。
これで、インターネットからローカルの80ポートで待機しているWebサーバにアクセスできます。
サブドメイン指定可能
ngrokを起動すると、インターネットからローカルサーバへアクセスするためのURLが与えら得ます。しかし、それは http://1234abcd.ngrok.io
などのランダムな文字列となります。
しかも接続するたびにURLが変わるのでなかなか使い勝手が悪いです。
そのために独自のサブドメインを指定する機能があります。
$ ngrok http 80 -subdomain myapp
これで、 http://myapp.ngrok.io/
に公開できます。
※サブドメインを指定するためにはユーザー登録と認証が必要です。
HTTPSに対応
ngrokで公開したWebサーバには http://
でも https://
でもアクセスできます。
ローカルサーバが http 専用の場合でも(今どき無いと思いますが、開発用サーバだとhttpsの設定を行うのも面倒だったりするので)、セキュアにアクセス可能です。
アクセス制限に対応
開発中のWebアプリなので勝手にアクセスされては困る。ランダムなサブドメインだとリスクが少ないけど、わかりやすいサブドメインを付けたい。という場合はアクセス制限を書けることが出来ます。
$ ngrok http -auth "user:password" 80
Digest認証でアクセス制限が掛かるようです。
ただ、私の環境では「400 Bad Request」エラーでアクセスできませんでした。
提供方式
以下のプラットフォーム向けにバイナリが提供されています。
導入方法
Ubuntuに導入する方法です。 バイナリをダウンロードしてZIPを解凍するだけなので、他のプラットフォームでも同じような手順で導入できるはずです。
インストール
以下を適当なファイルに保存して実行するとインストールできます。
2016-06-16日現在の最新は 2.0.19
でしたが、新しいバージョンがリリースされている場合は version
変数の値を変更してください。
#!/bin/bash # アプリ名 app="ngrok" # バージョン version="2.0.19" # インストールパス libpath="/opt/${app}/${version}/" # 実行ファイルのパス binpath="/usr/local/bin/" # インストール先のディレクトリを作成 sudo mkdir -p $libpath # ダウンロード cd $libpath sudo wget "https://dl.ngrok.com/ngrok_${version}_linux_amd64.zip" # ダウンロードしたファイルを解凍 sudo unzip "ngrok_${version}_linux_amd64.zip" # 実行ファイルへのシンボリックリンクを作成 cd $binpath sudo ln -s "${libpath}/${app}"
ユーザー登録と認証
サブドメインを指定するためには認証が必要です。
ngrokのログイン画面 からログインすると、認証キーをもらえます。
これを実行すると認証が完了し、好きなサブドメイン名を指定することができます。
$ ngrok authtoken <認証キー>
あとがき
Caddyとngrokは「Pebbleアプリの設定画面を作る」という非常にニッチな受容を満たしてくれました。 Pebbleアプリ開発については、このブログでぼちぼち書いて行こうと思っています。
各社スマートウォッチをリリースしていますが、Pebble は歴史が長いだけあって使い勝手が良いですし、開発者にとっては「少ないリソースでいかに魅せるか」という点で腕の見せどころが多い面白いガジェットです。
そろそろ、新しくカラー画面に対応した Pebble Time がリリースされるので、よろしければ購入してみたらいかがでしょう。
Pebble Time スマートウォッチ 腕時計 (レッド) [並行輸入品]
- 出版社/メーカー: Pebble
- メディア: 時計
- この商品を含むブログを見る
こちらは古い白黒のやつ。 見た目の違いで2種類あります(性能は同じ)。
Pebble Steel (Brushed Stainless)
- 出版社/メーカー: Pebble
- メディア: Personal Computers
- この商品を含むブログを見る
Pebble Smartwatch for iPhone and Android ( ブラック / レッド ) 並行輸入品
- 出版社/メーカー: pebble
- メディア: Wireless Phone Accessory
- この商品を含むブログを見る