目次


一新された PHP

Vagrant と PuPHPet を使用して環境を構築する

開発やデプロイ用に共有可能な仮想マシンの作成プロセスを自動化する

Comments

コンテンツシリーズ

このコンテンツは全#シリーズのパート#です: 一新された PHP

このシリーズの続きに乞うご期待。

このコンテンツはシリーズの一部分です:一新された PHP

このシリーズの続きに乞うご期待。

バグ・レポートを提出した後で、そのコードは問題なく動いているという反応が返ってきたときの恐怖感は、開発者であればわかるはずです。それよりもさらにひどいのは、バグ・レポートを受け取ったものの、その問題を再現することが不可能なときです。通常、このような事態が起こるのは、本番環境と開発環境の間にある違いが原因であることや、開発者の環境間の違いが原因であることさえあります。フラストレーションが溜まることを別にすれば、真の問題は、開発しているソフトウェアが本番環境で動作するかどうかにあります。結局はそれが最終的な目的だからです。

私はこれまで、この問題を解決しようと試みるさまざまなソリューションを見てきました。10 年ちょっと前のソリューションの一例は、開発チームの全員が、本番環境で使用するのとまったく同じコンピューターを使用するというものです。また、つい最近までは、ホストされた開発環境を構築し、その環境をプログラマー全員が共有してリモートで開発が行われるようにすることが一般的な慣例となっていました。これは効果的なソリューションでしたが、オフラインで開発できないという大きな欠点がありました。

自分のマシンでは動きます。

— すべての開発者

処理能力が高くなったおかげで、最近の開発では仮想マシンを使用することで、環境間の違いという問題を解決することができます。つまり、チームのそれぞれの開発者が仮想マシンを使って開発作業を行うのであれば、チーム全体で共通した 1 つの仮想マシン構成を作成することができます。しかもこれは、一回限りの作業です。Composer にライブラリーのインストールを任せられるのと同じように、仮想マシンを使ってシステム自体を標準化することができるのです。このチュートリアルでは、仮想マシンの作成および構成プロセスを自動化するために、組み合わせて使用できるオープンソース・ツールを紹介します。

ローカル開発のための仮想マシン

Wikipedia (英語版) では、仮想マシンを次のように定義しています。

A system virtual machine provides a complete system platform which supports the execution of a complete operating system (OS). These usually emulate an existing architecture, and are built with the purpose of [...] providing a platform to run programs where the real hardware is not available for use. (システム仮想マシンは、完全なオペレーティング・システム (OS) の実行をサポートする完全なシステム・プラットフォームを提供します。通常、システム仮想マシンは既存のアーキテクチャーをエミュレートし、実際のハードウェアを使用できない環境でプログラムを実行するためのプラットフォームを提供する目的で構築されます。)

仮想マシンを使って物理コンピューターをエミュレートすると、開発やデプロイを行う環境に一貫性がもたらされるという利点があります。現在、Amazon Web Services などのクラウド・アーキテクチャーをデプロイ先としている場合、それはすでに、仮想マシンにデプロイしていることになります。そこで、このチュートリアルではローカル・コンピューター上で仮想マシンを実行することに焦点を当てます。

ローカル仮想マシンを作成する場合、いくつかの選択肢の中からソフトウェア・ソリューションを選ぶことができます。よく使われているソフトウェア・ソリューションには、VMware (Windows/Linux/Mac)、Parallels (Mac)、VirtualBox (Windows/Linux/Solaris/Mac) があります。このチュートリアルでは、これらのなかから、VirtualBox を使用することにします。VirtualBox はあらゆるシステムで動作することに加え、今ではおそらく PHP 開発者が最もよく使っているソリューションとなっています。Oracle でオープンソース・プロジェクトとして開発された VirtualBox は、100 % 無料で使用することができます。

これから説明する操作手順に従うには、VirtualBox のダウンロード・ページにアクセスして、自分のマシンのオペレーティング・システムに該当するインストーラーをダウンロードしてください。インストーラーを実行し、指示に従って、OS に応じた一般的なソフトウェア・インストール・プロセスを進めます。インストールが完了したら、VirtualBox を起動します。ウェルカム画面には、作成されている仮想マシンが 1 つもないことが示されます (図 1 を参照)。

図 1. インストールしたばかりの VirtualBox
VirtualBox アプリケーションのウェルカム画面のスクリーンショット
VirtualBox アプリケーションのウェルカム画面のスクリーンショット

これから、仮想マシンを手作業で作成するプロセスを辿っていきます (このチュートリアルの後のほうで、これらのステップを自動化する方法を説明しますが、このプロセスを実行するとどうなるのかを理解できるよう、実際に手順を実行することをお勧めします)。「New (新規)」ボタンをクリックすると、「Name and operating system (名前およびオペレーティング・システム)」ダイアログ・ボックスが表示されます。このダイアログ・ボックスでは、マシンに名前を付け、必要なマシンのタイプを選択する必要があります。図 2 に示されているように、私がインストールするのは Ubuntu です。

図 2. Ubuntu マシンを作成することを選択する
Ubuntu マシンを作成することを選択する画面のスクリーンショット
Ubuntu マシンを作成することを選択する画面のスクリーンショット

ここからは、一連のダイアログ・ボックスを進んで行きます。VirtualBox はこれらのダイアログ・ボックスで、マシンに割り当てる RAM の容量、仮想ディスクのサイズ、ディスクで使用するファイル・フォーマットを指定するよう求めてきます。特別な理由がない限り、これらの設定にはすべてデフォルト値を選択することをお奨めします。すべてデフォルト値のままクリックしていくと、最終的に仮想マシンが作成されて、その構成全体が表示されます (図 3 を参照)。

図 3. 新規に作成された仮想マシンの構成
新規仮想マシンの構成を表示する画面のスクリーンショット
新規仮想マシンの構成を表示する画面のスクリーンショット

この時点ではまだ、仮想マシンは動作しません。VirtualBox は、仮想マシンを作成して Ubuntu をインストールできる状態にしてくれましたが、この仮想マシンは、現状ではハードウェア・コンポーネントでアセンブルされた物理マシンと何の違いもありません。起動することはできても、ハード・ドライブに OS をインストールしない限り、何も起こりません。

新規仮想マシンを起動するために「Start (開始)」ボタンをクリックすると、次に表示されるダイアログ・ボックスでは、使用するインストール・ディスクを指定するよう求められます (図 4 を参照)。

図 4. インストール・メディアの指定を求めるプロンプト
インストール・メディアの指定を求めるプロンプトのスクリーンショット
インストール・メディアの指定を求めるプロンプトのスクリーンショット

この時点でカスタム Ubuntu 仮想マシンを作成して完了するということであれば、VirtualBox に Ubuntu インストーラーのディスク・イメージを参照させれば、完全な Linux インストール・プロセスが開始されます。しかし今は、それが最終目的ではありません。最終目的は、再現可能な一貫性のある仮想マシンにすることです。したがって、手作業でインストールすることよりも、自動化することのほうが求められます。

Vagrant の紹介

Vagrant は、VirtualBox やその他の仮想マシン・ソフトウェアを対象として、仮想マシンの自動プロビジョニングを扱うために作成された自動化層です。先ほどの「ローカル開発のための仮想マシン」セクションの中で、新しい仮想マシンを作成するために VirtualBox を構成する作業で実行したステップを、Vagrant は完全に自動化します。

Vagrant はカスタム構成ファイルを使用することによって、仮想マシンの各種設定を行い、ユーザーが選択する基本オペレーティング・システムをインストールします。ユーザーは必要とする仮想マシンを、細部まで指定することができます。提供したすべての情報は、Vagrant によって Vagrantfile というファイルに保存されるので、このファイルを自分のソフトウェア・プロジェクトにコミットすることができます。Vagrantfile はプロジェクトを構成するための composer.json ファイルと似ており (「一新された PHP: Composer による PHP 依存関係の処理」を参照)、Vagrantfile にはインストールするシステムが正確に指定されます。後は vagrant up コマンドを実行するだけで、Vagrant がその指定されたサーバーを作成して起動してくれます。

また、Vagrant プロジェクトは、多数のあらかじめ構成済みのマシンのディレクトリーにもアクセスし、ビルドを行う際の基本構成としての役割を果たすので、新しい仮想マシンを自分でとても簡単に作成することができます。

これから Vagrant を使用して、前のセクションで作成した Ubuntu 仮想マシンを自動的に作成します。Vagrant のダウンロード・ページから Vagrant をダウンロードして、自分のマシンのオペレーティング・システムに該当するインストーラーを実行してください (この場合も、チュートリアルの後のほうで、これから実行するステップに取って代わる、さらなる自動化の方法について説明しますが、このプロセスを理解できるよう、実際に手順を実行することをお勧めします)。

Ubuntu 仮想マシンを作成して構成する

Vagrant はコマンド・ライン・ツールです。したがって、インストール後に Vagrant GUI は表示されません。Vagrant のドキュメントに、HashiCorp 社 ATLAS の Vargant box のカタログへのリンクが記載されています。Composer での Packagist と同様に、このカタログは、Vagrant が基本イメージ (Vagrant では box と呼ばれます) の役割を果たす仮想マシン・イメージを探す、デフォルトの場所です。図 5 を見るとわかるように、このカタログには box を検索するための検索索引が記載されています。

図 5. HashiCorp 社 ATLAS の box カタログ
HashiCorp 社 ATLAS のカタログのスクリーンショット
HashiCorp 社 ATLAS のカタログのスクリーンショット

このページのカタログのまさに一番上に表示されている、最新の Ubuntu 公式リリース Trusty Tahr が、私にとって最適な選択肢となります。カタログに記載されているこの box の名前 (ubuntu/trusty64) をメモした後、その名前を使って以下のコマンドを実行します。

vagrant init ubuntu/trusty64
vagrant up

上記のコマンドを実行すると、何行もの画面出力が表示されます (図 6 に示すような出力です)。

図 6. vagrant init コマンドおよび vagrant up コマンドを実行した後の出力
Vagrant から Ubuntu を起動した場合の画面出力
Vagrant から Ubuntu を起動した場合の画面出力

これらのコマンドを実行するだけで、すべてが完了しました。VirtualBox マシンが作成されただけでなく、マシンを Ubuntu で構成し、起動するところまで完了しています。仮想マシンはバックグラウンドで実行されているので、「vagrant ssh」と入力することで、この仮想マシンに接続する準備が整います。

その他の vagrant コマンド

使用することになるコマンドには、他にも以下のものがあります。

vagrant halt
実行中の仮想マシンを強制的にシャットダウンします。
vagrant destroy
仮想マシンをシャットダウンして完全に削除します。
vagrant suspend
仮想マシンを一時停止して、現在の状態を保存します。
vagrant resume
一時停止された仮想マシンを再開します。
vagrant status
仮想マシンの現在の状態を表示します。

Vagrant には他にも多数の機能があり、それらの機能についてはドキュメントで読むことができます。例えば、同期フォルダー (コードを編集する際に ssh で box に接続する必要がありません)、特殊なネットワーキング機能、共有 box をはじめとし、その他にも数多くあります。さらに、複数のマシンを同時に作成して管理するように Vagrantfile を構成することさえできます。構成ファイルは複雑で、扱うのが難しいとは言え、それが問題になることはありません。次のセクションで、その理由を説明します。

PuPHPet の紹介

ここまでで、VirtualBox と Vagrant をインストールし、Vagrant を使用して仮想マシンの作成プロセスを自動化しましたが、仮想マシンにソフトウェアをインストールする必要がまだ残っています。この場合も同じく、手作業でインストールするとなると、一貫性が損なわれる可能性があります。幸い、仮想マシンへのソフトウェア・インストールを目的とした、いくつかの自動化 IT (別名、インフラストラクチャー自動化) ソリューションを利用できるようになっています。そのうちの 1 つが、PuppetLabs によるオープンソースの Puppet プロジェクトです。Puppet は、広範にわたるドキュメントが用意された、若干複雑な構成ファイル・システムを使用します。この構成ファイル・システムに、インストールするソフトウェア、実行するコマンド、調整した設定をはじめ、さまざまな構成要素を指定するという仕組みです。

これらの構成要素のすべてを組み合わせる方法、Vagrant を構成する方法、そして複雑な一連の Puppet ファイルを処理して完全に自動化されたシステムを作成する方法を正確に理解するには、かなりの努力を要します。2013年の中頃、Juan Treminio という PHP 開発者が、この悪戦苦闘に終止符を打ちました。彼は自分の苦労を他の PHP 開発者たちに繰り返させるべきではないと決意したのです。その結果生まれたのが、PuPHPet です。Treminio がオンライン GUI として作成した PuPHPet では、マシンのデプロイ先、必要な OS、マシンにインストール/構成するソフトウェアを選択することができます。これらの構成要素を選択すると、PuPHPet が Vagrantfile と Puppet 構成を自動的に生成してくれるので、後は vagrant up を実行するだけで、すべてのプロセスが首尾よく行われます。

VirtualBox と Vagrant がすでにインストールされていることを前提として、PuPHPet ホーム・ページにアクセスしてください。「Click Here to Get Started Right Away (ここをクリックして今すぐ開始)」リンクをクリックした後、わかりやすい一連の構成ページに対処していきます。図 7 に、開始手順のページを示します。

図 7. PuPHPet 開始手順のページ
PuPHPet 開始手順のページのスクリーンショット
PuPHPet 開始手順のページのスクリーンショット

左側のメニューを順に進みながら、プロセスの各ステップで、サーバーの特定の側面を構成します。

  • Deploy Target (デプロイ・ターゲット): 仮想マシン・プロバイダーを選択し (デフォルトでは VirtualBox が選択されています)、使用する OS とディストリビューション (Ubuntu Trusty など) を選択します。
  • System (システム): インストールするパッケージ (vim など) の指定、users/groups/cronjobs のセットアップなどを行うことができます。
  • Web Servers (Web サーバー): Nginx または Apache を選択してインストールし、Web サーバーをあらかじめ構成することができます。
  • Languages (言語): PHP の場合 (デフォルトの PHP の他には、Ruby、Python、Node.js を選択することができます)、バージョンを選択できるだけでなく、必要に応じて PHP 構成を変更することもできます。
  • Databases (データベース): デフォルトでは、MySQL がインストールされます。root パスワードなどの基本構成情報を入力し、自動的に作成させるデータベースを指定します。

他のメニュー項目 (「Mail Tools (メール・ツール)、「Work Queues (ワーク・キュー)」、「Search Servers (検索サーバー)」など) には、先進的な Web アプリケーションに必要となるような、その他のツールの同様のオプションが提供されています。

すべての構成項目 (デフォルト構成は、標準的な PHP 開発システムに有効です) の選択が完了した時点で、最後の「Create Archive (アーカイブの作成)」メニュー項目に到達します。「Create Archive (アーカイブの作成)」をクリックすると、「Download Your Customized Archive (カスタマイズしたアーカイブのダウンロード)」ページが表示されます (図 8 を参照)。

図 8. カスタマイズしたアーカイブをダウンロードするための PuPHPet のページ
アーカイブをダウンロードする PuPHPet のページのスクリーンショット
アーカイブをダウンロードする PuPHPet のページのスクリーンショット

「Go ahead then, make it! (作成を開始!)」をクリックして、Vagrantfile を作成し、すべての構成情報が含まれる ZIP ファイルを取得します。

これで、他の開発者たちと繰り返し使えるリソースとして共有できる、再利用可能なシステムの作成が完了しました。ZIP ダウンロードには Vagrantfile が含まれているだけでなく、残りの構成ファイル (Puppet 用) が格納されたフォルダーも含まれています。後は、vagrant up を実行するだけで、仕様に正確に従ったシステムを作成するプロセスを開始することができます。プロセスを開始するのは、必ず時間のあるときにしてください。必要なすべてのインストールが完了するまでには、時間がかかります。この構成はバージョン管理システムにチェックインすることができます。あるいは、何らかの形で同僚と共有するのでも構いません。お望みであれば、puphpet ディレクトリーに格納されている構成ファイルを調べて、システムを構成したり微調整したりすることもできます。「Vagrant の紹介」セクションで取り上げた Vagrant コマンドはすべて、この Vagrant box でも機能します。

まとめ

この連載では、PHP がその初期の頃から飛躍的に進化した点を取り上げてきました。PHP 言語は、試験期間を生き抜いただけでなく (今ではインターネットの Web サイトの 82 パーセントが PHP で作られるまでになっており)、複雑で高度なシステムへと進化を遂げています。PHP を中心としたエコシステムも成長しているため、PHP を使用してエンタープライズ・レベルの開発をプロフェッショナル・レベルで行えるようになっています。第 2 の Facebook を開発する場合でも、企業のイントラネットを作成する場合でも、PHP は強力で卓越した選択肢となります。最近、PHP のエコシステムに PuPHPet が加わったことにより、PHP 開発に伴う苦労の大部分が取り除かれました。その効果は、特に何十人あるいは何百人もの PHP 開発者が同じ目標に向けて作業する大規模なプロジェクトでは顕著です。


ダウンロード可能なリソース


関連トピック

  • PHP プロジェクトのリソース: PHP のスキルを高めるために developerWorks の PHP プロジェクトのリソースを調べてください。
  • VirtualBox: VirtualBox をダウンロードできるほか、ドキュメントも提供している VirtualBox Web サイトにアクセスしてください。
  • Vagrant: Vagrant をダウンロードできるほか、ドキュメントも提供している Vagrant Web サイトにアクセスしてください。
  • オープンソース Puppet: Puppet 構成マネージャーの無料で使用できるバージョンについて学んでください。
  • PHPDeveloper.org: PHP に関するニュース、意見、コミュニティー情報を入手してください。
  • php[architect]: PHP の教育に特化した、オンラインで印刷できる雑誌や、最新のニュースを調べてください。
  • アジャイル DevOps: インフラストラクチャーの自動化」(Paul Duvall、developerWorks、2012年9月: Puppet (および自動化されたインフラストラクチャー・プロビジョニング用のツールである Chef) について詳しく学んでください。
  • PuPHPet: PuPHPet プロジェクト・サイトにアクセスして、仮想マシンのセットアップを開始してください。

コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Web development, Open source
ArticleID=1014029
ArticleTitle=一新された PHP: Vagrant と PuPHPet を使用して環境を構築する
publish-date=09032015