Vagrantを使ってElixirをシンプルに導入してみる

新しい言語を使ってみるときって、環境が汚れるのが気になりますよね。ならない?なるってことで・・・。

私はにわかGentoo使いで、わりと環境にはなんでも突っ込んでみる質なのですが、それで導入して使わなくなったものが(多分)やたらあります。ツールとかもしかり。
言語の場合、学習が終わったらしばらく使わない、とかも普通にありますし、単純に興味だけで触ってみたい、ということもあります。

そういう時に便利なのがVagrantだろう、ということで、Gentoo環境でVagrantの導入 & BoxにElixirの導入、までをやってみました。Vagrantのもっとイカした使いかたとかは他の方の記事を読めばいくらでもありそうなので、ここでは割愛です。

Vagrantの導入

GentooでのVagrantの導入は、いつものとおりemergeからインストールです。

sudo emerge vagrant

ただ、結構な数について、package.accept_keywordsに追加しないとならないと思います。しなくてもいい人もいるかもしれません。

話は変わりますが、以前から、/etc/portage/package.*を編集することに対して、なんかいい方法は無いもんか、と思っていましたが、flaggieというものがそれをやってくれるそうです。使ってみましたが結構楽になります。よろしければ是非。

話は戻って、vagrantの導入ですが、私はffi-1.1.5がどうしても入ってくれませんでした・・・。rubygems/builderが読み取れない、ということでしたが、gemsの場所が悪かったんでしょうか。しばらくrubyやってないんでよくわからなくなってきましたが・・・。とりあえずffi-1.4.0を導入して事なきを得ました。

さて、導入できたら、Vagrant公式ページがいいかんじのチュートリアルになってますので、http://docs.vagrantup.com/v2/getting-started から、基本を学びます。私もついでに学びます。
ここでは特にこだわりは無いので、precise32をそのまま使います。VirtualBoxは事前に入れておかないとこの先進めませんので、入れていない方は是非どうぞ。カーネルの再コンパイルが必要になる場合があります。

mkdir -p vagrant/elixir
vagrant init
vagrant box add precise32 http://files.vagrantup.com/precise32.box
vagrant up 

事前にvboxusersグループに自身を追加して〜などやっておく必要があります。あとVBoxManageへのパス通しも。VBoxManageについては、vagrantもアドバイスをくれるので、わかりやすいです。

Provisioningの設定

Vagrantでは、起動時に自動的にProvisioningしてくれる機能がありますので、これを利用します。Chefとかを利用することもできるようですが、そこまで大掛りである必要は無いので、そのままshellを使います。

ここまでで、Vagrantfileは次のようになります。

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  # Every Vagrant virtual environment requires a box to build off of.
  config.vm.box = "precise32"
  config.vm.provision :shell, :path => "bootstrap.sh"
end

bootstrap.shが、provisioningするときに利用されるshellになります。今回はelixirを使いたいので、以下のような中身にしました。

#!/usr/bin/env bash
echo "deb http://binaries.erlang-solutions.com/debian raring contrib" >> /etc/apt/sources.list
wget -O - http://binaries.erlang-solutions.com/debian/erlang_solutions.asc | sudo apt-key add -

apt-get update
apt-get install make
apt-get install -y esl-erlang

mkdir work
cd work
wget https://github.com/elixir-lang/elixir/archive/v0.10.3.tar.gz
tar xf v0.10.3.tar.gz
cd elixir-0.10.3
make install

これでelixirが使えるようになりました。いくつか外部に依存していますが、これはしょうがないでしょう。

Vagrant便利

気にいらなかったり失敗したら、vagrant destroyすれば無かったことにできますし、またvagrant upすればすぐに立ち上がります。多少マシンスペックがないと自在に使えないのが玉に瑕ではありますが、環境構築の容易さは半端ないです。

ちなみにデフォルトの状態だと、/vagrantが、Vagrantfileを置いているディレクトリと同期したディレクトリになります。下手に消すと泣くので注意。

saharaとか他の便利なプラグインもあるようなので、使っていきたいと思います。が、rubygems/formatが見付からないとかエラーが出て・・・。