Laravel homesteadを利用したLaravel 5 ローカル開発環境の構築


Laravelは、フロントエンドのビルドツールLaravel ElixrがGulpタスクであるためPHPの他にNode環境が必要になったりと、ひととおり開発環境を揃えるのが若干面倒だったりします。
そこで、Laravelには、ローカル開発用のVagrant box Laravel Homestead が用意されています。

この記事では、Homesteadを利用したLaravel5の開発環境の構築手順を試してみたのでまとめてみました。

前提条件としてVirtualboxとVagrantはインストール済みとして解説します。
boxはVirtualboxとVMWare プロバイダ用がありますが、ここではVirtualboxを利用します。

HomesteadのVagrant boxを追加

vagrant boxコマンドでhomestead boxを追加します。

$ vagrant box add laravel/homestead
==> box: Loading metadata for box 'laravel/homestead'
    box: URL: https://atlas.hashicorp.com/laravel/homestead
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) virtualbox
2) vmware_desktop

Enter your choice: 1
==> box: Adding box 'laravel/homestead' (v0.4.1) for provider: virtualbox
    box: Downloading: https://atlas.hashicorp.com/laravel/boxes/homestead/versions/0.4.1/providers/virtualbox.box
==> box: Successfully added box 'laravel/homestead' (v0.4.1) for 'virtualbox'!

virtualboxを選択します。

Homesteadのインストール

ユーザのホームディレクトリにHomesteadをインストールします。
Homesteadには、Vagrantfileと初期設定のためのシェルのみが含まれます。

以下のコマンドを実行してHomesteadをセットアップします。

$ ~
$ git clone https://github.com/laravel/homestead.git Homestead
$ cd Homestead/
$ bash init.sh
Homestead initialized!

クローンして、init.shを実行すると設定を含む~/.homesteadディレクトリが作成されます。

Homesteadの設定

設定は、init.shを実行して生成された~/.homestead/Homestead.yamlを編集します。

Laravelプロジェクトのディレクトリを指定するfolders.mapのみを設定、他はデフォルトのままにしておきます。
以下の設定で、Vagrant upするとVagrantの/home/vagrant/Code/Laravelディレクトリから~/workspace/laravelにあるLaravelのプロジェクトが参照されます。

# ~/.homestead/Homestead.yaml

---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    - map: ~/workspace/laravel
      to: /home/vagrant/Code/Laravel

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

databases:
    - homestead

variables:
    - key: APP_ENV
      value: local

# blackfire:
#     - id: foo
#       token: bar
#       client-id: foo
#       client-token: bar

# ports:
#     - send: 93000
#       to: 9300

Vagrantアクセス用 SSHキーの生成

Vagrantで起動したVMへはSSHログインしますが、ログイン用のSSHキーが無い場合は生成する必要があります。
Homestead.yamlのauthorizekeysには、ssh-keygenで生成されるキーのデフォルトのパスが指定されているので、設定のままプロンプトは全てそのままEnterします。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/hrendoh/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/hrendoh/.ssh/id_rsa.
Your public key has been saved in /Users/hrendoh/.ssh/id_rsa.pub.
The key fingerprint is:
ec:90:d1:80:6f:8a:7b:aa:e4:87:66:90:90:61:72:d1 hrendoh@localhost.local
The key's randomart image is:
+--[ RSA 2048]----+
|  .o ..          |
|o.. E  o         |
|o+   .. .        |
|o     o+         |
|.. . oo S        |
|o . .  o         |
|....    .        |
|o+...            |
|+ooo             |
+-----------------+

ホストを追加

/etc/hostsに、ipに指定されているIPアドレスをsites.mapに指定されているホスト名に割り当てる行を追加します。

# /etc/hosts
192.168.10.10  homestead.app

以上でHomesteadの準備は完了

Laravel プロジェクトを生成

vagrantを起動して、プロジェクトを生成します。

$ vagrant up
$ vagrant ssh
$ cd ~/workspace
$ composer create-project laravel/laravel --prefer-dist laravel

動作確認

http://homestead.app/にアクセスすると、以下のようにLaravelの動作を確認できます。
Laravel5IndexPage

補足: プロジェクトごとにHomesteadをインストールするには

ここまでの内容は、Homestead環境をグローバルに利用する例になり、複数のプロジェクトで利用するには、共通のHomestead.yamlに設定を追加していくことになり、メンテナンス性があまり良くありません。

そこで、ホストPCにもPHPとComposerの環境が必要になりますが、プロジェクトごとにHomestead環境を用意することもできます。

参考: Per Project Installation

Composerでプロジェクトにhomesteadコマンドをインストールします。

$ composer require laravel/homestead --dev

homestead makeコマンドで、プロジェクトの設定が含まれたHomestead.yamlとVagrantfileを生成することができます。

$ php vendor/bin/homestead make

あとは、SSHキーとHostsの設定ができていれば、vagrant upするだけ

,