これは Laravelリファレンス発売記念、販売促進アドベントカレンダー
の2015年12月12日分です。
Homestead
LaravelにはVagrantを利用して簡単に開発環境が構築できるHomesteadというboxが公式で用意されています。
HomesteadはLaravel専用ではなく、様々なPHP開発環境が構築できます。
Laravel Homestead(en)
Laravel Homestead(jp)
How
Homesteadの基本的な利用方法は公式サイトや、多くの方のブログやLaravelリファレンスでも取り上げています。
通常の利用方法であれば、VagrantとVirtualBoxさえあればすぐに利用できます。
利用方法としては主に、
プロジェクトごとにhomestead環境を作る、
または統合開発環境としてHomesteadで複数の環境を扱う、
の2種類の用途があります。
どちらも利用方法は変わりませんが、
プロジェクトごとに環境を構築する場合は設定ファイル出力時にパスの情報などを自動で変換する
程度のメリットはありますが、どちらで作っても複数の環境を持たせることができます。
まずは簡単なおさらいです。
統合環境構築
まずはVagrantにlaravel/homesteadを追加します。
$ vagrant box add laravel/homestead
つぎにリポジトリをcloneします。
$ git clone https://github.com/laravel/homestead.git Homestead
php7を利用する場合は、
$ git clone -b php-7 https://github.com/laravel/homestead.git Homestead
としても良いですが、あとで変更することもできます。
cloneしたHomesteadでつぎのコマンドを実行すると、ホームディレクトリ配下に.Homesteadが作成され、
設定ファイルのHomestead.ymlなどが配置されます。
$ bash init.sh
実行できない場合は755などの権限を与えておきおましょう。
作成された.Homestead/Homestead.ymlに利用するプロジェクトのディレクトリを記述します。
folders: # Vagrantで利用するローカルのプロジェクトパス - map: ~/Code # Vagrantのディレクトリ配下に作成するプロジェクト to: /home/vagrant/Code sites: # vhosts - map: homestead.app # 上記の作成プロジェクトの公開ディレクトリを指します to: /home/vagrant/Code/Laravel/public
環境に合わせて変更します。
プロジェクトごとに構築
プロジェクト配下でComposerコマンドを使ってインストールします。
$ composer require laravel/homestead --dev
php-7を指定してもかまいません。
Laravel以外でもかまいませんので、導入する場合は下記のようになります(php-7)。
"require": { "php": "^5.5 || ^7.0", "roave/security-advisories": "dev-master", "zendframework/zend-expressive": "~1.0.0@rc || ^1.0", "zendframework/zend-expressive-helpers": "^1.2", "zendframework/zend-stdlib": "~2.7", "zendframework/zend-expressive-fastroute": "^1.0", "zendframework/zend-servicemanager": "^2.5", "ocramius/proxy-manager": "^1.0" }, "require-dev": { "phpunit/phpunit": "^4.8", "squizlabs/php_codesniffer": "^2.3", "filp/whoops": "^1.1", "symfony/var-dumper": "~3.0", "laravel/homestead": "dev-php-7" },
インストール完了後、つぎのコマンドを実行します。
$ vendor/bin/homestead make
プロジェクト配下にパスが記述された状態でHomestead.ymlが作成されます。
folders: - map: "/var/vhosts/expressive" to: "/home/vagrant/expressive" sites: - map: homestead.app to: "/home/vagrant/expressive/public"
どちらの方法であっても、最後にvagrant upで開発環境が構築されます。
カスタマイズ
日本語対応やXdebugの設定、エクステンションの導入はHomesteadで一緒に作成されるafter.shを使います。
プロジェクトごとに作成する場合は、makeコマンドでオプションを指定すると良いでしょう。
$ vendor/bin/homestead make --after
#!/bin/sh sudo ln -sf /usr/share/zoneinfo/Japan /etc/localtime sudo locale-gen ja_JP.UTF-8 sudo /usr/sbin/update-locale LANG=ja_JP.UTF-8
エクステンションなどの設定もここで記述できます。
php5環境の場合は/etc/php5、
php7環境の場合は/etc/php となります。
opcache.revalidate_freqを変更したい場合は、after.shに記述すると良いでしょう。
sudo echo "opcache.revalidate_freq = 0" >> /etc/php5/mods-available/opcache.ini
これらを利用することで、vagrant up
後に設定を追加で実行する必要はなくなります。
Homesteadを知る
Homesteadはマニュアルに載っていない方法もあります。
sites
hhvmを利用する場合は、sitesに下記のように追加してください、とマニュアルにあります。
sites: - map: homestead.app to: /home/vagrant/Code/Laravel/public hhvm: true
このほかにsitesにはsymfony2に対応したNignxのコンフィグを作成させることができます。
この場合はsitesをつぎのように記述します。
sites: - map: homestead.app to: /home/vagrant/Code/Laravel/public type: symfony2
デフォルトではこのtypeがlaravelとされていますので必要に応じて変更しましょう。
type:laravelであってもほとんど不自由なく、どのフレームワークでも利用できるはずです。
databases
データベースはデフォルトではhomesteadが作成されますが、
必要に応じて複数作成できます。
その場合は以下のように配列に追記します。
databases: - homestead - homestead2 - homestead3 - homestead4
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | homestead | | homestead2 | | homestead3 | | homestead4 | | mysql | | performance_schema | | sys | +--------------------+ 8 rows in set (0.00 sec)
postgreSQLを利用する場合でも同じです。
variables
現バージョンのHomesteadのyamlからは削除されていますが、
これを利用して環境変数を追加できます。
laravelのenvヘルパー関数はgetenvが最初に実行されますので、APP_KEYなどをここに記述しておけば、
作成忘れなどもありません。
variables: - key: "APP_ENV" value: "local" - key: "APP_KEY" value: "11112222333344445555666677778888"
vagrant up
後に確認してみましょう。
$ php -r "echo phpinfo();" | egrep 'APP_KEY|APP_ENV'
このほかにデフォルトで用意されているkeysにもgithubの鍵を追加したり、用途に合わせて追加することができます。
おまけ
Homesteadはubuntu14.04がベースになっていますが、CentOSも使いたい!
という方がいるかもしれません。
ということで幾つか機能は落としてありますが(MySQLしか選べない、php7しなかないなど)、
CentOS版のHomesteadシンプル版のスクリプトを置いてあります。
boxに登録していませんので、配置して叩くだけで環境構築ができますが、多少時間がかかります。
readmeにありますが、これはCentOS7.1とphp7で構成されています。
またHomesteadよりも多少実戦向きな環境として、
- fluentd
- elasticsearch (1.7 / port 9200)
- couchbase 4.1 (port 8091)
を追加して、fluentdはLaravel, Lumenですぐに利用ができます。
elasticsearchはkuromojiなどのプラグインも導入されます(1.7ですが)。
用途に合っていればご自由にお使いください
さいごに
Laravelリファレンスをよろしくお願いいたします!