swdyh

複数の仮想環境を立ち上げてWeb開発するときに便利なmDNS

2016-12-11 00:48:00

トレタアドベントカレンダー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