Homesteadを使いこなそう

これは Laravelリファレンス発売記念、販売促進アドベントカレンダー

www.adventar.org

の2015年12月12日分です。

Homestead

LaravelにはVagrantを利用して簡単に開発環境が構築できるHomesteadというboxが公式で用意されています。
HomesteadはLaravel専用ではなく、様々なPHP開発環境が構築できます。

Laravel Homestead(en)
Laravel Homestead(jp)

How

Homesteadの基本的な利用方法は公式サイトや、多くの方のブログやLaravelリファレンスでも取り上げています。 通常の利用方法であれば、VagrantVirtualBoxさえあればすぐに利用できます。
利用方法としては主に、
プロジェクトごとに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に登録していませんので、配置して叩くだけで環境構築ができますが、多少時間がかかります。

github.com

readmeにありますが、これはCentOS7.1とphp7で構成されています。
またHomesteadよりも多少実戦向きな環境として、

  • fluentd
  • elasticsearch (1.7 / port 9200)
  • couchbase 4.1 (port 8091)

を追加して、fluentdはLaravel, Lumenですぐに利用ができます。
elasticsearchはkuromojiなどのプラグインも導入されます(1.7ですが)。

用途に合っていればご自由にお使いください

さいごに

Laravelリファレンスをよろしくお願いいたします!

www.amazon.co.jp