はじめに
Laravel 公式で提供されている Homestead と Vagrant box を利用し, 1 つの仮想マシン上に 3 つの Laravel の開発環境 ( PHP5.6 + PHP7.0 + PHP7.1 ) を構築する手順をまとめています。
今回は, Homestead6 から追加された [ PHPバージョンの切替機能 ] を利用して環境を構築していきます。
引用 : Laravel 5.5 Laravel Homestead
複数のPHPバージョン
Homestead6から、同一仮想マシン上での複数PHPバージョンをサポートを開始しました。Homestead.yamlファイルで、特定のサイトでどのバージョンのPHPを使用するのかを指定できます。利用できるPHPバージョンは、"5.6"、"7.0"、"7.1"、"7.2"です。この機能は、Nginx使用時のみ利用できます。
- 第1回 -前編-
- 第01章 事前準備
- 第02章 Laravel 開発環境の構築
- 第1回 -後編-
- 第03章 複数の Laravel プロジェクトに対応 ( サブドメイン利用 )
- 参考サイト紹介
- 第2回
- Laravel 開発環境の構築 ( PHP5.6 + PHP7.0 + PHP7.1 )
- 第3回
- Eclipse で Laravel の入力補完が効くようにする ( laravel-ide-helper )
前提条件
なお, この記事は [ Laravel 開発環境の構築 ( VirtualBox + Vagrant + Homestead + Composer + Eclipse ) 第1回 ] の 前編 と 後編 が前提条件となっています。これらの記事をご覧になっていない方は, 事前にご確認ください。
Laravel 開発環境の構築 ( PHP5.6 + PHP7.0 + PHP7.1 )
ここでは, サブドメインを使用して PHP バージョンの異なる複数プロジェクトに対応する方法を紹介します。
まずは仮想マシンを起動しましょう。ターミナル ( Git Bash ) で Vagrantfile があるディレクトリ ( 今回の場合は [ Homestead ] ) に移動してから下記のコマンドを実行します。
slangsoft@win7 MINGW64 ~
$ cd ~/LaravelProjects/Homestead/ <-- 入力 : Vagrantfile があるディレクトリに移動
slangsoft@win7 MINGW64 ~/LaravelProjects/Homestead (master)
$ vagrant up <-- 入力 : 仮想マシンの起動
次に, 仮想マシンに SSH でログインし, Composer を利用して Laravel ファイルをダウンロードしていくのですが, ここで注意が必要です。Laravel はバージョンによってシステム要件が異なります。
Laravel のシステム要件
Laravel | PHP | Mcrypt | OpenSSL | PDO | Mbstring | Tokenizer | XML |
---|---|---|---|---|---|---|---|
5.0 | >= 5.4.0 | PHP拡張 | PHP拡張 | PHP拡張 | PHP拡張 | - | - |
5.1 | >= 5.5.9 | - | PHP拡張 | PHP拡張 | PHP拡張 | PHP拡張 | - |
5.2 | >= 5.5.9 | - | PHP拡張 | PHP拡張 | PHP拡張 | PHP拡張 | - |
5.3 | >= 5.6.4 | - | PHP拡張 | PHP拡張 | PHP拡張 | PHP拡張 | PHP拡張 |
5.4 | >= 5.6.4 | - | PHP拡張 | PHP拡張 | PHP拡張 | PHP拡張 | PHP拡張 |
5.5 | >= 7.0.0 | - | PHP拡張 | PHP拡張 | PHP拡張 | PHP拡張 | PHP拡張 |
前回の記事 で [ TestProject ] と [ TestProject2 ] は作成済みなので, 今回は PHP5.6.32 を使いたいという想定で, Laravel5.2 を使って [ TestProject3 ] を追加します。
構築するプロジェクトの構成
プロジェクト名 | Laravel Ver | PHP | アクセス用URI |
---|---|---|---|
TestProject | 5.5 | 7.1 | http://homestead.test/ |
TestProject2 | 5.5 | 7.0 | http://myapp.homestead.test/ |
TestProject3 | 5.2 | 5.6 | http://php65.homestead.test/ |
それでは早速, [ TestProject3 ] ディレクトリに Laravel5.2 をダウンロードします。
既に仮想マシンは立ち上げましたので, 仮想マシンに SSH でログインし, 以下のコマンドを実行します。
vagrant@homestead:~$ cd ./code <-- 入力 : [ code ] ディレクトリに移動
vagrant@homestead:~/code$ composer create-project laravel/laravel --prefer-dist TestProject3 5.2 <-- 入力 : [ TestProject3 ] ディレクトリに Laravel5.2 をダウンロード
上記コマンドの実行でエラーが出た場合
2017年12月02日現在, 上記コマンドの実行で, 必ず下記のようなエラーが発生します。
Script php artisan clear-compiled handling the pre-update-cmd event returned with error code 255
原因は公式のバグなので, 以下のように対処してください。
まず, Windows7 のエクスプローラーを使用して下記ディレクトリを開き, [ TestProject3 ] ディレクトリが作成されていることを確認してください。
C:\Users\ユーザー名\LaravelProjects\TestProject3
このディレクトリ配下にある [ composer.json ] をテキストエディタで開き, 以下の修正を行います。
修正方法
"scripts": {
"post-root-package-install": [
"php -r \"copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"php artisan key:generate"
],
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"pre-update-cmd": [ <-- 削除
"php artisan clear-compiled" <-- 削除
], <-- 削除
"post-update-cmd": [
"php artisan clear-compiled", <-- 追加
"php artisan optimize"
]
},
修正完了後
"scripts": {
"post-root-package-install": [
"php -r \"copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"php artisan key:generate"
],
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"post-update-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
]
},
修正が完了したら, 仮想マシン上で [ TestProject3 ] ディレクトリへ移動し, 以下のコマンドを実行します。
vagrant@homestead:~/code$ cd ./TestProject3 <-- 入力 : [ TestProject3 ] ディレクトリへ移動
vagrant@homestead:~/code/TestProject3$ composer install <-- 入力
これで無事に Laravel5.2 のインストール ( [ TestProject3 ] プロジェクトの作成 ) は完了です。
次に, [ Homestead.yaml ] の [ sites: ] に設定を追加します。
C:\Users\ユーザー名\LaravelProjects\Homestead.yaml
sites:
- map: homestead.test
to: /home/vagrant/code/TestProject/public
php: "7.1" <-- この行を追加
- map: myapp.homestead.test
to: /home/vagrant/code/TestProject2/public
php: "7.0" <-- この行を追加
- map: php56.homestead.test <-- この行を追加
to: /home/vagrant/code/TestProject3/public <-- この行を追加
php: "5.6" <-- この行を追加
設定を追加したら, その設定内容を再読み込みさせる必要があります。ターミナル ( Git Bash ) で Vagrantfile があるディレクトリ ( 今回の場合は [ Homestead ] ) に移動してから下記のコマンドを実行します。
slangsoft@win7 MINGW64 ~
$ cd ~/LaravelProjects/Homestead/ <-- 入力 : Vagrantfile があるディレクトリに移動
slangsoft@win7 MINGW64 ~/LaravelProjects/Homestead (master)
$ vagrant provision <-- 入力 : 設定ファイルの再読み込み
続けて, hosts ファイルに追加したサイトの設定を追加します。
メモ帳を管理者権限で起動します。
[ ファイル(F) ] → [ 開く(O)... ] を実行し, [ ファイル名(N): ] 欄に下記のファイル名を入力して [ 開く(O) ] ボタンをクリックします。
C:\Windows\System32\drivers\etc\hosts
hosts ファイルの最終行に下記を追記し, 上書き保存してメモ帳を閉じます。
192.168.10.10 homestead.test
192.168.10.10 myapp.homestead.test
192.168.10.10 php56.homestead.test <-- この行を追加
今度はブラウザから [ http://php56.homestead.test ] にアクセスしてみてください。下図のように表示されれは成功です。
ただ, これでは意図したとおりに PHP5.6 で動作しているかが判断できませんので, アクセスした時に PHP のバージョンを表示するように内容を変更してみましょう。
Windows7 のエクスプローラーを使用して下記ディレクトリを開き, その中にあるwelcome.blade.php をテキストエディタで開きます。
C:\Users\[ユーザー名]\LaravelProjects\TestProject3\resources\views
PHP のバージョンを表示させるために, 以下のように修正します。
[ TestProject3 ] の修正方法
<body>
<div class="container">
<div class="content">
<div class="title">Laravel 5</div>
<div><?php echo 'Current PHP version: ' . phpversion(); ?></div> <-- この行を追加
</div>
</div>
</body>
同様の修正を, [ TestProject ] と [ TestProject2 ] にも行ってください。
[ TestProject ] と [ TestProject2 ] の修正方法
<body>
<div class="flex-center position-ref full-height">
@if (Route::has('login'))
<div class="top-right links">
@auth
<a href="{{ url('/home') }}">Home</a>
@else
<a href="{{ route('login') }}">Login</a>
<a href="{{ route('register') }}">Register</a>
@endauth
</div>
@endif
<div class="content">
<div class="title m-b-md">
Laravel
</div>
<div><?php echo 'Current PHP version: ' . phpversion(); ?></div> <-- この行を追加
<div class="links">
<a href="https://laravel.com/docs">Documentation</a>
<a href="https://laracasts.com">Laracasts</a>
<a href="https://laravel-news.com">News</a>
<a href="https://forge.laravel.com">Forge</a>
<a href="https://github.com/laravel/laravel">GitHub</a>
</div>
</div>
</div>
</body>
ここまでできたら, それぞれのページを表示してみます。
期待通り, PHP7.1 / PHP7.0 / PHP5.6 が切り替わっていることが確認でしました。