[PHP]WindowsでHomesteadを使ってLaravel5開発環境を作る(1/2)

PHP のアプリケーションフレームワークである Laravel には Homestead という Vagrant 用の box が用意されています。
Vagrant とは VirtualBox などの仮想化ソフトと組み合わせて、1台のコンピュータ内に別の OS を使った開発環境を簡単に構築できるソフトウェアです。box と呼ばれるファイルを読み込むとそれに保存されていた環境が再現されるため、面倒なサーバーの初期設定をしなくてもすぐに開発に入ることができます。
この記事では Windows の VirtualBox に Homestead を使った Laravel 5 の開発環境を作ります。

インストールを進める上で次のソフトが必要になるので下記サイトよりダウンロードし、インストールをしておいて下さい。

Git for Windows
VirtualBox

Git をインストールすると Git Bash というアプリケーションがついてきます。Git Bash はコマンドプロンプトのようなコンソールで、LINUX や UNIX の Bash と同様のコマンドが使えます。
まずはその Git Bash を起動し、次のコマンドで Homestead をインストールします。

vagrant box add laravel/homestead

途中 virtualbox かvmware_desktop のどちらを使うかを尋ねられた場合は virtualbox を選択します。
次に Git のリポジトリ Homestead をホームフォルダに作成します。

git clone https://github.com/laravel/homestead.git Homestead

Homestead というフォルダができているはずなので、「cd Homestead」でそのフォルダに移動し、初期設定をするための init.sh ファイルを実行します。

bash init.sh

するとホームフォルダ(C:\Users\ユーザー名\)に .homestead という隠しフォルダに Homestead.yaml というコンフィグファイルが作成されるので、内容を編集します。(下記は抜粋)

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    - map: ~/Code
      to: /home/vagrant/Code

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public

「folders:」部分ではフォルダのマッピングを設定します。Homestead の仮想OS(ubuntu)のフォルダと Windows 上のフォルダのペアを指定して、2つの環境から同じフォルダを参照できるようにします。「map:」は Windows 側のフォルダ、「to:」は仮想OS側のフォルダです。上の例ではWindowsの「C:\Users\ユーザー名\Code」というフォルダと仮想OSの「/home/vagrant/Code」フォルダが同じフォルダであるかのように振る舞います。

「sites:」部分はローカルドメインとフォルダの割り当てです。ブラウザで「http://homestead.app」と入力すると「/home/vagrant/Code/Laravel/public」というフォルダの内容が表示されるようになります。

ひとまず上記の設定で保存を終えます。次に「authorize:」「keys:」にある認証鍵ファイルを用意します。先にホームフォルダ内に「.ssh」フォルダを作り、ssh-keygen コマンドでその中に id_rsa ファイルと id_rsa.pub ファイルを作成する流れです。

mkdir ~/ttt
cd ~/ttt
ssh-keygen -t rsa -C "メールアドレス"
Generating public/privata rsa key pair.
Enter file in which to save key (/c/Users/ユーザー名/.ssh/id_rsa):

保存先を聞かれますが現在のフォルダ内に作るので空欄のままエンターキーを押します。
パスフレーズは2度同じものを入力して下さい。(オプション)
これで .ssh フォルダ内に暗号鍵、秘密鍵の2つのファイルが生成されるはずです。

次は先ほど Homestead.yaml で指定したフォルダ「~/Code」を作っておきます。「~」はホームフォルダーを意味するので、「C:\Users\ユーザー名\Code\Laravel\public」となるようにフォルダーを作ります。さらに public フォルダ内に index.php ファイルを作り、次のような内容にしておきます。

<?php
phpinfo();

この段階でホームフォルダの主要なファイルは次のようになっているはずです。

.ssh\id_rsa
.ssh\id_rsa.pub
.homestead\Homestead.yaml
Homestead\
Code\Laravel\public\index.php

次に、ローカルドメイン「homestead.app」で「192.168.10.10」に接続できるようにするために「C:\Windows\System32\drivers\etc\hosts」ファイルを書き換えます。テキストエディターを管理者として実行してからファイルに次の行を追加して下さい。

192.168.10.10    homestead.app

これで下準備は整いました。いよいよ仮想 OS を起動します。ホームフォルダにある Homestead フォルダに移動し、「vagrant up」コマンドで起動して下さい。

cd ~/Homestead
vagrant up

起動が完了したらブラウザで「http://homestead.app」にアクセスしてみてください。成功していれば先ほどの index.php が実行され、phpinfo() の結果が表示されているはずです。
仮想OSを終了させるには「vagrant halt」で行います。現在の状態を知るには「vagrant status」というコマンドを使います。

次回に続く)

[PHP]Laravel5をOS X(Mac)のローカルサーバーにインストールする

Laravel はオープンソースの PHP アプリケーションフレームワークの一つで、CakePHP や CodeIgniter、FuelPHP などと並び多くの注目を集めています。
この記事では、Mac に Laravel 5 をインストールする手順や発生した問題とその解決方法について書き留めておきます。

現在の環境とインストール予定のバージョンはこちらです。

OS X Yosemite 10.10
Laravel 5.0 または Laravel 5.1

詳細な説明に入る前にインストールの流れを見ておきます。

(1) Composer のインストール
(2) Composer を使って Laravel をインストール
(3) Composer を使って Laravel プロジェクトを作成

すべてが順調に行けば以上の3ステップで導入できますが、実際にはいくつかの問題が発生し、遠回りすることになりました。順を追って説明していきます。


Composer のインストール

Composer は PHP のパッケージ管理ツールです。これを使うことにより依存関係を解決してパッケージをインストールしたり、アップデートを行うことができます。Laravel 専用のツールというわけではなく、Cake PHP などのインストールにも使われています。

インストールするには次のコマンドをコンソールで実行します。

curl -sS https://getcomposer.org/installer | php

実行すると composer.phar ファイルがダウンロードされます。
そのままでは使いにくいのでパスの通っているディレクトリに移動させます。

sudo mv composer.phar /usr/local/bin/composer

これで composer と入力しただけで composer.phar が実行できるようになりました。
試しにバージョンを確認してみます。

composer --version
Composer version 1.0-dev (e64470c987fdd6bff03b85eed823eb4b865a4152) 2015-05-28 14:52:12

正しくインストールされていればバージョンが表示されます。


Laravel のインストール

Laravel インストールには Composer を使って次のようにします。
最新の情報は公式ドキュメント(5.0 / 5.1)を参照してください。

composer global require "laravel/installer=~1.1"

Laravel プロジェクトの作成

Laravel をインストールしたので Composer から Laravel プロジェクトが作れるようになります。
ただし、作成するにはサーバーが次の要件を満たしている必要があります。

【Laravel 5.0】

PHP >= 5.4
Mcrypt PHP Extension
OpenSSL PHP Extension
Mbstring PHP Extension
Tokenizer PHP Extension

【Laravel 5.1】

PHP >= 5.5.9
OpenSSL PHP Extension
Mbstring PHP Extension
Tokenizer PHP Extension

PHP のバージョンを確認するために「$ php -v」コマンドを入力すると、「PHP 5.5.20 」であることがわかりました。Yosemite に標準搭載されている PHP のバージョンには問題ないようです。「which php」コマンドで場所を確認すると「/usr/bin/php」にあることがわかります。
しかし、標準搭載の PHP には Laravel 5.0 に必要な Mcrypt というエクステンションがインストールされていないため、このまま Laravel プロジェクトの作成をしようとすると次のような警告が出ます。(Laravel 5.1 では必要ありません)

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for laravel/framework v5.0.16 -> satisfiable by laravel/framework[v5.0.16].
    - laravel/framework v5.0.16 requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.

そのため、先に「ext-mcrypt」を使えるようにしておく必要があります。

方法は2つあり、もし開発に MAMP を使っているのなら、そちらの PHP をコンソールから使えるように修正し、ext-mcrypt を有効にするという手があります。

【MAMP の PHP をコンソールから使う場合】

コンソールで「php」というコマンドを使った時、通常は「/usr/bin/php」が実行されます。そこで、.bash_profile ファイルにパスを通して、「/Applications/MAMP/bin/php/」の中にある PHP が実行されるように変更します。

$ vi ~/.bash_profile

vi で .bash_profile ファイルを開いたら、次の行を追加します。

export PATH=/Applications/MAMP/bin/php/php5.6.7/bin:$PATH

「php5.6.7」の部分はインストールされている MAMP によって異なります。環境に合わせて書き換えてください。
.bash_profile への変更はログインし直すか下記コマンドを実行しない限り即時には反映されません。

source ~/.bash_profile

MAMP に入っている PHP には ext-mcrypt が付属されています。有効になっていない場合は php.ini を書き換えて有効にします。php.ini は「/Applications/MAMP/bin/php/php5.6.7/conf/php.ini」にあります。
「;extension=mcrypt.so」となっている部分を探して「extension=mcrypt.so」のように先頭の「;」を外したら、MAMP の Apache を再起動させます。

【標準搭載されている PHP に ext_mcrypt をインストールする場合】

Mac に標準搭載されている PHP に ext_mcrypt をインストールする場合は .bash_profile などを変更する必要はありません。
インストールを簡単にするために Homebrew というパッケージマネージャーを利用します。
まずはその Homebrew をインストールします。

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

インストールできていれば「brew -v」コマンドでバージョンが確認できるはずです。
次に「brew search mcrypt」コマンドで mcrypt に関連するパッケージを検索します。
こちらの環境では次のパッケージが見つかりました。

$ brew search mcrypt
libtomcrypt  mcrypt
homebrew/php/php53-mcrypt    homebrew/php/php55-mcrypt
homebrew/php/php54-mcrypt    homebrew/php/php56-mcrypt

PHP のバージョンに合ったものをインストールします。「php -v」コマンドで調べると「PHP 5.5.20」であることがわかったので「homebrew/php/php55-mcrypt」を次のようにしてインストールします。

brew install homebrew/php/php55-mcrypt

こちらで試した時は必要ありませんでしたが、こちらの二行を先に実行しておく必要がある場合もあります。

brew tap homebrew/php
brew tap homebrew/dupes

インストールが完了したら php.ini にこのエクステンションを有効にするための記述を追加します。
php.ini は /etc/php.ini にあるものが読み込まれますが、php.ini.default というファイルしかない場合があります。その場合は php.ini.default をコピーして php.ini に名前を書き換えます。
内容を確認し「;extension=mcrypt.so」という行があれば先頭の「;」を外し、無ければ「extension=mcrypt.so」」という行を追加します。追加が終わったら保存して Apache を再起動させます。再起動のコマンドはこちらです。

sudo apachectl restart

さて、これで PHP と mcrypt の準備が整いました。いよいよ Laravel のプロジェクトを作成します。まずは cd コマンドでドキュメントルートに移動します。MAMP を使っている場合は「cd /Applications/MAMP/htdocs」ですが、Mac の Apache を使っている人は「cd /Library/WebServer/Documents」になるかと思います。次にプロジェクトを作成するためのコマンドを実行します。

◆最新バージョンのインストール

composer create-project laravel/laravel プロジェクト名 --prefer-dist

◆バージョンを指定したインストール(5.0 の場合)

composer create-project laravel/laravel プロジェクト名 5.0 --prefer-dist

プロジェクト名の部分は好きなように書き換えてください。その名前のフォルダが作られます。公開ディレクトリはその中にある「public」というフォルダなので「http://localhost/プロジェクト名/public」でブラウザから確認ができるはずです。

通常は Laravel のデモ画面が表示されますが、おそらく真っ白な画面しか表示されないと思います。というのもフォルダ storage 以下に対して Apache が書き込めるようにパーミッションを設定していないからです。
そこで storage に対して 777 の権限をもたせます。

sudo chmod -R 777 storage

設定が済んだら再度「http://localhost/プロジェクト名/public」にアクセスしてみてください。
うまくいっていればデフォルトのウェルカムメッセージが表示されるはずです。

laravel5