VirtualBoxやVagrantを用いたRails開発環境の構築方法(前編)

実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング
顧客管理システムの構築を体験しながら、Railsアプリケーション開発のノウハウを習得!
本記事では、VirtualBoxとVagrantを用いて仮想マシン上にRailsの開発環境を整える手順を解説します。仮想マシンのOSにはCentOSまたはUbuntu Serverを使用します。また、データベース管理システムとしてMySQLとPostgreSQLを仮想マシン上にインストールします。
仮想マシンを利用したRails開発
本書ではCentOSまたはUbuntu ServerをインストールしたVirtualBox仮想マシンを、Railsの開発環境として用います。仮想マシンの構築にはVagrantというユーティリティを利用すると便利です。
Rails開発で仮想マシンを使う理由
単なる演習用のサンプルではない“本物”のRailsアプリケーションを開発しようとするとき、私たちエンジニアを悩ませる問題があります。それは、開発用のマシン(作業マシン)と実運用を行うマシン(プロダクションマシン)の環境が異なることです。ここで言う「環境」とは、OSの種類やバージョン、あるいはOS上で動くソフトウェアやライブラリの種類やバージョンを指しています。
Ruby on Rails自体はWindowsでもOS XでもLinuxでも動作するように設計されています。しかし、私たちがRailsを拡張するために導入するGemパッケージは必ずしもそうではありません。また、仮に動いたとしても特定の環境では振る舞いが微妙に異なったり、不具合が出たりすることがあります。
この問題の単純な解決法は、作業マシンとプロダクションマシンの環境を一致させることです。あなたのPCのOSをプロダクションマシンと同じ(あるいはほぼ同等の)OSで置き換えるか、あるいはプロダクションマシンにログインしてVimやEmacsで直接ソースコードを書き換えながら開発するのです。
しかし、これは言うほど簡単なことではありません。PCをRails開発以外の用途(メールの送受信、動画の再生、表計算など)にも使うのであれば、気軽にOSの入れ替えなどできません。また、GUIを持つテキストエディタや統合開発環境(IDE)での開発に慣れた人は、VimやEmacsでのソースコード編集に不満を抱くことでしょう。
そこで現れるのが仮想マシンというオプションです。仮にあなたのPCがWindowsマシンであったとします(Macであっても同じことですが)。Windows上に仮想マシンを構築し、仮想マシンにCentOSやUbuntu ServerといったLinuxベースのServer OSをインストールするのです(図1)。

開発中のRailsアプリケーションは仮想マシン上で動作させます。そして、Windows上のWebブラウザからRailsアプリケーションにアクセスして動作を確認します。他方、Railsアプリケーションのソースコードは、後述する「共有フォルダ」の機能によって、Windows上で開いて編集します。こうすれば、使い慣れたテキストエディタやIDEを使い続けながら、プロダクションマシンと同等の環境下でRailsアプリケーションの開発が行えることになります。
VirtualBoxとは
Oracle VM VirtualBox(
VirtualBoxの用語では土台となるマシンで動作しているOSをホストOS、仮想マシン上で動作しているOSをゲストOSと呼びます。本書の場合は、WindowsまたはOS XがホストOS、CentOSまたはUbuntu ServerがゲストOSになります。
Vagrantとは
また、ホストOSからゲストOSにSSHで簡単にログインできるようにお膳立てをし、共有フォルダの設定をしてくれるなど、開発者にとってうれしい機能が揃っています。さらに、仮想マシンにさまざまなソフトウェアやライブラリをインストール・設定する作業(プロビジョニング)の自動化を支援する仕組みも用意されています。
Vagrantはミッチェル・ハシモト、ジョン・ベンダーらによって開発され、MITライセンスの下でオープンソースソフトウェアとして無償で配布されています。
Vagrantを利用したRails開発の進め方
留意事項
Vagrantの利用を始めるとRails開発の考え方や進め方が大きく変わります。具体的な作業手順の説明に入る前に、留意事項を2つ述べておきます。
第1の留意事項は、Railsアプリケーション開発プロジェクトごとに別々の仮想マシンを作るということです。仮にプロジェクトAとプロジェクトBが同一のOSを標的にしていたとしても、原則として別々の仮想マシンを動かしてそこで開発を進めます。
第2の留意事項は、Vagrantの設定ファイルVagrantfileおよびそれに付随するファイル(プロビジョニングスクリプトなど)は開発チーム全体で共有するということです。もし、あなたのチームがGitやMercurialやSubversionなどのバージョン管理システム(SCMツール)を利用していれば、それらをリポジトリに加えましょう。あなたが独力で開発している場合でも同様です。
新規アプリケーションの作成
さて、新たにRailsアプリケーションxyzの開発を始めようというとき、従来であれば作業マシンの適当な作業ディレクトリで次のようなコマンドを最初に実行したはずです。
> rails new xyz
しかし、Vagrantを利用する場合は最初の手順が異なります。まずxyzというディレクトリを作成し、そこに移動します。以下、このディレクトリをプロジェクトディレクトリと呼ぶことにします。
> mkdir xyz > cd xyz
そして、そのディレクトリにVagrantfileというファイルを作ります。このファイルは他のプロジェクト用に作ったものを流用してもいいし、誰かがインターネット上で公開しているものを修正しても構いません。あるいは、次のコマンドを実行してひな形を作ることもできます。
> vagrant init
このVagrantfileがあれば、次のコマンド1つで仮想マシンの作成から起動まで終わらせることができます。
> vagrant up
仮想マシンが無事起動したら、次のコマンドによりSSHでゲストOSにログインします。
> vagrant ssh
そして、ゲストOS上でRailsアプリケーションの骨格を作ります。
$ rails new xyz
この結果、vagrantユーザーのホームディレクトリ/home/vagrantにディレクトリxyzができ、その中にRailsアプリケーションの初期ソースコードが生成されます。
続いて、できあがったRailsアプリケーションの骨格を/vagrantディレクトリに移動します。
$ cp -rT xyz /vagrant $ rm -rf xyz
/vagrantディレクトリはVagrantで仮想マシンを作成する際に自動的に作られます。オプション-r付きでcpコマンドを実行することにより、ディレクトリの内容を再帰的に(深い階層のサブディレクトリまですべて)コピーしています。cpコマンドのオプション-Tはコピー元ディレクトリの内容でコピー先ディレクトリを上書きするために付けています。このオプションを省くと/vagrantディレクトリの下にxyzというディレクトリが作られてしまいます。コピー元のディレクトリは不要なので削除してください。
以上が、新規アプリケーションの作成手順です。
3つのディレクトリの関係
ここまでの説明でプロジェクトディレクトリ、vagrantユーザーのホームディレクトリ、/vagrantディレクトリという3つのディレクトリが登場しました。少しややこしいので、整理しておきましょう。
- プロジェクトディレクトリ……ホストOS(WindowsやOS X)側に存在します。アプリケーションの名前がxyzなら、プロジェクトディレクトリのパスは~/projects/xyzとなります。ただし、プロジェクトディレクトリを~/projectsディレクトリの下に置くのは本書での決めごとです。
- vagrantユーザーのホームディレクトリ……ゲストOS(CentOSやUbuntu Server)側に存在します。パスは/home/vagrantです。
- /vagrantディレクトリ……ゲストOS(CentOSやUbuntu Server)側に存在します。パスは/vagrantです。
vagrantユーザーのホームディレクトリは、Railsアプリケーションの新規作成時に一時的に使用するぐらいで普段はあまり利用しません。
実際にRailsアプリケーションの開発が始まると、Railsルートディレクトリという用語も登場します。Railsアプリケーションが設置されたディレクトリという意味です。/vagrantディレクトリにRailsアプリケーションを設置すれば、Railsルートディレクトリになります。しかし、1つのOS上に複数のRailsアプリケーションを設置することが可能なので、/vagrantディレクトリとRailsルートディレクトリは同義語ではありません。
日々の開発作業
実は、プロジェクトディレクトリ~/projects/xyzと/vagrantディレクトリはVagrantによって「共有フォルダ」に設定されています。つまり、プロジェクトディレクトリのファイルを修正すれば、/vagrantディレクトリの同名ファイルに修正が反映されます。/vagrantディレクトリにディレクトリやファイルを追加すれば、プロジェクトディレクトリ側にも現れます。
この仕組みがあるため、Railsアプリケーションソースコードの編集作業をホストOS(WindowsやOS X)側で行うことが可能です。つまり、普段使っているお気に入りのテキストエディタやIDEをそのまま利用できるということです。
他方、Railsアプリケーションの起動と停止はゲストOS側で行います。つまり、SSHでログインした上で以下のコマンドを順に実行することでRailsアプリケーションを起動します。
$ cd /vagrant $ bin/rails s
アプリケーションを停止するには、ゲストOSのターミナル上でCtrl+Cを入力します。
同様に、RSpecによる自動テスト(Chapter 5)の実行もゲストOS側で行うことになります。
進行中の開発プロジェクトに途中から加わる場合
すでにVagrantを利用した開発プロジェクトが進行していて、あなたがそのプロジェクトに途中から加わる場合、開発環境の構築手順はとても簡単です。
まず、バージョン管理システムのリポジトリからソースコードを取得します。そのソースコードのルートディレクトリにはVagrantfileが含まれていることを確認しましょう。もし存在すれば、そのディレクトリで次のコマンドを実行するだけです。
$ vagrant up
初めて使うタイプのOSの場合は少し時間がかかるかもしれませんが、あなた自身が何か作業する必要はありません。ただ待っていれば開発環境ができあがります。
この記事のもとになった書籍 | |
---|---|
![]() 黒田 努 著 |
実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング本書は、Ruby on Railsの実践的な学習書です。最新のRuby2.0およびRuby on Rails4.1、RSpec3.0に対応しました。1つの企業向け顧客管理システムを作る中でRailsによるWebアプリケーション開発の基礎知識とさまざまなノウハウを習得していきます。各章末には演習問題が設けられているので、理解度を確かめながら確実に読み進められます。 |
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- VirtualBoxやVagrantを用いたRails開発環境の構築方法(後編)
- 開発環境の構築・共有を簡単にするVagrant入門
- Serverspecの概要からインストールまで
- Ubuntuを使ったWebサーバ構築
- 仮想マシンにCentOSをインストールする
- ズバリ!andLinuxは使えるのか?
- 実践「Heroku」をセットアップしてサンプルアプリを動かそう
- 仮想マシン自動作成・設定ツール「Vagrant 1.8」リリース
- Windows Azure上にLinuxインスタンスを立ち上げる(クエスト5)
- [入門編] RHELユーザーが知っておきたい、Ubuntu Serverとのコマンド・サービスの違い