ブログ

ryuzeeによるブログ記事。不定期更新

vagrant-execによるラクラク仮想マシン操作

全国3000万人のVagrantユーザーのみなさんこんにちは。

通常Vagrantを利用している際に仮想マシン内部でコマンドを実行したい場合はvagrant sshコマンドを使ってコマンドを実行します。この際、Vagrantの標準機能を使って、仮想マシンにログインすることなく、コマンドを実行できますが、このvagrant-execプラグインを利用することでさらに簡単に仮想マシン上のコマンドをログインせずに実行できるようになります。 たとえばログの確認や設定状況の確認のような簡単な作業は作業を効率化できます。

インストール方法

インストールは以下のようにコマンドを実行します。
vagrant plugin install vagrant-exec

使い方

使い方はかなり簡単です。 最低限このプラグインで設定しないといけない項目は1つで、コマンド実行時のルートディレクトリの指定が必要です。 以下のようにVagrantfileにconfig.exec.folderの項目を追加します。
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "precise64"
  config.exec.folder = "/var/www/html/app/tmp"
end

その上で、仮想マシンをvagrant upコマンドで起動します。

例えば、仮想マシン上のアプリケーションログが/var/www/html/app/tmp以下にdebug.logという名前で保存されていて、その中身を表示する場合のコマンドは以下のようになります。

vagrant exec cat debug.log

すなわちvagrant execのあとに実際に仮想マシン上で実行したいコマンドの文字列を記述し、起点となる作業ディレクトリはexec.folderで指定したディレクトリになります。

root権限が必要な操作の場合は、Vagrantが利用するsshのユーザーがsudoできるように設定されていれば、

vagrant exec sudo cat /var/log/messages

とか

vagrant exec sudo yum update -y

のようにコマンドを実行することが可能です。

また、別のオプションとして予めコマンド実行時の環境変数を指定することも可能です。その場合は

config.exec.env['FOO'] = 'BAR'

のような形で指定します。これによってコマンドに常に環境変数が適用されます。

なお、補足ですが同じことをVagrantの標準機能でやろうとすると

vagrant ssh -c "cd /var/www/html/app/tmp && cat debug.log"
vagrant ssh -c "sudo yum update -y"

のようにオプションとダブルクォートが必要です。またrootディレクトリは自動的にvagrantで仮想マシンに接続するユーザーのホームディレクトリになっているので、特定のディレクトリでの作業が必要な場合は、cdコマンドと実行したいコマンドを&&でつなげる必要があります。環境変数も同様で自分で設定する必要があります。

機能はこれしかないですが、ちょっとした時に重宝する便利プラグインと言えるでしょう。

アジャイルコーチングやトレーニングを提供しています

株式会社アトラクタでは、アジャイル開発に取り組むチーム向けのコーチングや、認定スクラムマスター研修などの各種トレーニングを提供しています。ぜひお気軽にご相談ください。

詳細はこちら