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 がオススメです
- 気軽に作ったり、壊したり(捨てたり)できます
- 仮想マシンを使うので、環境依存の心配が減ります
- 覚えるべきコマンドは少しだけです
開発環境の構築で困っていた人や、これから開発環境を用意する人の参考になればうれしいです!
プロビジョニング・スクリプトを書く部分から開発環境の構築が可能な、弊社のフロントエンド系エンジニアが、あなたのサービス開発をお手伝いすることができます。お気軽にお問い合わせください!