Vagrantのオススメ便利プラグイン

# Vagrantのプラグインは素晴らしい
最近までVagrant-berkshelfぐらいしか使ったことなかったのですが、vagrant-omnibus使ってみたらすごく便利だったので他にも便利プラグインがないか調べてみたところ結構いいのがありました。

とりあえず公式が列挙してるプラグイン一覧 つ [Available Vagrant Plugins · mitchellh/vagrant Wiki](https://github.com/mitchellh/vagrant/wiki/Available-Vagrant-Plugins)

その中でも特に気に入って使ってる奴を紹介します。

# 使用中のお気に入りプラグイン5選

## [vagrant-lxc](https://github.com/fgrehm/vagrant-lxc)
バックエンドにVirtualBoxではなくlxcを使ってくれるようになるプラグイン。

時代は仮想マシンレベルでの仮想化ではなくOSレベルでの仮想化です。
ホストOSがubuntu/debian系限定という縛りこそありますが、それさえ満たせばVirtualBoxに比べ劇的に高速・少メモリな環境が手に入ります。redhat系ならopenvzらしいですがそちらは使ったことないです。

## [vagrant-berkshelf](https://github.com/berkshelf/vagrant-berkshelf)
cookbookを自動的にダウンロードしてくれるberkshelfをVagrant up時などに自動で実行してくれるプラグイン

berkshelf、かなり早い段階から使ってたのですが正直イマイチ制御できてないです。とりあえず今は自動でcookbookをダウンロードしてくれるプラグインとして使用してます。
ローカルのcookbookを扱う方法がよくわかってなかったんですが最近やっと方法を見つけたのでこれで捗りそう。（あと個人的にcookbook_pathは上書きするのにBerksfileへ書いたchefをrun_listへ自動追加してくれないのが不満です。実はできるのかな？）

## [vagrant-omnibus](https://github.com/schisamo/vagrant-omnibus)
ゲストOSに大して自動的にchefをインストールしてくれるプラグイン。

よくわからない名前に反してすごく便利。
vagrant用のboxって一から作るのは面倒くさいので（置く場所にも困るし）よくネット上で公開されてるboxを使用するのですが、そういったboxはchefが最新版じゃなかったりそもそもchefが入ってなかったりします。
そのようなboxに大して自動的にchefをインストールしてくれるこの拡張はboxの属性を気にする必要がなくなるためboxの選択肢が非常に広がります。

## [vagrant-aws](https://github.com/mitchellh/vagrant-aws)
awsをバックエンドとして使えるプラグイン

awsを使うときに使用しました。が、今はaws使ってないので使用しておらず。awsろくに使用せず最初からvagrant経由で使用しようとしたのでちょっとよくわからん感あったです。
まあでもたぶんawsをvagrant経由以外で使用することはないかな、これ便利だし。

## [vagrant-hostsupdater](https://github.com/cogitatio/vagrant-hostsupdater)
ホストOSの/etc/hostsへゲストOSのipとホスト名を自動的に書いてくれるプラグイン

個人的には一番これを一番知ってほしいです。
ホストOSからゲストOSへのアクセスってport forwardingでするのが一番簡単なのですが、実際のところ80番ポート以外にもアクセスしたい場合は多いです。そこでprivate network設定をするのですが、毎回hostsへipアドレスを追加するのは非常に億劫なのでやりたくありません(ホスト名も人間が入力する必要がありますし)。そこでこのプラグインはvagrant up / haltに合わせて自動的に/etc/hostsへゲストOSの記述を追加/削除してくれます。

# 他に気になってるプラグイン
また今度試したらここへ詳しい説明を追記するかも

## [vagrant-dns](https://github.com/BerlinVagrant/vagrant-dns)
ゲストOSをDNSへ自動追加してくれるっぽいプラグイン。

たぶんhostsファイルへ書くよりベターな方法を提供してくれるのだと思うんですが、DNS関連がさっぱりなので一旦pending

## [/etc/hosts系プラグイン3種](https://github.com/mitchellh/vagrant/wiki/Available-Vagrant-Plugins#etchosts-approach)

hostsupdaterすごい便利だなーと思ったら似たようなプラグインが3つありました。しかも2つはhostsupdaterより☆が多いです。
機能を比較しつつよりメジャーな方へ移行したいんですが、現状あんまりhostsupdaterで不満がないので優先度低め。

## [docker-provider](https://github.com/fgrehm/docker-provider)
docker(lxcをラップした仮想OSホニャララ)をバックエンドとして使えるプラグイン

vagrant-lxcと本質的に同じことをするプラグイン（のはず）ですが、lxcはどうにもコマンドが複雑すぎて使いづらい、あとdocker自体がopenvzなどlxc以外も含めた包括的なコンテナになるらしいので、将来はvagrant-lxcよりこっちが主流になるかも。ただ今はまだvagrant-lxcの1/10の☆の量なのでもっと評価が高まるまで待ちます（docker自体もまだ開発が非常に高速ですし）

## [sahara](https://github.com/jedi4ever/sahara)
仮想OSのバージョニングが捗るプラグイン

たしか[Vagrant - naoyaのはてなダイアリー](http://d.hatena.ne.jp/naoya/20130205/1360062070)さんところ経由で知ったプラグイン。しかしVirtualBoxのイメージのバージョニングはサイズ的な意味でコストが高いし、そもそもVirtualBoxのバージョニングは動作が不安定（個人観測域のみの話かも）、その上バージョニングしてる暇あったらdestory/upしたほうがいいということで殆ど使用しませんでした。
vagrant-lxcと一緒に使えるかわかりませんが、lxcならバージョニングのコストは非常に低そうなので使えるなら再チャレンジするのは悪くないかも。

## [vagrant-pristine](https://github.com/fgrehm/vagrant-pristine)
vagrant destroy && vagrant upをvagrant pristineコマンド一発でできるようになるプラグイン

いいんじゃないかな、immutable infrastructure的にはhaltじゃなくてdestroyだろうし。

## [vagrant-exec](https://github.com/p0deje/vagrant-exec)
ホストOSからゲストOS内でのコマンド実行するときに便利なプラグイン

[vagrant-execによるラクラク仮想マシン操作 | Ryuzee.com](http://www.ryuzee.com/contents/blog/6776)で教えてもらったプラグイン。簡単に動作を説明すればsudoような雰囲気でvagrant内でコマンドを実行できます。
ただこれも職場のPC環境上ほとんど使ってないです(ホストOSがwindowsであるため)

## [vagrant-global-status](https://github.com/fgrehm/vagrant-global-status)
Vagrantが作成した仮想OSを横断的に全表示してくれるプラグイン。

これもryuzeeさんところ経由。割とあれどこのVagrantfileから作られたイメージだっけ？ってなりやすいVagrantを横断的に可視化してくれるプラグイン。ただこれも今まで複数の仮想OSを取り回すことが少なかったので活躍の機会はなかったです。

[2014-06-18 Update] どうやら最新版のVagrantではデフォルトでvagrant global-statusサブコマンドが実装されるようになったそうで、このプラグインは不要になりました。

# 今後欲しいプラグイン
今のVagrantはboxファイルの更新に対応していません。たとえばbox側の構成を変更した場合、現状ではリモート上のboxファイルを更新しようがVagrantfile内のbox urlを変更しようが再ダウンロードしてくれないのです。これはvagrantにboxが登録されたままだからで、現状だとvagrant box remove XXXXで一度削除してやる必要があります。
これで何度か痛い目を見ているので、boxファイルの更新があるかどうかを自動でチェックして更新があれば再ダウンロードしてくれるプラグインがほしいです（自分で作れよって話ですが）。

[2014-12-26 Update] いつのまにか本家Vagrantの設定で```config.vm.box_check_update```として[実装されてました](https://docs.vagrantup.com/v2/vagrantfile/machine_settings.html)。わーい