Ruby on Rails プロジェクトの開発環境を Vagrant で作る


こんにちは。 Gaji-Labo 衛生班の和田です。
Gaji-Labo Advent Calendar 2015、4日目の記事です。
Advent Calendar もいいけど、大掃除もね!

はじめに

※ このエントリーは「開発環境の構築になじみがない」「開発環境を構築・管理する自信がない」という人(普段 Rails をメインで触らない人たち)を対象に書いています。

弊社では、 Ruby on Rails を使用しているプロジェクトが多く、同時に複数の開発環境が必要です。

複数環境を実現する方法は色々あります。
また、特に複数環境を意識せずにローカル開発をしていても、特別、問題が発生するわけではありません。

しかし、時々、ちょっとしたミスから開発環境を壊してしまうことがあります。
また、使用中の PC が物理的に壊れてしまうことも考えられますよね。

そんな時、気軽に壊したり、作り直したりできる仮想環境を利用していると、ちょっとした保険になったり、しばらく触っていなかった、古い環境を再現することが簡単になります。

そこで、私は、 Vagrant をオススメしています。

Vagrant とは?

Vagrant とは、 VirtualBox など、仮想マシンを構築してくれるアプリケーションで、仮想マシンの構築と開発・テスト環境の構築をまとめて行える支援ツールです。
ご参考:Why Vagrant?

Vagrant のどこが便利なのか

  • gulp, Grunt などを利用している人なら、使いこなせる程度のコマンド
  • Vagrant や VirtualBox はパッケージをダウンロードしてインストールすれば使える
  • 作ったり、捨てたりが簡単
  • (やり方にもよりますが)少ないファイルで環境を保持できる

Vagrant で良く使うコマンド

「便利と言われても、コマンドでしょ……」と思われたかもしれません。
安心してくださいっ! 簡単ですよ!

  • vagrant up : 起動
  • vagrant halt : シャットダウン
  • vagrant suspend : 一時停止
  • vagrant resume : 一時停止を解除
  • vagrant reload : 再起動
  • vagrant provision : プロビジョニングを実行
  • vagrant ssh : SSH で仮想マシンに接続
  • vagrant destroy : 仮想マシンを削除

豆知識
vagrant up , vagrant halt よりも、 vagrant suspend , vagrant resume を使ったほうが、起動が速くて良いです。

作ったり、捨てたり

  • 作る: vagrant up
  • 捨てる: vagrant destroy

これだけです。

使い終わった開発環境をアーカイブしておきたい時は、 Vagrantfile と、それに付随するシェルスクリプト等を保存しておけば良く、仮想マシン自体は削除してしまってかまいません。

Ruby on Rails の開発環境を作る

あなたのチームのエンジニアさんが、プロビジョニング・スクリプトを書いてくれるなら、あなたがやることは、 Vagrant と VirtualBox(など)をインストールして、 vagrant up するだけ!
もし、それが出来ない場合も、 railsbox のようなツールで簡単に実現できます(かもしれません)。

Ruby on Rails の開発環境が壊れるパターン

(Vagrant と直接関係ないですが)開発環境は、以下のようなパターンで壊れがちです。

  • bundle install が上手くいかない
  • rake db:migrate が上手くいかない

いずれのパターンも、自分では解決できないことが多いかもしれません。
そんな時は、一度、仮想マシン壊してしまって、あなたのチームのエンジニアさんに、プロビジョニング・スクリプトやそれに付随するファイルを修正してもらいましょう。

そして、そのファイルを使って、再び、 vagrant up する。
これだけで、(多くの場合は)動作するようになるはずです。

また、(Git などの)ブランチ間でデータベースの構造が異なるような場合は、スナップショットを使ってみるのも良いかもしれません。
スナップショットは、 Vagrant のプラグインを利用して、コマンドから操作することも可能ですし、 VirtualBox などの GUI で操作することも可能です。

Ruby on Rails なプロジェクトで日常的にやること

ここまでは、開発環境の構築が簡単に行えるということを書きました。
しかし、開発環境があるだけでは、作業を行うことができません。

ここでは、その他に必要な知識を少しだけご紹介します(プロジェクトによって違うはずなので、「これだけ覚えていれば大丈夫」ということではありません)。

  • Git(など)の操作
  • bundle install で依存ライブラリの管理
  • rake db:migrate でデータベースの更新
  • rails s サーバーの起動(開発環境によって、使用するコマンドは変わります)

エイリアスを書いておく

慣れない間は、「 vagrant …… 何だっけ?」「rails s ……うーん、オプション忘れた……」ということもあるかもしれません。

そんな時は、エイリアスを書いておくと良いかもしれません。
仮想マシン内でのエイリアスについては、あらかじめ、プロビジョニングに加えていただくと良いと思います。

私の場合は、プロジェクトごとに、以下の例のようなエイリアスを用意して、Alfred から > _gaji のように呼び出しています。

例: ~/.zshrc

alias gaji='cd ~/Projects/gaji'
alias _gaji='cd ~/Projects/gaji;vagrant resume;vagrant ssh'
alias gaji_='cd ~/Projects/gaji;vagrant suspend'

~/.zshrc は環境によって ~/.bashrc などに読み替えてください。

まとめ

このエントリーでお伝えしたかったポイントは以下の通りです。

  • 自信がないからこそ、 Vagrant がオススメです
  • 気軽に作ったり、壊したり(捨てたり)できます
  • 仮想マシンを使うので、環境依存の心配が減ります
  • 覚えるべきコマンドは少しだけです

開発環境の構築で困っていた人や、これから開発環境を用意する人の参考になればうれしいです!


プロビジョニング・スクリプトを書く部分から開発環境の構築が可能な、弊社のフロントエンド系エンジニアが、あなたのサービス開発をお手伝いすることができます。お気軽にお問い合わせください!

関連リンク


投稿者 Gaji-Labo Staff

Gaji-Laboの社内デジタル環境でいろいろなお手伝いをしているがじ専務&じら常務。みんなのシリーズ記事をまとめたり、卒業したスタッフの過去記事を記録したり、Twitterをやったりしています。