THINKING MEGANE

pecoでVagrant操作を便利にする

開発環境で利用するVagrantのVMの数が増えてきたのでpecoでVM選んで起動や停止をできるようにしてみました。

vagrant-peco

こんな感じで利用します。

$ vagrant-peco up

うれしさ

  • pecoでVMを選択できる。Vagrantfileのあるディレクトリに移動しなくてよい
  • VMを複数選択して一括で起動・停止できる
  • 通常のvagrant global-statusよりも高速に表示
  • direnvとの連携

インストール

Vagrant1.6以降でつくったVMとvagrant-pecovagrant-global-statusが必要です。

# vagrant-global-statusをインストール
$ go get github.com/monochromegane/vagrant-global-status/...

# vagrant-pecoをインストール
$ cd [PATH] # PATHの通ったディレクトリ
$ curl -O https://raw.githubusercontent.com/monochromegane/vagrant-peco/master/vagrant-peco
$ chmod +x ./vagrant-peco

仕組み

vagrant global-status

Vagrantの1.6からglobal-statusプラグインが取り込まれ、一度起動したVMにIDが割り振られるようになりました。

IDはvagrant global-statusコマンドで確認します。

$ vagrant global-status
id       name          provider   state    directory
-------------------------------------------------------------------------------
14c9626  cross_compile virtualbox poweroff /Users/miyakey/Documents/vm/golang
dffc2a5  develop       virtualbox poweroff /Users/miyakey/Documents/vm/golang
ae3968b  web1          virtualbox poweroff /Users/miyakey/Documents/vm/dev
825680e  web2          virtualbox poweroff /Users/miyakey/Documents/vm/dev
e0aa5e9  db            virtualbox poweroff /Users/miyakey/Documents/vm/dev

このIDを使うことでVagrantfileのあるディレクトリに移動することなく任意のVMを操作できます。

$ vagrant up 14c9626

pecoと連携する

毎度、IDを選ぶのは面倒なので peco で選べるようにします。

先に公開されている@gongoさんのpecrantでほぼばっちりです。

ただ、自分の環境だとvagrant global-statusの起動が少し遅く感じたのと、Vagarntディレクトリごとのdirenv定義を使いたかったので、以下のようにして解決しています。

vagrant-global-status

vagrant global-statusの起動が遅い問題を解決するためにつくりました。
同コマンドが参照するファイルを直接解析して結果を出力しています。ちょっとお行儀が悪いです。

自分の環境だと、1秒弱短縮できました。さくさく起動します。

$ time vagrant global-status
vagrant global-status  0.97s user 0.09s system 99% cpu 1.072 total

$ time vagrant-global-status
vagrant-global-status  0.00s user 0.00s system 68% cpu 0.007 total # fast!!

vagrant-peco

Vagrant起動時にdirenvを適用したかったのでつくりました。
vagrant-global-statusで選択したIDで操作する前に、該当ディレクトリの.envrcを読み込みます。

Vagrantfileはプロジェクト共通でマウントするソースファイルのディレクトリは個人ごとに環境変数で指定するような場合に都合がよいです。


vagrant-pecoは、だいぶ自分の環境にあわせた感じになってしまいましたが、VagrantのVMが増えてきた方、pecrant含めて、使ってみてはどうでしょうか。

いや〜、peco、便利。

このエントリーをはてなブックマークに追加