RailsアプリケーションをLAN内に公開する

普通にrails serverした場合、デフォルトでlocalhost:3000でリッスンするので、LAN(Local Area Network)内の外部のクライアントからローカルIPではアクセスすることができません。

$ rails server
=> Booting WEBrick
=> Rails 4.2.3 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server

これをLAN内に公開したい場合はどうするか。下記のようにbindingのオプションを付けてその値として0.0.0.0を指定します。

$ rails server --binding=0.0.0.0
=> Booting WEBrick
=> Rails 4.2.3 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server

このコマンドを使うことで同じLAN内にいるクライアントからRailsが起動しているマシンのローカルIPをポート番号とともに(例: 192.168.1.xx:3000)を叩けば、アプリケーションへとアクセス可能になります。

なぜ0.0.0.0?

rails serverコマンドはデフォルトでループバックアドレス、つまりlocalhost(127.0.0.1)にバインドされます。ループバックアドレスは自分自身を指し示すアドレスなのでなので外部からのアクセスは弾かれます。

常に「自分自身」を指すIPアドレスは、当然ですが、他のコンピュータとの通信などには使えません。

ローカルループバックアドレス | IPラーニング

よってデフォルトのrails server起動コマンドではでは外部からのアクセスは遮断されます。

一方、0.0.0.0はどうかというと、0.0.0.0のアドレスには複数の意味があり文脈によって意味が異なっています。今回の場合、ループバックアドレス含む全てのIPアドレスという意味です。ときに0.0.0.0のアドレスはワイルドカードアドレスと言われることもあります。

システムにおけるすべてのインタフェースのすべてのIPアドレス

IPv4アドレス「0.0.0.0」の意味は? | マイナビニュース

本記事で紹介したrails serverのコマンドはbindingオプションによって0.0.0.0に明示的にバインドすることにより、外部からのアクセスも許可しています。

参考