トレタアドベントカレンダー11日目です。
アドベントカレンダーを書くのは二年ぶりです。そのときは、家庭を支える技術アドベントカレンダーで、いまから帰るよという連絡をYOでするサービスをつくった話を書きました。いつのまにかあれから二年たちますが、今もほぼ毎日YOでkaeruyoしています。ここ最近AmazonのIoTボタンが盛り上がってますが、ボタンを押すだけの操作はYOに通じるものがありますね。YOのAPIで遊んでみるもおすすめです。
今回は最近知ったWeb開発のTipsを紹介しようと思います。VagrantやDockerを使ってウェブアプリを開発してるんですが、いつくかのアプリ同時にたときに、複数のVMを立ち上げたりすると、そのときポートフォワードしてるポートが被ってこけたり、別のポートに設定しなおしたりしていると、どのVMがどのポートにポートフォワードされてるのか分からなくなってしまい困ってました。最近いい解決策があるのを知ったので紹介します。
そもそもポートフォワードしてるのが面倒もの元凶で、たんにそれぞれのサーバにアクセスすればよいだけでした。IPだと結局どれがどれだかわからなくなるので、DNSを使って名前でアクセスできるようにします。ふつうにDNSで名前をふっていのはけっこう面倒ですが、mDNS(Multicast DNS )という仕組みを使えば、かんたんに済みます。
Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.hostname = 'vm1'
config.vm.network "private_network", type: "dhcp"
config.vm.provision "shell", inline: 'apt-get update && apt-get install -y avahi-daemon'
end
vm1でWebサーバを立ち上げてアクセスできるか確認します。
echo '<html><body style="font-size:15em">VM1 da Yo</body></html>' > index.html
ruby -run -e httpd . -p 3000
ブラウザでhttp://vm1.local:3000/にアクセスしてみます。
みれました。
あとは別のVMを使うときには、別のhostnameをふってあげればポートフォワード地獄からおさらばできます。avahi-daemonの設定で別の名前にしたり、ポートを変えたりとかもできます。
手元の環境のホストマシンはMacですが、Windowsの場合iTunes(Bonjour)をインストールすればよいらしいのと、LLMNRというmDNSに似た別の仕組みもあるそうです。
あとDockerの場合も書きたかったですが、ちょっとまだ調査中なので、また別の機会に。
参考URL
Multicast DNS http://www.multicastdns.org
mDNS を使いローカルマシン内の仮想環境に接続する http://hateda.hatenadiary.jp/entry/mdns-and-vagrant