Laravel4ボックスの取扱説明書

タグ: Laravel4   Vagrant   VirtualBox  

私も初心者ではありますが、全く初めてVagrantを使用する人向けに解説してみます。慣れてしまうと、それ故に最初につまずくポイントを忘れがちになり、教えるべきポイントを外してしまいます。ですから、まだ記憶が新鮮なうちに書き留めておきます。

仮想化とは

普段使用しているいつものOS上に、独立した別のOSを動かすことです。

何のために?

目的はいろいろあります。Web上のサービスとやり取りするようなアプリの場合、相手先が他のマシンだと自マシンに比べ用意や設定に多少手間取ります。しかし自分のコンピューター上にその相手先をシミュレートできれば、自分のマシン内で比較的簡単に設定などができるわけです。

また、同じシステムやサイトを構築する他の人に、開発もしくは実働するマシンと同じ環境を仮想化として用意しておけば、その環境を配ることができます。それにより「このバージョンが違うから、やり直し」というよくある悲劇を防ぐことができます。

さらに、開発やテストのために独自の環境を利用できます。つまり、独立したマシン環境を作成できるわけですから、その中で行う開発やテストはその仮想マシーン内部だけの影響で済みます。通称、サンドボックスと言います。

そして、この仮想マシーンを簡単にコピーし、配布することができるところがみそで、自分の手元に複数の環境を作成したり、他の人に与えたりが楽に行えます。もちろん、作ったり、片づけたりもコマンド一発で、とても簡単です。

VirtualBoxとは?

Oracle社が開発し、無料で配布してる仮想化のソフトウェアです。WindowsからMac、そしてLinuxで動作します。

仮想化の環境を含んだファイルをボックスファイルといい、拡張子もboxです。

Vagrantとは?

VirtualBoxもGUIが用意され簡単に使用できるのですが、設定を自動化し、より簡単に素早く環境を構築するために用意されているコマンド群です。

なぜLaravelを動作させるの?

前の2つの記事ではLaraverl4を含んだUbuntu12.04ベースのボックスを紹介しました。

一番大きな理由は開発やテスト時に、先程説明したサンドボックスとして動作させられるからです。今回、このボックスを見つけ紹介した意図は、サンドボックスとしての利用がこの先個人でも流行るでしょうから、できるだけ簡単に実現する方法を共有するためです。

もうひとつの理由はソフトウェアのバージョンです。例えば、私の使用しているopenSUSEではKDEなどは最新を取り入れますが、PHPはまだ5.3のままです。ところが自分でPHPを5.4に上がるのは簡単に行きません。PHP単独だけでなく、関連するパッケージの対応なども調整する必要が起きるためです。

そこで今回のボックスを利用すれば、含まれているPHPは5.4ですから、手間をかけずに上のバージョンを使用できるわけです。

個人で環境を整えられる場合は問題ありませんが、意外と古い環境も世の中には残っています。そのような場合でも、本体をいじらずに環境を構築できるのは便利ですからね。

SSHアクセス

今回のボックスはGUIなどは含まれていません。最低限度のソフトウェアで構成され、小さく作られています。

そのため、仮想マシンにSSHでログインし、コマンドベースで設定などを行います。

vagrant ssh

これで、仮想マシンに接続できます。ユーザー名とパスワードとかキーフレーズとかの入力もいりません。

  • 仮想マシンの中ではvagrantという名前のユーザーになります。
  • sudoはパスワード無しでお手軽に利用できるように設定されています。

sudoも簡単に使用できますので、ルート権限が必要な設定コマンドなどを使用し、変更しやすいように設定されています。

当然artisanコマンドもSSH接続で実行します。

Web環境

/var/wwwの下にLaravel4に必要なファイルが全部揃っています。Laravel4の「インストールフォルダー」とか「ルートフォルダー」、「トップフォルダー」に該当します。このディレクトリーでArtisanコマンドを叩きます。

/var/wwwは所有者がvagrantになっているため、sudoを使用せず操作ができます。

デフォルト状態のVagrantfileではホストの8888番ポートを仮想マシンの80番ポートにフォワーディングしています。つまり、ホストでブラウザから8888番ポートにアクセスすることで、仮想マシンの80番ポートを使用しているhttpサーバーにアクセスできます。(設定はVagrantfileで変更できます。)

ドキュメントルートは/var/www/publicになっているため、そのままLaravel4のルートページの"Hello World"が表示されます。

ファイル共有

仮想環境にはファイルも含まれているため、直接ホスト側から操作はできませんが、共有できるようにVagrantfileで指定しておくことにより、簡単にホスト側からアクセスできます。

例えば、今回のボックスでは仮想マシンの/var/wwwは、ホストの'vagrant up'を実行するディレクトリー中のwwwと共有するように設定していますので、ホストのwww下の内容を書き換えれば、そのまま仮想マシンの環境に反映されます。ですから、コードの更新もホスト側で直接行えます。

Composerコマンドが追加/変更するのはファイルとディレクトリーだけです。ですから、ホスト側で実行できます。結果はそのまま仮想マシンに反映されます。マシンのパワーが仮想環境よりもたくさん使用できる(だろう)ホスト側で実行したほうが、スピード的に(多少)有利です。まあ、余り変わりありませんけどね。

ただし、artisanコマンドは仮想環境の中で実行しましょう。(もちろん、ポートなどの設定を正しく行なっていればホスト側で実行できるでしょうが、今度は仮想マシンで実行できなくなりますね。どちらかを選び、設定する必要があります。)

MySQL

でも、いくらLaravelにマイグレーションと使いやすいSchemeクラスが用意されていても、DB自身を作成したり、テーブルの内容を確認したりするためにSQLコマンドを直接叩くのはちょっと嫌ですね。

そのため、今回のボックスにはPHPMyAdminが用意されています。ホスト側からブラウザで、Webサーバーのポートの/phpmyadminへアクセスしてください。

パスワードは設定なし(空文字列)で、ユーザー名は"root"です。これはPHPMyAdminだけではなく、LaravelのDBの設定でも使用します。

MySQLは簡単に使用できます。テーブルを作成し、databese.php設定ファイルを設定すれば、Laravelから操作できます。

仮想マシンの電源

仮想マシンとはいえ、コンピューターです。いきなり電源は切れません。でも、起動しているのを忘れていて、ホストを落としてしまうことなんてザラです。:D

  • vagrant up:本体の電源スイッチをOnする行為に当たります。設定を読み込み、ちまちま起動します。
  • vagrant halt:これは終了メニューから、終了を選ぶことに相当します。必要な後片付けを済ましてから、起動を終了します。
  • vagrant suspend:停止です。その名の通り、サスペンド状態になります。ディスクに必要な情報を書きだしてから、終了状態になります。
  • vagrant resume:再開です。普通のコンピューターと異なり、自動的にサスペンドから復帰しません。コマンドを叩いてください。
  • vagrant reload:再起動です。リロードとはVagrantfile設定ファイルを再読み込みすることですが、起動している状態では読み込めないため、一度終了し、立ち上げ直します。結果、動作としては再起動ですね。

suspendしてもCPUやメモリを消費するという情報もありますが、公式サイトによるとRAMの内容をディスクに保存するという、リアルマシンと同じような手法が取られるため、資源が無駄に消費されることはありません。安心してご利用ください。

さて、仮想マシンを立ち上げたまま、ホスト側を終了してしまった場合、次に立ち上げる時に必要なのは一般的なコンピューターと同じく、通常起動のvagrant upです。いきなり終了した場合でも、共有ファイルの中身はきちんと残っています。何かの作業実行中に中断しちゃったら、関連するファイルはそりゃごちゃごちゃになっているでしょう。本当のコンピューターと同じです。

もし、仮想マシンも順調に動作しているならば、suspendとresumeを使うほうが、haltとupを使用するよりもかなり早いですよ。

readme.mdを日本語翻訳したBoxにはsuspendというBashシェルスクリプトをつけています。これをログアウトのタイミングで動作するように指定しておけば、いつでも安心してホスト側を終了させることができます。例えば、私はデスクトップにKDEを使用していますが、ホームディレクトリー下の.kde4/shutdownディレクトリーに、suspendスクリプトをシンボリックリンクで登録してあります。これでログオフでもシャットダウンでも自動的に仮想マシンがsuspendされます。起動が必要ならば、vagrant resumeで素早く再開できます。

好みの仮想マシンを作成する

さて、せっかく自分好みに環境を整えたら、それを新しいボックスにできないかと思いますよね。自分で同じ環境を複数用意したいこともありますし、他の人に渡して開発/テストに使ってもらうこともできます。

方法は2つあります。

  1. セットアップした環境をそのまま新しいボックスとして生成する
  2. セットアップスクリプトを用意し、基本となるボックスは他から取得してもらう

最初の方法は、まあ主に自分専用、もしくは近くにいる人でメディアを手渡しできるとか、社内で使うとかの場合でしょう。なにせ環境をそのままパッケージングするため、今回のLaravel4入りボックスの場合、約0.5Gもの大きさになります。

方法は簡単です。一番基本的なやり方は、仮想マシンをhaltで停止させ、vagrant packageを実行するだけです。しばらくすると、パッケージングされ、package.boxができます。これを新しいボックスとして利用します。

なお、共有としているwwwの内容と、Vagrantfileは含まれません。Vagrantfileはオプションで取り込めるようですが、どうせwwwの内容が含まれませんから、一緒にコピーしましょう。

2つ目の方法は、ちょっとテクニカルですよ。難易度が上がります。

とはいえ、めちゃくちゃ面倒でもありません。まずスタート時点として既に公開しているこれを利用してください。(もしくは、お好きなBoxを利用してください。)

これには設定のためのファイルがずらずら入っています。これを改造するなり、付け加え、それを配布するという方法です。

これならば、全部テキストファイルですので、ネットを利用して配布することも、圧縮してメールで送信もできますね。Zipでわずか300Kバイト程です。

一番簡単な方法は、まずこのファイルでvagrant upし、起動しましょう。そしてそれに加える変更をテキストで保存しておきましょう。

希望する環境が整ったら、それをシェルスクリプトにまとめます。つまりup後の環境に、作成したシェルスクリプトを実行すれば、お望みの仮想マシンになるようにするわけです。

日本語版にはmySetup.shというBashスクリプトを追加しました。この中に記述してください。up時の最後の設定として、このスクリプトが実行されます。

Vagrantの設定にはパペットやら何やらいろいろな手法がありますが、わざわざ覚えなくても、シェルが書ければ、何でもできてしまいます。例えばパッケージを追加するだけなら、apt-getをずらずら記述すれば良いだけです。特定のファイルを編集したければcatで追加するなり、sedで編集するなりできますね。なにせ、ただのシェルスクリプトですから。

これを受け取った利用者がvagrant upすれば、基本となるUbuntu12.04のボックスをそのマシンでダウンロードし、Laravel4とその他必要な準備を整え、最後に追加したシェルスクリプトを実行し、お望みの環境が出来上がるわけです。(ただし、シェルスクリプトにすると、毎回実行されてしまうのが欠点です。)