Laravel Homesteadを利用してLaravelを利用するための準備をする

Laravelの勉強をするために環境を構築した。
Laravelの公式パッケージでLaravel Homesteadというものが提供されているらしいので、それを利用することにした。

本記事をまとめている途中に情報収集していて気付いたのだが、公式サイトに詳しく載っていた…。
基本的にそっちをみた方がよい気がするので、このページに来た人用にリンクを貼っておきます。

  公式：https://readouble.com/laravel/5.1/ja/homestead.html

    ※上記ページでは、Ubuntuのバージョンは14.04となっているが、最新のhomesteadではUbuntu16.04になっていた(2016/10 時点)。

# Homestead利用準備

## 既にHomesteadを利用している場合。

```
% git clone https://github.com/laravel/homestead.git LaravelHomestead
% cd LaravelHomestead
```

## ホストのマシンで初めてHomesteadを利用する場合。

```
% vagrant box add laravel/homestead
% git clone https://github.com/laravel/homestead.git LaravelHomestead
% cd LaravelHomestead
% bash ./init.sh
```

「~/.homestead」というディレクトリが出来ている。
その中に、Homestead.yml、after.sh、aliasesなどの共通の設定ファイルが存在している。

プロジェクト固有の設定ファイルは、プロジェクトルート直下の「src/stubs/」以下に入っている。

Homestead.yamlに、IPやメモリ、sshの設定などを記載する。
after.shには、vagrant実行時にHomestead環境に反映するものを記載する。

日本語環境用に設定する例

``` bash:after.sh
#!/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
```

# Vagrantの実行

後は、通常通りVagrantを実行する。

```
% vagrant up
```

# webサイトにアクセス

Nginxが自動起動しているので、Homestead.yamlの「sites」に設定した項目に従ってWebサイトにアクセス可能である。

## Homestead.yamlについて

IP、メモリ、CPU、Vagrantのprovider(VirtualBox、他)、データベース、ssh、ファイルの同期など設定ができる。
同期するディレクトリは、複数設定できる。

``` yaml:Homestead.yaml
folders:
    - map: ~/work/laravel
      to: /home/vagrant/project

    - map: ~/work/settings
      to: /home/vagrant/settings

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

nfsを利用して同期する場合、HHVMを利用する場合には、以下のようにする。

``` yaml:Homestead.yaml
folders:
    - map: ~/work/laravel
      to: /home/vagrant/project
      type: "nfs"

sites:
    - map: homestead.app
      to: /home/vagrant/project/Laravel/public
      hhvm: true
```

# Laravelのインストール

## 専用インストーラでインストール

```
% composer global require "laravel/installer"
```

プロジェクトを作成

```
% laravel new プロジェクト名
```

## composerでインストール

```
% composer create-project laravel/laravel:5.1 プロジェクト名
```

## Laravelを日本語化

設定ファイルなどのコメントを日本語へ翻訳するには、comja5をインストールする。

``` shell:プロジェクトにインストール
% composer require laravel-ja/comja5:~1
% ./vendor/bin/comja5
```

``` shell:globalにインストール
% composer global require laravel-ja/comja5:~1
% comja5
```
# インストール後の設定

## パーミッションの設定

開発環境の場合
※本番の場合には、適切なパーミッションを設定すること。

```
% sudo chmod -R a+w storage/*
% sudo chmod -R a+w bootstrap/cache
```

## コンパイル済みコアファイルの削除

クラスファイル読み込みの速度向上のために、ファイルを連結する仕組みを提供している。
スタックトレースは、この連結されたファイルを示すため、開発時には、削除した方がよい。

``` shell:常に削除する場合
% php artisan clear-compiled
```

``` shell:デバッグモードのときにのみ削除
% php artisan optimize
```

## Whoops

```
% composer require filp/whoops:~1.0
```

``` php:app/Exceptions/Handler.php
public function render($request, Exception $exception)
{
    if (config('app.debug')) {
        $whoops = new \Whoops\Run;
        $whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler());
        return new \Illuminate\Http\Response(
            $whoops-handleException($exception),
            $exception->getStatusCode(),
            $exception->getHeaders()
        );
    }
    return parent::render($request, $exception);
}
```

# サーバを立ち上げる

``` shell:サーバを立ち上げる
% php artisan serve [--host=ホスト名] [--port=ポート番号]
```

# ドキュメントルート

ホストOSからLaravelアプリにアクセスするためには、Laravelアプリがnginxのドキュメントルートとなるように設定する必要がある。

`~/project`以下に「sample」というlaravelのプロジェクトを作った場合は、Homestead.yamlで「to: /home/vagrant/project/Laravel/public」と設定しているので、以下のコマンドを実行することで「http://[IP]:80」にアクセスするとLaravelアプリケーションにアクセスできる。

``` shell:
% cd ~/project/Laravel
% ln -s ~/project/sample/public public
```