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

2014年6月26日(木)
黒田 努
実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング
顧客管理システムの構築を体験しながら、Railsアプリケーション開発のノウハウを習得!Amazon詳細ページへ
この記事は、書籍『実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング』の内容を、Think IT向けに特別にオンラインで公開しているものです。詳しくは記事末尾の書籍紹介欄をご覧ください。

本記事では、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)。

仮想マシン
図1 仮想マシン

開発中のRailsアプリケーションは仮想マシン上で動作させます。そして、Windows上のWebブラウザからRailsアプリケーションにアクセスして動作を確認します。他方、Railsアプリケーションのソースコードは、後述する「共有フォルダ」の機能によって、Windows上で開いて編集します。こうすれば、使い慣れたテキストエディタやIDEを使い続けながら、プロダクションマシンと同等の環境下でRailsアプリケーションの開発が行えることになります。

VirtualBoxとは

Oracle VM VirtualBox(VirtualBox バーチャルボックス)は、コンピュータ上に仮想マシンを作り出すソフトウェアの1つです。同種のソフトウェアにはVMWareやMicrosoft Virtual PCなどがあります。リリース当初はプロプライエタリソフトウェアとして有償で提供されていましたが、現在はGPL version 2に基づくオープンソースソフトウェアとして無償で配布されています。

VirtualBoxの用語では土台となるマシンで動作しているOSをホストOS、仮想マシン上で動作しているOSをゲストOSと呼びます。本書の場合は、WindowsまたはOS XがホストOS、CentOSまたはUbuntu ServerがゲストOSになります。

Vagrantとは

Vagrant ベイグラントをひと言で説明すれば、仮想マシンの管理ツールです。VagrantはVagrantfileと呼ばれる設定ファイルの記述に沿ってVirtualBoxのAPIを呼び出し、仮想マシンを作ったり、仮想マシンを起動・停止したりします。

また、ホスト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プログラミング

黒田 努 著
価格:3,500円+税
発売日:2014年05月23日発売
ISBN:978-4-8443-3592-4
発行:インプレスジャパン

実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング

本書は、Ruby on Railsの実践的な学習書です。最新のRuby2.0およびRuby on Rails4.1、RSpec3.0に対応しました。1つの企業向け顧客管理システムを作る中でRailsによるWebアプリケーション開発の基礎知識とさまざまなノウハウを習得していきます。各章末には演習問題が設けられているので、理解度を確かめながら確実に読み進められます。

Amazon詳細ページへImpress詳細ページへ

株式会社オイアクス

東京大学教養学部卒。同大学院総合文化研究科博士課程満期退学。ギリシャ近現代史専攻。専門調査員として、在ギリシャ日本国大使館に3年間勤務。中学生の頃に出会ったコンピュータの誘惑に負け、IT業界に転身。株式会社ザッパラス技術部長、株式会社イオレ取締役を経て、技術コンサルティングとIT教育を事業の主軸とする株式会社オイアクスを設立。現在、同社代表取締役社長。また、2011年末にRuby on Rails によるウェブサービス開発専業の株式会社ルビキタスを知人と共同で設立し同社代表に就任(オイアクス社長と兼任)。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています