MacにngrokをインストールしてローカルWebサーバを外から接続できるようにする

#Mac環境
私のMacの環境は以下

```:terminal
$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.12.6
BuildVersion:	16G29
```
#ngrokって？
ポワードフォワーディングのサービスの一つです。ファイアウォール下でもHTTP等をトンネリングして外部からアクセスできるようにするトンネリングサービスです。どちらかというとWebアプリケーション等の開発者向けで、用途としてはローカルで開発中のWebアプリケーション等の動作検証で外部からアクセスしてもらえるようにする、などがあるようです。
![スクリーンショット 2017-08-26 0.23.16.png](https://qiita-image-store.s3.amazonaws.com/0/178016/20d51f94-4b6e-6799-1f54-ab81dcfd7e35.png)
>注意
ポートフォワーディングはネットワークに穴を開ける行為です。 セキュリティ上のリスクを承知したうえで使う必要があります。

#ngrokをダウンロード
[ngrockのサイト](https://ngrok.com/)からOSに合わせた資材をダウンロードします。
![スクリーンショット 2017-08-26 0.24.49.png](https://qiita-image-store.s3.amazonaws.com/0/178016/9d550e8f-0c5b-1ff6-2871-36fd03aac90f.png)
ダウンロードフォルダにzipファイルがダウンロードされました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/a894a107-a248-b670-9efc-e040c40f46cf.png)

unzipするとHOMEディレクトリに解凍されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/91cc75c6-94c3-c122-b7e0-58b9bafea20d.png)

```:terminal
$ unzip ~/Downloads/ngrok-stable-darwin-amd64.zip 
Archive:  /Users/take/Downloads/ngrok-stable-darwin-amd64.zip
  inflating: ngrok             
```

#ヘルプコマンドで動作テスト
helpコマンドで動作確認します。

```:terminal
$ ./ngrok help
NAME:
   ngrok - tunnel local ports to public URLs and inspect traffic

DESCRIPTION:
    ngrok exposes local networked services behinds NATs and firewalls to the
    public internet over a secure tunnel. Share local websites, build/test
    webhook consumers and self-host personal services.
    Detailed help for each command is available with 'ngrok help <command>'.
    Open http://localhost:4040 for ngrok's web interface to inspect traffic.

EXAMPLES:
    ngrok http 80                    # secure public URL for port 80 web server
    ngrok http -subdomain=baz 8080   # port 8080 available at baz.ngrok.io
    ngrok http foo.dev:80            # tunnel to host:port instead of localhost
    ngrok tcp 22                     # tunnel arbitrary TCP traffic to port 22
    ngrok tls -hostname=foo.com 443  # TLS traffic for foo.com to port 443
    ngrok start foo bar baz          # start tunnels from the configuration file

VERSION:
   2.2.8

AUTHOR:
  inconshreveable - <alan@ngrok.com>

COMMANDS:
   authtoken	save authtoken to configuration file
   credits	prints author and licensing information
   http		start an HTTP tunnel
   start	start tunnels by name from the configuration file
   tcp		start a TCP tunnel
   tls		start a TLS tunnel
   update	update ngrok to the latest version
   version	print the version string
   help		Shows a list of commands or help for one command
```

#使ってみる
早速使ってみます

```:terminal
$ ./ngrok http 80
```
この状態でインターネットにつながる端末ならどこからでも `http://fee58745.ngrok.io` にアクセスすればローカルの80番につながります。お手軽ですね。サブドメインの `fee58745` は動かすたびにランダムな文字列が設定されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/7d96eb73-2947-6968-0d89-05a2cce8780f.png)

#PCとユーザアカウントを紐付ける
ngrok.comにサインアップします
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/6ee8b241-03a3-8f1f-1972-f7391a2d80ea.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/e462dd78-e72f-dd8c-ab30-671f3d19d4d9.png)

するとトークンが発行されるので、画面に指示されたとおりにコマンドを実行します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/f4f35000-bdc7-1aa2-e368-bbfc3d5d20be.png)

```:terminal
$ ./ngrok authtoken xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Authtoken saved to configuration file: /Users/take/.ngrok2/ngrok.yml
```

#動作確認
再度80番ポートで使ってみます

```:terminal
$ ./ngrok http 80
```
アカウント名が表示されるようになりましたね
![スクリーンショット 2017-08-26 21.27.18.png](https://qiita-image-store.s3.amazonaws.com/0/178016/ae3736cf-2843-3aac-9c05-c3ec48577a30.png)

ブラウザからアクセスしてみると、エラー画面になります。これはトンネリング通信はできていますが、私のPC自体80番ポートを使ったhttps通信を行うアプリを起動していないためです。ポワードフォワーディングの仕組み上は問題なしです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/178016/128949c5-b85e-0c75-b06c-d965383d88ae.png)

以上です。ngrokは1.xバージョンではサブアドレスの指定が無料でできましたが2.xバージョンでは有料になってます。動作テスト程度でしたら無料でOKかと思います。