Laravel5をHomesteadを使わずWindows+Vagrant環境でセットアップする

# はじめに
ついに必要に迫られてしまったのでLaravel5を触ってみました。
公式では、

> Laravelフレームワークを動作させるには多少のシステム要件があります。もちろん、Laravel Homestead仮想マシンでは、要求が全て満たされています。ですから、Laravelのローカル開発環境としてHomesteadを活用されることを強くおすすめします。

> 引用元: [Laravel5.4 インストール https://readouble.com/laravel/5.4/ja/installation.html](https://readouble.com/laravel/5.4/ja/installation.html)

と、このようにローカル開発環境にはHomestead使えば楽でっせ、という記述があるものの、それで楽をすると本番で困りそうなので、Vagrant上で動かせるようにしてみました。
地味に導入が面倒だったので覚え書きとして、セットアップ～Welcomeページを表示させるまでを記します。

# 検証済み環境
* Laravel5.4 (2017年6月19日現在の最新)
* Windows10
* Vagrant + VirtualBox
* GitBash

今まで散々Dockerの記事書いてきましたが、今回はVagrantで。
[Docker for Windowsでローカル開発環境(LAMP)を作るのにどハマリしたので備忘録。 - Qiita](http://qiita.com/saken649/items/61ee94032686aa18e79e)
[【Docker×Windows】Hyper-Vが使えないならVagrantを使えば良いじゃない - Qiita](http://qiita.com/saken649/items/fe4cbfba105955c609b9)

# セットアップ後の想定環境
* OS: CentOS 7.1
* PHP: 7.1
    * リポジトリにはWebtaticを使用します。
* RDBMS: MariaDB

# 手順
## 1. Vagrant環境をセットアップする

今回使用するイメージは`bento/centos-7.1`。

```bash:bash
vagrant box add bento/centos-7.1
vagrant init bento/centos-7.1
vagrant up
```

`vagrant up`後のセットアップコマンドは以下の通り。

```bash:bash
yum -y update
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

# mcryptの依存モジュールのインストール
yum -y install libmcrypt libmcrypt-devel

# 一気に必要なものをインストール
yum -y install httpd php71w php71w-cli php71w-common php71w-devel php71w-mbstring php71w-mcrypt php71w-mysql php71w-pdo php71w-pear php71w-pecl-xdebug php71w-xml mariadb mariadb-server

# httpd.confを編集
# /var/www、/var/www/htmlのAllowOverrideをAllにしておく
# DocumentRootを /var/www/html/public にしておく(後述)

# 起動・登録
systemctl start httpd.service
systemctl enable httpd.service
systemctl start mariadb.service
systemctl enable mariadb.service

# composerのインストール
# cf. https://getcomposer.org/download/
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('SHA384', 'composer-setup.php') === '669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
```

### Server Requirements について
> Homesteadを使用しない場合は、以下の要件を満たす必要があります。
・PHP >= 5.6.4
・OpenSSL PHP拡張
・PDO PHP拡張
・Mbstring PHP拡張
・Tokenizer PHP拡張
・XML PHP拡張

> 引用元: [Laravel5.4 インストール https://readouble.com/laravel/5.4/ja/installation.html](https://readouble.com/laravel/5.4/ja/installation.html)

Homesteadを使用しない場合のLaravelの動作環境として、公式ではこのように記述されています。
ですが、上記のコマンド群で一通り対応済みとなります。

* PHP >= 5.6.4  
    => PHP7.1なので問題なし
* OpenSSL PHP Extension  
    => php71w-commonの中に入っている
* PDO PHP Extension  
    => php71w-pdoとしてインストール済み
* Mbstring PHP Extension  
    => php71w-mbstringとしてインストール済み
* Tokenizer PHP Extension  
    => php71w-commonの中に入っている
* XML PHP Extension  
    => php71w-xmlとしてインストール済み

cf. [PHP 7.1 on CentOS/RHEL 6.8 and 7.3 via Yum - Webtatic.com](https://webtatic.com/packages/php71/)

。。そういえばいつからmcryptいらなくなったの
一応入れてはありますが

Webtaticは各パッケージで何が一緒に入ってくるのか、丁寧に書いてあるのが有り難いですね。

### DocumentRoot について
地味に詰まったところ。
Laravelの場合、 **ApacheのDocumentRootを`public`に指定** しないといけないようです。  

> 基本的にはApacheでLaravelアプリケーションのバーチャルホストを定義するだけ。Laravelアプリケーションのpublicフォルダをドキュメントルートに指定します。

> 引用元: [ApacheでLaravel5アプリケーションを動かす](http://murayama.hatenablog.com/entry/2015/09/10/081522)

 ~~公式ドキュメントにそんな記述あったかな。。~~ 見落としていたらごめんなさい。

**追記**
**ちゃんと書いてありました。** 大変失礼致しました。
なぜ見落としていたのか。。ndxbn様、ご指摘有難うございます。
https://readouble.com/laravel/5.4/ja/installation.html#configuration

DocumentRoot直下にlaravelのプロジェクトを展開する場合、DocumentRootは以下のような設定になります。

```bash:/etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/html/public"
```

### 2. Windowsにもcomposerをインストール
各種`php artisan`や`laravel`コマンドをローカルWindows上でも使用することがあるので、Windows上にもcomposerをインストールしちゃいます。
今回みたいな環境の場合、`php artisan make:controller HogeFugaController`とかはローカルで打ちますからね。
もちろん、マイグレーションなどはリモートで。

1. [https://getcomposer.org/download/](https://getcomposer.org/download/)から`Windows Installer`をインストールする。
2. GitBashから`which composer`として、パスが通っていることを確認

## 3. WindowsへのLaravelコマンドのインストール
ローカルWindows上において`laravel`コマンドを使用するために、`laravel`コマンドをインストールします。

```bash:GitBash
composer global require "laravel/installer"
```

## 4. プロジェクトの作成
ローカルWindows上にプロジェクトを作成します。
ワーキングディレクトリにて、下記コマンドを実行します。

```bash:GitBash
laravel new [ProjectName]
```

すると本体や各種必要モジュールなどがダウンロードされてきます。
これでインストールはいっちょ上がり。

## 5. リモートサーバーへの転送
FTPクライアントなどで、Vagrantの `/var/www/html` にLaravelのプロジェクトディレクトリを置きます。
今回は、html直下にLaravelの各種ディレクトリが展開されるように配置しました。

## 6. Welcomeページが開けるか確認
ここまで問題なければ、[http://192.168.33.10](http://192.168.33.10)でLaravelのWelcomeページが開けるはずです。

# さいごに
今までずっと業務でCakePHP2しか使ってこなかった結果、composerとかも全く触れてこなかったので、ここまでだけでもだいぶ手間取る結果に。
ただ単にDocumentRootに置いて終わり！というCakeとは全然違いますね。
だいぶ昔にLaravel4系を触ったこともありましたが、最早記憶の彼方。。

ララ帳見ながら触っている最中ですが、なかなか今までと違い過ぎて戸惑ってます。
早いところ慣れなければ。