【Laravel超入門】開発環境の構築（VirtualBox + Vagrant + Homestead + Composer）

# **はじめに**

Laravel は聞いたことあるけど、Vagrant？ VirtualBox？ Homestead？ Composer？ 何それ？ という方が対象です。
それぞれについても簡単に説明しますので、この記事を読めば、それぞれが何をしているのか、何となく理解できるかと思います。
単純に Laravel を動かしたいだけなら、XAMPP または MAMP の環境を利用するのが簡単ですが、今回は、Homestead というものを利用し、仮想環境を構築することで、VirtualBox 、 Vagrant 、 Composer などについても理解を深めていきたいと思います。

私は Mac と Windows の両方で、Homestead を利用した開発環境を構築しました。

|OS|VirtualBox|Vagrant|Git for Windows|
|:--|:--|:--|:--|
|macOS Sierra 10.12.3|5.1.14|1.9.1|-|
|Windows 7 Home Premium 64bit|5.1.14|1.9.2|2.12.0|

この記事では、Mac の環境をメインに説明しますが、Windows 環境で行う方法も補足します。

開発環境の構築は、ターミナルを使ってコマンドで指示をします。
この記事内では、コマンド自体の詳しい説明はしませんので、不明な箇所は調べてください。
Windows の方で、コマンドプロンプトを利用している方は、[Git for Windows](https://git-for-windows.github.io/) をインストールして、Git Bash というソフトを使って作業してください。

最初に Laravel、VirtualBox、Vagrant、Homestead、Composer について簡単に学んだ後に、実際に開発環境の構築を行います。
私自身未熟ですので説明に誤りがあるかもしれません。
誤りがあれば、ご指摘ください ((_ _ (´ω｀ )ﾍﾟｺ

+ [第1章 Laravel とは](http://qiita.com/7968/items/97dd634608f37892b18a#%E7%AC%AC1%E7%AB%A0-laravel-%E3%81%A8%E3%81%AF)
+ [第2章 VirtualBox とは](http://qiita.com/7968/items/97dd634608f37892b18a#%E7%AC%AC2%E7%AB%A0-virtualbox-%E3%81%A8%E3%81%AF)
+ [第3章 Vagrant とは](http://qiita.com/7968/items/97dd634608f37892b18a#%E7%AC%AC3%E7%AB%A0-vagrant-%E3%81%A8%E3%81%AF)
+ [第4章 Homestead とは](http://qiita.com/7968/items/97dd634608f37892b18a#%E7%AC%AC4%E7%AB%A0-homestead-%E3%81%A8%E3%81%AF)
+ [第5章 Composer とは](http://qiita.com/7968/items/97dd634608f37892b18a#%E7%AC%AC5%E7%AB%A0-composer-%E3%81%A8%E3%81%AF)
+ [第6章 開発環境の構築](http://qiita.com/7968/items/97dd634608f37892b18a#%E7%AC%AC6%E7%AB%A0-%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%81%AE%E6%A7%8B%E7%AF%89)
+ [Laravel を学べる書籍](https://qiita.com/7968/items/97dd634608f37892b18a#laravel-%E3%82%92%E5%AD%A6%E3%81%B9%E3%82%8B%E6%9B%B8%E7%B1%8D)
+ [TIPS](http://qiita.com/7968/items/97dd634608f37892b18a#tips)

Laravel を始めたいと考えている方の一助になれば嬉しいです。

# **第1章 Laravel とは**

[Laravel](https://laravel.com/)（ララベル）は、[Taylor Otwell](https://twitter.com/taylorotwell) さんが開発した PHP のフレームワークです。
Taylor さんは Microsoft の  [.NET](https://ja.wikipedia.org/wiki/.NET_Framework) の開発に関わっていた方のようです。
Laravel は、フリーのオープンソースで、MIT ライセンスのため、自由に利用できます。
PHP のフレームワークはいくつかありますが、Laravel は世界的に人気があるようです。
各 PHP フレームワークがどのくらい検索されているか Google Trends で見てみましょう。

![laravel-googletrends-all.jpg](https://qiita-image-store.s3.amazonaws.com/0/72985/d59e7284-8afc-855a-49d6-c1d51cebd4c0.jpeg)

引用：[Google Trends](https://trends.google.co.jp/trends/)

世界で見ると他のフレームワークを引き離して一番検索されていますね。

日本ではどうか見てみましょう。

![laravel-googletrends-japan.jpg](https://qiita-image-store.s3.amazonaws.com/0/72985/3368567b-bf0c-0eed-ff90-8d3ce1078c54.jpeg)

引用：[Google Trends](https://trends.google.co.jp/trends/)

CakePHP をハナ差で抜き、一番に検索されているようです。

Qiitaでのトレンドはどうなのか、@tag1216 さんが制作した [QiiTrend](http://qiita.com/tag1216/items/e65496b932ca6790268b) を利用して見てみましょう。

![laravel-qiitrend.jpg](https://qiita-image-store.s3.amazonaws.com/0/72985/d11f3ca7-1649-4836-7ef5-7de6bf14db67.jpeg)

引用：[QiiTrend](https://qiitrend.herokuapp.com/)

2015 年は CakePHP と同じくらいの投稿数でしたが、2016 年は Laravel 関連の記事が一番投稿されたようです。
PHP のフレームワークは他にもありますが、その中でも Laravel は注目のフレームワークと言えるかと思います。

Laravel について詳しく知りたい方は、[公式サイト（英語）](https://laravel.com/) の [ドキュメント](https://laravel.com/docs/5.4) をご覧ください。
英語はちょっとという方は、日本語に訳した [ドキュメント](http://laravel.jp/) をご覧ください。

次は、Laravel のバージョンとリリースについて見ていきましょう。

## **Laravel のバージョンとリリース**

Laravel は半年で新しいバージョンがリリースされます。
基本的に、バグ対応は 6 ヶ月、セキュリティ対応は 1 年です。
それよりも対応期間が長い LTS（Long Term Support）があり、バグ対応は 2 年間、セキュリティ対応は 3 年間になります。
各バージョンのリリースは [Laravel News](https://laravel-news.com/) の [Laravel Release Process](https://laravel-news.com/laravel-release-process/) に記載があります。

|バージョン|リリース|バグ対応|セキュリティ対応|
|:--|:--|:--|:--|
|Laravel 5.1 LTS|2015.6.9|2017.6.9|2018.6.9|
|Laravel 5.2|2015.12.21|2016.6.21|2016.12.21|
|Laravel 5.3|2016.8.23|2017.2.23|2017.8.23|
|Laravel 5.4|2017.1.24|2017.7.24|2018.1.24|
|Laravel 5.5 LTS|2017.8.30|2019.8.30|2020.8.30|
|Laravel 5.6|2018.2.7|2020.8.7|2019.2.7|
|Laravel 5.7|2018.9.4|2019.2.4|2019.9.7|
|Laravel 5.8|2019.2.26|2019.8.26|2020.2.26|

セキュリティ対応しているバージョンを利用しましょう。
バージョン指定がなければ、セキュリティ対応の長い LTS または 最新バージョンをインストールしてください。

次は、Laravel を学ぶときに、よく見る用語を確認しましょう。

## **Laravel でよく見る用語**

開発環境を構築しただけで、私の Laravel 知識は 0 ですが、Laravel について調べてるときによく見かける用語を一覧にしました。
検索するときに用語を入れると、欲しい情報を見つけることができるかもしれません。
初見の方は、一通りこんな用語あるのか程度に見てください。
雑な情報は無視してください。

|用語|読み方|雑な情報（誤りがあるかもしれない）|
|:--|:--|:--|
|Artisan|アーティザン|Laravel 用のコマンドラインインターフェイス。新たにファイルを作成したりするときにコマンドぽちぽちするっぽい。|
|Eloquent|エロクアント|ORM。SQL？なにそれ？という感じでもDBの操作ができるっぽい。これ使いたい。|
|Blade|ブレード|viewテンプレート。|
|Service Container・IoC Container|サービスコンテナ・IoCコンテナ|DIコンテナ。Laravel5 から IoC コンテナからサービスコンテナに名称が変わったらしい。|
|Facade|ファサード|サービスコンテナを何かしてるっぽい。|
|Migration|マイグレーション|DBの履歴管理。複数人でDBいじってやっちまったときに戻せたりできるらしい。|
|Elixir|エリクサー|Laravel 用に作られた gulp タスク群。|

次は、VirtualBox について見ていきましょう。

# **第2章 VirtualBox とは**

[VirtualBox](https://www.virtualbox.org/)（ヴァーチャルボックス）は、既存のOS上で別のOSを実行できる仮想化ソフトウェアです。
フリーのオープンソースソフトウェアで、ORACLE（オラクル）というアメリカの会社が開発しています。
VirtualBox は、Mac や Windows などの環境で利用できます。
VirtualBox を使うと、私たちが使っている Mac または Windows 上で別の OS を実行できるようになります。
実際に Mac 上で VirtualBox を使い Windows を起動している画面です。

![vm-windows.jpg](https://qiita-image-store.s3.amazonaws.com/0/72985/4252ad2e-3529-41b6-e730-d225c1d65463.jpeg)

一つのアプリケーションのように Windows を実行して、操作できます。
**この場合、Mac 側をホストOSと呼び、Windows 側をゲストOSと呼びますので覚えておいてください。**

お使いの Mac や Windows に Web サーバーや PHP、データベースをインストールして、開発環境を構築することも可能ですが、本番環境では別の OS が使われていたり、PHP やデータベースなどのバージョンが違うなど環境が異なるため、本番環境では動作しないということがあります。
VirtualBox の仮想化ソフトウェアを使えば、本番環境と同じまたは近い環境を構築し、その環境で開発できるという利点があります。

VirtualBox には共有フォルダという機能があります。
先ほど、VirtualBox を使って Mac 上で Windows を起動しました。
Mac 側にあるフォルダと Windows 側にあるフォルダを共有することができます。
この機能を利用することで、Mac 側で変更した内容は、リアルタイムで Windows 側の共有しているフォルダにも反映されます。
逆も同じく、Windows側で変更した内容は、リアルタイムでMac側の共有フォルダにも反映されます。

この機能を利用し、最終的には下記のような環境を構築します。

![virtualbox-share.png](https://qiita-image-store.s3.amazonaws.com/0/72985/3a4e6307-917f-7af3-86b7-5a96be3b4bf2.png)

上図に記載した Laravel-A と Laravel-B というフォルダ名は任意で決められますが、ここではこのようなフォルダ名にしたと仮定して説明します。
Mac のローカル上にある Laravel-A というフォルダと、ゲストOS にある Laravel-B というフォルダを共有するように設定します。
共有設定することで、コードの変更などの作業は Mac 側で行えます。
そのため、普段利用しているテキストエディタや IDE を使うことが可能です。
Mac 側には Laravel を動かすのに必要な Web サーバーや PHP、データベースなどが入っていませんが、ゲストOS側には入っているため、実行できます。
ホストOS 側のブラウザから `192.168.○○.○` または `homestead.test` と入力すると、ゲストOS側にある Laravel のフォルダを参照します。
そのため、ホストOS 側のブラウザで簡単に実行結果を確認することができます。
この一連の流れを確認するだけで仮想環境の利点は伝わったかと思います。
便利な仮想環境ですが、環境を構築するのに手間がかかります。
Laravel を利用するには、Web サーバーや PHP、データベースなどが必要です。
VirtualBox の仮想環境に Ubuntu（ウブントゥ） という OS をインストールし、Nginx（エンジンエックス） というWebサーバーを入れて、 PHP と MySQL をインストールし、Laravel が動作する環境を構築する必要があります。
他にも先ほど説明した共有フォルダの設定などもする必要があります。

OS や Web サーバーのインストールの仕方も設定方法もよくわからないし、ハードルが高そうだから諦めよう(´;ω;`)
ってなりますよね。
**大丈夫です。Vagrant（ベイグラント）を使うと、これらのインストールや設定作業を自動でやってくれます。**

次は、Vagrant について見ていきましょう。

# **第3章 Vagrant とは**

[Vagrant](https://www.vagrantup.com/)（ベイグラント）は、開発環境を簡単に構築できるオープンソースのソフトウェアです。
Vagrant を利用すると、ターミナルから  `vagrant up` とコマンドを打つだけで、開発環境を構築することが可能です。

![vagrant-hav.png](https://qiita-image-store.s3.amazonaws.com/0/72985/dfe4fcd7-836b-0a74-5894-4ab46e42b6ac.png)

実際にはもう少し手順が必要ですが、このような感じで簡単に開発環境を構築できます。

Vagrant は、VirtualBox に対して、仮想マシンの起動や操作、停止や破棄などの指示をしてくれます。
仮想マシンに対して、 Vagrant 経由で指示をするため、VirtualBox を操作することは基本的にありません。

この Vagrant は、[Mitchell Hashimoto](https://twitter.com/mitchellh) さんが 2010 年 1 月から開発しています。
日本人の歯医者の父と主婦である母の間に生まれ、12歳のときにプログラミングを始め、2012 年に [HashiCorp](https://www.hashicorp.com/) という会社を創設し、現在は CTO をやっているそうです。
[Vagrant](https://www.vagrantup.com/) の公式サイトを見ると、HashiCorp と記載されています。

こんな便利なものを開発してくれて感謝です。
この Vagrant は Mac や Windows などの環境で利用できます。
Vagrant は Vagrant box を利用することで、簡単に開発環境の構築が行えます。

## **Vagrant box とは？**

先ほど、説明した VirtualBox には仮想マシンをエクスポートする機能があります。
エクスポートしたファイルを利用することで、他のパソコンでも同じ仮想マシンをインポートすることができます。

Vagrant box には、このようにエクスポートしたファイルなどが含まれています。
この Vagrant box を利用することで、`vagrant up` とコマンドを打つだけで、簡単に仮想環境を構築できます。

Vagrant box は HashiCrop が運営している [Discover Vagrant Boxes](https://app.vagrantup.com/boxes/search) から探すことができます。
ターミナルから Vagrant boxを追加するときは下記のように記述します。
一通り説明した後に、第6章で実際に開発環境の構築を行います。
第5章までは実際にコマンドを打つ必要はありません。

```txt:ターミナル（Vagrantboxを追加する例）
vagrant box add ボックス名またはURL
```

Vagrant box を利用して、仮想マシン（クローン）を作成します。

Vagrant box を使って、CentOS の仮想環境を構築する流れだけ簡単に見てみましょう。
流れを把握するだけなので、実際にやる必要はありません。
[Discover Vagrant Boxes](https://app.vagrantup.com/boxes/search) を見ると `centos/7` とあります。
この Vagrant box を使って CentOS の仮想環境を構築します。
まずは、Vagrant box をダウンロードします。 

```txt:ターミナル（Vagrantboxのダウンロード）
vagrant box add centos/7
```

vagrant box は `Users/ユーザー名/.vagrant.d/boxes/` のディレクトリにダウンロードされます。
パソコンの設定によっては、隠しファイルやフォルダは表示されないようになっているため、設定を変更しないと実際にこのフォルダを見ることはできません。
コマンド入力でファイルやフォルダの操作を行うため、隠しフォルダ・隠しファイルなどは表示されてなくても問題ありませんが、マウスクリックで実際のフォルダ・ファイルを確認したい方は、ソフトを利用したり、設定を行ったりすると Mac や Windows で閲覧することもできます。
Mac の方なら [Funter](https://nektony.com/products/funter) というソフトを使うと隠しファイルが表示できます。
Windows の方なら、[ここ](https://support.microsoft.com/ja-jp/help/14201/windows-show-hidden-files) に記載がある通り、コンパネから設定を変更すると隠しファイルが表示されます。

vagrant box をダウンロードした後に、任意のディレクトリを作成し、ターミナル上でそのディレクトリに移動します。
今回は、`centos/7 ` の Vagrant box を利用するので、下記のように記述します。

```txt:ターミナル（Vagrantfileの作成）
vagrant init centos/7
```

`init` は イニシャライズという英語で、初期化という意味です。
`vagrant init` とコマンドを打ち、初期化したということです。
初期化すると、Vagrantfile という Vagrant の設定が記述されたファイルが作成されます。
その後に、`vagrant up` とコマンドを打つと、仮想マシンが構築され、起動します。
Vagrant box を利用し、CentOS の仮想環境を構築する場合は、このような手順になります。
Vagrant box を利用して、CentOS 以外の仮想環境を構築するときも同様の手順になるかと思います。

Laravel の開発環境も Vagrant box を利用することで、簡単に構築できます。
Laravel 公式で Homestead という簡単に開発環境を構築できるツールを提供しています。
この Homestead を利用して開発環境の構築を行う場合、先ほどの CentOS の手順とは多少異なります。
次は、この Homestead について見ていきましょう。

# **第4章 Homestead とは**

Laravel 公式が提供している Homestead（ホームステード）は、Laravel が動作する開発環境を簡単に構築できるツールです。

先ほどの Vagrant を利用して CentOS の環境を構築する例では、Vagrant box をダウンロードして、`vagrant init centos/7` とコマンドを打つと、Vagrantfile という Vagrant の設定が記述されたファイルが作成されますと説明しました。

Homestead を利用して開発環境の構築を行う場合は、Laravel 公式から配布されている、設定済みの Vagrantfile を利用します。
また、VirtualBox について説明したときに、ホストOSとゲストOSで共有フォルダの設定ができると説明しました。
Homestead の場合は、このような設定も `Homestead.yaml` というファイルに記述するだけで簡単に設定できるようになっております。
これらの Vagrantfile や `Homestead.yaml` などのファイルは、[Laravel Homestead](https://github.com/laravel/homestead) という名称で、一式ダウンロードできるようになっております。
Vagrantfile や `Homestead.yaml` 以外の必要なファイルも含まれています。
正確には、`Homestead.yaml` というファイルは自分でコマンドを打って作成します。
`Homestead.yaml` を作成するのに必要なファイルが含まれているということです。

開発環境を構築するにあたり、先ほど説明した Vagrant を利用して開発環境の構築を行います。
Laravel 公式から [Homestead Vagrant box](https://app.vagrantup.com/laravel/boxes/homestead) という名称の Vagrant box がダウンロードできるようになっております。
Homestead で開発環境を構築するには、[Homestead Vagrant box](https://app.vagrantup.com/laravel/boxes/homestead) と [Laravel Homestead](https://github.com/laravel/homestead) の2つをダウンロードして用意する必要があります。
ダウンロードの仕方については、[第6章 開発環境の構築](http://qiita.com/7968/items/97dd634608f37892b18a#%E7%AC%AC6%E7%AB%A0-%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%81%AE%E6%A7%8B%E7%AF%89) のときに説明しますので、ここでは Homestead を利用して開発環境を構築するには、この2つを用意する必要があるということだけ覚えておいてください。

|ダウンロード|内容|
|:--|:--|
|Homestead Vagrant box|仮想マシンをエクスポートしたデータなど|
|Laravel Homestead|設定済みの `Vagrantfile` や `Homestead.yaml` を作成するのに必要なファイルなど|

ちなみに、Homestead（2017年3月現在） を利用すると下記の環境を簡単に構築できます。

+ Ubuntu 16.04
+ Git
+ PHP 7.1
+ Nginx
+ MySQL
+ MariaDB
+ Sqlite3
+ Postgres
+ Composer
+ Node (With Yarn, Bower, Grunt, and Gulp)
+ Redis
+ Memcached
+ Beanstalkd

OS や Web サーバー、PHP、データベースなど必要なものが一式入った環境を構築できます。
Homestead は、あくまで開発環境を構築するもので、Laravel （フレームワーク）自体のファイルはありません。
Laravel 自体のファイルは、Composer というものを利用してダウンロードします。
次は、この Composer について見ていきましょう。

# **第5章 Composer とは**

Composer（コンポーザー）は、ライブラリの依存管理ツールです。
そう言われてもよくわからないと思うので、Laravel を例に Composer の説明をします。

Laravel を使うには、Taylor さん以外の方が作ったライブラリがたくさん必要です。
どのようなライブラリが必要かは、[Packagist](https://packagist.org/) の [Laravel](https://packagist.org/packages/laravel/laravel) に記載されています。
laravel/framework v5.4.13 の場合は、ざっと下記が使われています。

![composer-laravel-packagist.jpg](https://qiita-image-store.s3.amazonaws.com/0/72985/2e154507-afdd-30e3-9461-60e15f42270c.jpeg)

リンクをクリックして必要なライブラリを確認し、一つ一つダウンロードしてください。
えーっ!!! Laravel 使うのやめようかな... となりますよね。
Composer を使うと、ターミナルから下記のようにコマンドを入力するだけで、依存しているライブラリを vendor フォルダ内に全てダウンロードしてくれます。

```txt:コマンド例
composer create-project laravel/laravel --prefer-dist
```

超便利ですね。開発してくれた方に感謝です。

この Composer は 2011 年に [Nils Adermann](https://twitter.com/naderman) さんと [Jordi Boggiano](https://twitter.com/seldaek) さんが開発を始め、2012 年にリリースされたそうです。
Composer を使うには、[公式サイト](https://getcomposer.org/) のダウンロードを参考に、インストールしてください。
また、Composer が動作するには PHP 5.3.2 以上が必要です。
CakePHP など他のフレームワークも Composer を使ってインストールするのが一般的です。
今回は、ゲストOSに Composer をインストールするので、ホストOS 側に Composer をインストールする必要はありません。

Laravel、VirtualBox、Vagrant、Homestead、Composer について何となく理解できたと思いますので、実際に開発環境の構築を行なっていきましょう。

# **第6章 開発環境の構築**

>  **2018.10.11 追記**
> mac での構築方法になりますが、新たに書き直しました。（ほぼ同じですが、少し手直ししました。）
> [Qiita -【Laravel 5.5 or latest】Homestead で mac に Laravel 開発環境を構築する方法](https://qiita.com/7968/items/68b3566d92d2b007038e)

Homestead を利用して、開発環境の構築をしていきましょう。

1. [Vagrant と VirtualBox のダウンロードとインストール](http://qiita.com/7968/items/97dd634608f37892b18a#step-1vagrant-%E3%81%A8-virtualbox-%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%A8%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
1. [Homestead vagrant box のダウンロード](http://qiita.com/7968/items/97dd634608f37892b18a#step-2homestead-vagrant-box-%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89)
1. [Laravel Homstead のダウンロード](http://qiita.com/7968/items/97dd634608f37892b18a#step-3homstead-%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89)
1. [Homestead の設定ファイルの作成](http://qiita.com/7968/items/97dd634608f37892b18a#step-4laravel-homestead-%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90)
1. [SSH 鍵ファイルの作成](http://qiita.com/7968/items/97dd634608f37892b18a#step-5ssh%E9%8D%B5%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90)
1. [Homestead の設定ファイルの編集](http://qiita.com/7968/items/97dd634608f37892b18a#step-6homestead-%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E7%B7%A8%E9%9B%86)
1. [仮想マシンの起動](http://qiita.com/7968/items/97dd634608f37892b18a#step-7-%E4%BB%AE%E6%83%B3%E3%83%9E%E3%82%B7%E3%83%B3%E3%81%AE%E8%B5%B7%E5%8B%95)
1. [仮想マシン上で Composer を利用して、Laravel ファイルをダウンロードする](http://qiita.com/7968/items/97dd634608f37892b18a#step-8%E4%BB%AE%E6%83%B3%E3%83%9E%E3%82%B7%E3%83%B3%E4%B8%8A%E3%81%A7-composer-%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6laravel-%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B)
1. [Laravel ページの表示](http://qiita.com/7968/items/97dd634608f37892b18a#step-9lravel-%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E8%A1%A8%E7%A4%BA)

この手順は Laravel5.4 のときに構築した手順です。
最新バージョンでは手順が異なる場合があります。
構築できない方は [Laravel 公式サイト Homestead](https://qiita.com/7968/items/97dd634608f37892b18a#homestead-%E3%81%AE%E5%8F%82%E8%80%83%E3%82%B5%E3%82%A4%E3%83%88) もご確認ください。

## **Step 1　Vagrant と VirtualBox のダウンロードとインストール**

### **Vagrant のインストール**

Vagrant を [DOWNLOAD VAGRANT](https://www.vagrantup.com/downloads.html)  からダウンロードして、インストールしてください。

### **VirtualBox のインストール**

VirtualBox を [Download VirtualBox](https://www.virtualbox.org/) からダウンロードして、インストールしてください。

私は、最新バージョン（当時）をインストールしました。

|OS|VirtualBox|Vagrant|
|:--|:--|:--|:--|
|macOS Sierra 10.12.3|5.1.14|1.9.1|
|Windows 7 Home Premium 64bit|5.1.14|1.9.2|

## **Step 2　Homestead vagrant box のダウンロード**

ターミナルから下記のコマンドを打って、Homestead vagrant box をダウンロードしてください。

```txt:ターミナル（vagrantboxのダウンロード）
vagrant box add laravel/homestead
```

`Enter your choice`とお使いの仮想化ソフトウェアを聞かれます。
今回は `virtualbox` を利用しますので、Virtualbox の番号を入力してください。
私が試したときは、 `3) virtualbox` と表記されていたので、 `3` と入力しました。
これで、ダウンロードが開始されます。
私の環境では、約 10 分ほどかかりました。

## **Step 3　Homstead のダウンロード**

任意のディレクトリを作成して、そこに Homestead のファイルをダウンロードします。
ディレクトリの作成場所は、ユーザーディレクトリの直下などターミナルからアクセスしやすいディレクトリがよいかと思います。
この記事では、ホームディレクトリ（`/Users/ユーザー名`）の直下に `app` というディレクトリを作成したと仮定して説明します。

```txt:ディレクトリ
/Users/ユーザー名/app/
```

ディレクトリを作成したら、ターミナルから `cd` コマンドで作成したディレクトリに移動してください。
`app` というディレクトリに移動するには下記のようにコマンドを打ちます。

```txt:ターミナル（appディレクトリに移動するコマンド）
cd ~/app
```

`app` ディレクトリに移動したら、下記のコマンド打ち Homestead のファイルをダウンロードします。

```txt:ターミナル（Homesteadをダウンロードするコマンド）
git clone https://github.com/laravel/homestead.git Homestead
```

Mac を利用している方で、gitコマンドをはじめて使う方は、Xcode をインストールする必要があります。
インストールした後に、再度コマンドを打ってください。

Windowsの方は、最初に紹介した Git Bash を利用していれば、問題なくダウンロードされます。

作成したディレクトリ（この記事では `app` ）の中に Homestead のファイルがダウンロードされます。

## **Step 4　Laravel Homestead の設定ファイルの作成**

ダウンロードした Homestead のフォルダに移動してください。
今回、`app` フォルダ内に Homestead のファイルをダウンロードしたので、下記のディレクトリに移動します。

```txt:ディレクトリ
Users\ユーザー名\app\Homestead
```

Homestead ディレクトリに移動したら、下記のコマンドを入力してください。

```txt:ターミナル（Homesteadを初期化するコマンド）
bash init.sh
```

`Homestead initialized!` と表示され、`Homestead.yaml` が作成されます。

### **YAML って何？**

このYAML（ヤムル・ヤメル）ファイルとは何者なのか簡単に見ていきましょう。

YAML は 「YAML Ain't a Markup Language」 の略で 「YAMLはマークアップ言語ではない」 という意味です。
HTML（HyperText Markup Language）のようなマークアップ言語ではないということですね。

YAMLファイルの拡張は `yml` または `yaml` です。
YAML は 主に設定ファイル を記述するのに用いられる言語です。
YAML には  読みやすい、書きやすい、わかりやすい という特徴があります。
例えば、配列を表すには先頭に `-` を入力するだけです。

```yaml:YAML
- aaa
- bbb
- ccc
```

こんな感じで簡単に記述できます。
実際に `Homestead.yaml` の記述を見ると簡単な記述です。

`Homestead.yaml` の記述を変更する前に SSH鍵ファイルを作成しましょう。

## **Step 5　SSH鍵ファイルの作成**

SSH とは Secure Shell（セキュアシェル）の略で、暗号や認証の技術を利用して、安全にリモートコンピュータと通信するためのプロトコルです。
ホストOSとゲストOSとのやり取りは SSH で行います。
SSH でやり取りするのに必要な鍵を作成します。

まずは、既にSSH鍵ファイルが作られていないか確認します。
ホームディレクトリ移動します。

```txt:ターミナル（ホームディレクトリに移動するコマンド）
cd ~/
```

ホームディレクトリに移動した後に、下記コマンドを打ち、SSH鍵ファイルが存在しないか確認します。

```txt:ターミナル（SSH鍵ファイルが存在するか確認するコマンド）
ls -la I grep .ssh
```

`id_rsa` と `id_rsa.pub` が表示されれば、既にSSH鍵ファイルはあります。

無い方は、作成します。

```txt:ターミナル（SSH鍵ファイルを作成するコマンド）
ssh-keygen -t rsa
```

`Enter file in which to save the key` と保存するディレクトリを聞かれるので、そのまま enter を押します。

`Enter passphrase` パスフレーズを求められますので、任意のパスフレーズを入力してください。
再度パスフレーズを求められるので、先程入力したパスフレーズを入力してください。
これでSSH鍵ファイルが作成されます。

確認のために先程のコマンドを入力してみましょう。

```txt:ターミナル（SSH鍵ファイルが存在するか確認するコマンド）
ls -la I grep .ssh
```

`id_rsa` と `id_rsa.pub` が表示されます。

## **Step 6　Homestead の設定ファイルの編集**

Homestead のディレクトリに移動してください。

```txt:ターミナル（Homesteadディレクトリに移動するコマンド）
cd ~/app/Homestead
```

`vim Homestead.yaml` と入力して Homestead.yaml を編集していきましょう。
vim というのは高機能なテキストエディタのことで、ターミナル上からファイルを編集できます。
`i` を入力すると INSERT モードになり、編集ができます。
様々な記述がありますが、基本的に `folders` の `map` のディレクトリを変更するだけです。
今回は、`app` ディレクトリに Composer を利用して Laravel 自体のファイルを設置しますので、下記のように `map` の記述を変更します。
`folders` の `map` がホストOSのディレクトリで、 `to` がゲストOSのディレクトリになります。
ここで指定したホストOS上のディレクトリとゲストOS上のディレクトリは共有します。
VirtualBox のときにホストOSとゲストOSを共有することができると説明したが、この `folders` がその設定です。

> **2018.3.29 追記**
> 5.4 までは `Code` (先頭大文字)でしたが、5.5から `code` (先頭小文字)に変更になったとコメントをいただきました。
> この記事では `Code` と記載していますが、新しいバージョンでは `code` になっているようです。
> Step8 で `cd Code` とありますが、エラーが表示される方は `cd code` と入力してください。
> 
> **2018.9.1 追記**
> `homestead.app` から `homestead.test` に変更になったとコメントいただきました。
> `homestead.app` と記載していた箇所は `homestead.test` に変更しました。

```yaml:Homestead.yaml
--
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    - map: ~/app
      to: /home/vagrant/Code

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

databases:
    - homestead

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

# ports:
#     - send: 50000
#       to: 5000
#     - send: 7777
#       to: 777
#       protocol: udp
~                                                                                  
~                                                                                  
~                                                                                  
~                                                                                  
```

`esc` を押すと INSERT モードが解除されます。
`:wq` を押して enter を押すと上書き保存されます。

今回は、`folders` のみ変更しましたが、`Homestead.yaml` では下記の設定が可能です。

|項目|内容|
|:--|:--|
|ip|Vagrant に割り当てられるIPアドレス。|
|memory|仮想サーバに割り当てるメモリの容量。|
|cpus|CPUの数。|
|provider|利用する仮想化ソフトウェアの指定。Vagrant では仮想化ソフトウェアのことをプロバイダと呼びます。|
|authorize|SSH公開鍵のディレクトリ。|
|keys|SSH秘密鍵のディレクトリ。|
|folders|共有フォルダの指定です。`map` がホストOS側のディレクトリで、`to` がゲストOS側のディレクトリ。|
|sites|ホスト名 `homestead.test` でアクセスしたときに `to` に記載した仮想マシンのディレクトリを参照。|
|databases|データベース。|

**Windows 使用時のフォルダパス指定方法（絶対パス指定）**

Windowsにてフルパス、ドライブを指定して開発環境を構築する際は、以下のようにWindows標準のフォルダパスで指定します。

```yaml:Homestead.yaml（抜粋）
folders:
    - map: D:\app\code
      to: /home/vagrant/Code
```

上記のように指定します。  
Bash のように `/d/app/code` ではないので注意。

## **Step 7　仮想マシンの起動**

今までの手順通りなら、Homestead のディレクトリにいると思いますが、別のディレクトリにいる方は、Homestead のディレクトリに移動してください。

今回の場合なら、下記のように記述すると Homestead ディレクトリに移動します。

```txt:ターミナル（Homsteadディレクトリに移動）
cd ~/app/Homestead
```

Homested ディレクトリに移動した後に下記のようにコマンドを入力します。

```txt:ターミナル
vagrant up
```

仮想マシンが起動します。

`vagrant up` に成功した方は、VirtualBox を見ると homestead-7 と表示され、起動しているのを確認できます。

![virtualbox-homestead.jpg](https://qiita-image-store.s3.amazonaws.com/0/72985/26b02022-ff63-7c46-58de-8e55be0d8280.jpeg)

私の場合は `vagrant up` をしたときに下記のエラーが表示されました。
同様のエラーが表示された方は、参考に対処してください。
エラーが表示されなかった方は、次のステップへ進んでください。

### **【エラー1】ネットワークの設定エラー**

Mac の環境で、`vagrant up` を行ったときに、下記のネットワークの設定エラーが表示されました。

```txt:エラー
The specified host network collides with a non-hostonly network!
This will cause your specified IP to be inaccessible. Please change
the IP or name of your host only network so that it no longer matches that of
a bridged or non-hostonly network.
```

Mac のローカルIPアドレスと ホストオンリーネットワークが同じセグメントにあるのでエラーが表示されました。
別のセグメントに変更する必要があります。
Mac のローカルIPアドレスは、`ifconfig` で確認できます。
確認すると、おそらく、`192.168.○○.○` になっているはずです。
私の場合は、Mac のローカルIPアドレスが `192.168.10.○` で、`Homestead.yaml` で設定したIPアドレスも `192.168.10.10` にしており、同じセグメントになっておりました。
別のセグメントにするために `Homestead.yaml` の IP を `192.168.30.10` などに変更します。
その後に、Homestead のディレクトリ内で `vagrant up` をすると問題なく仮想マシンが起動するかと思います。

### **【エラー2】仮想化支援機能が使用できない**

Windows7 の環境で `vagrant up` を行ったときに `homestead-7: SSH auth method: private key ` から動かず、下記のエラーが表示されました。

```txt:エラー
Timed out while waiting for the machine to boot. This means that
Vagrant was unable to communicate with the guest machine within
the configured ("config.vm.boot_timeout" value) time period.

If you look above, you should be able to see the error(s) that
Vagrant had when attempting to connect to the machine. These errors
are usually good hints as to what may be wrong.

If you're using a custom box, make sure that networking is properly
working and you're able to connect to the machine. It is a common
problem that networking isn't setup properly in these boxes.
Verify that authentication configurations are also setup properly,
as well.

If the box appears to be booting properly, you may want to increase
the timeout ("config.vm.boot_timeout") value.
```

VirtualBox には既に `homestead-7` という仮想マシンがあります。
VirtualBox から `homestead-7` を起動したところ、下記のように `ホストマシンの仮想支援機能（VT-x/AMD-V）が使用できません。64ビット ゲストOSは64ビットCPUを検出できず、起動できません。` とエラーが表示されました。

![vagrantup-error-windows7-virtualbox.jpg](https://qiita-image-store.s3.amazonaws.com/0/72985/434dbfb9-c238-f540-7833-9f559417bfc6.jpeg)

仮想化支援機能が無効になっているため、有効にします。
BIOS で設定の変更を行います。
変更方法はお使いのパソコンメーカーにより異なると思いますが、私は Hewlett Packard 製のPCを利用しているため、[ここ](http://h20564.www2.hp.com/hpsc/doc/public/display?docId=emr_na-c02020824)を参考に、仮想化支援機能を有効にしました。
その後は、`vagrant up` してもエラーも表示されなくなりました。

## **Step 8　仮想マシン上で Composer を利用して、Laravel ファイルをダウンロードする**

`vagrant up` で仮想マシンは起動されていますので、仮想マシンを操作するために仮想マシンにログインします。

```txt:ターミナル（仮想マシンにログインするコマンド）
vagrant ssh
```

SSHを利用して仮想マシンにログインしたので、次は `Code` ディレクトリに移動します。

```txt:ターミナル（Codeディレクトリに移動するコマンド）
cd Code/
```

次に composer を使って Laravel のファイルをダウンロードします。
下記は記述例です。

```txt:ターミナル（Composerの記述例）
composer create-project laravel/laravel --prefer-dist ディレクトリ名
```

今回、ディレクトリ名は Laravel にしますので、下記のように入力します。

```txt:ターミナル（Laravelディレクトリの中にダウンロードするコマンド）
composer create-project laravel/laravel --prefer-dist Laravel
```

ダウンロードが開始されます。
完了するまでに、私の環境では約 10 分ほどかかりました。

先ほど、`Homestead.yaml` で下記のように記述しました。

```yaml:Homestead.yamlの抜粋
folders:
    - map: ~/app
      to: /home/vagrant/Code
```

仮想マシン上で composer を使って `/home/vagrant/Code` の中に Laravel というフォルダを作成し、 Laravel のファイルをダウンロードしました。
共有していますので、ホストOS 上の `app` のディレクトリを確認すると、同じ Laravel のファイルがダウンロードされています。

ターミナルからは、仮想マシンに入っているので、`vagrant@homestead:` で始まっているかと思います。
仮想マシンからログアウトするときは、`logout` とコマンドを打つとログアウトします。

## **Step 9　Laravel ページの表示**

`Homestead.yaml` に記述した IPアドレスにブラウザからアクセスすると下記の Laravel ページが表示されます。

![laravel-first.jpg](https://qiita-image-store.s3.amazonaws.com/0/72985/5b8b7400-806b-40eb-dc4c-9e0799062032.jpeg)

私の場合は、`Homestead.yaml` の IP を `192.168.30.10` に設定したため、アドレスに `192.168.30.10` を入力するとLaravelのページが表示されます。
IPアドレスでアクセスしても問題はないですが、わかりやすいように `homestead.test` と入力しても、Laravel のページが表示されるように設定してみましょう。
設定するには、ホスト名 `homestead.test` とIPアドレス（この記事では `192.168.30.10`）の対応付けをします。

### **Mac の場合**

Mac の場合は、ホスト名とIPアドレスの対応付けは `/etc/hosts` に記述されています。
Homestead.yaml を編集したときと同じく `vim` を使って `hosts` を編集します。
`hosts` は管理者権限がないと編集できないので、管理者権限で編集するために頭に `sudo` と記述します。
`sudo` と記述すると、管理者権限で実行できます。

```txt:ターミナル（hostsファイルを管理者権限で開くコマンド）
sudo vim /etc/hosts
```

管理者権限で実行したため、パスワードを入力が必要になると思いますので、Mac のパスワードを入力してください。
hosts ファイルが表示されますので、`i` を入力して INSERTモードにし、最後の行に下記を追加します。

```txt:ターミナル（hosts）
192.168.30.10 homestead.test
```

今回は Homestead.yaml のIPアドレスを `192.168.30.10` にしておりますので、上記のようにしております。
異なる IPアドレス を設定した方は、適宜変更してください。
`esc` を押し、INSERTモードを終了します。
`:wq` を入力し、enter を押して上書き保存します。
これでブラウザから `homestead.test` を入力すれば、Laravelのページが表示されるようになります。

### **Windows の場合**

Windows の場合は、ホスト名とIPアドレスの対応付けを記述する `hosts` ファイルは下記にあります。

```txt:ディレクトリ（Windowsのhostsファイル）
C:\Windows\System32\drivers\etc
```

管理者権限でエディタを実行し、`hosts` ファイルを開き `192.168.30.10 homestead.test` と追記して保存してください。
これでブラウザから `homestead.test` を入力すれば、Laravelのページが表示されるようになります。

これで開発環境の構築は終了です。
お疲れ様でした。

Windows7 の環境で、IPアドレスまたは `homestead.test` でアクセスしても何も表示されませんでした。
同様に表示されない方は、下記を試してみてください。

### **【エラー1】IPアドレスまたは homestead.test でアクセスしても表示されない**

Windows7 の環境で、ブラウザからIPアドレスまたは `homestead.test` でアクセスしましたが、何も表示されませんでした。
ssh関連に問題があるのかと色々調べましたが、一度 `vagrant destroy` で仮想マシンを破棄し、再度、`vagrant up`で仮想マシンの起動をしたら、Laravelのページが表示されました。
原因は不明ですが、Homestead.yaml の設定などに誤りはないのに、Laravelのページが表示されない方は、一度仮想マシンを破棄して再度起動してみてください。

## **Homestead の参考サイト**

Laravel 公式サイトにも Homestead を利用した開発環境の構築方法を説明しています。
不明な点があれば、公式サイトもご覧ください。

**【英語】**

- [Laravel 5.6 Laravel Homestead](https://laravel.com/docs/5.6/homestead)
- [Laravel 5.5 Laravel Homestead](https://laravel.com/docs/5.5/homestead)
- [Laravel 5.4 Laravel Homestead](https://laravel.com/docs/5.4/homestead)
- [Laravel 5.3 Laravel Homestead](https://laravel.com/docs/5.3/homestead)
- [Laravel 5.2 Laravel Homestead](https://laravel.com/docs/5.2/homestead)
- [Laravel 5.1 Laravel Homestead](https://laravel.com/docs/5.1/homestead)

**【日本語】**

- [Laravel 5.6 Laravel Homestead（日本語訳）](https://readouble.com/laravel/5.6/ja/homestead.html)
- [Laravel 5.5 Laravel Homestead（日本語訳）](https://readouble.com/laravel/5.5/ja/homestead.html)
- [Laravel 5.4 Laravel Homestead（日本語訳）](https://readouble.com/laravel/5.4/ja/homestead.html)
- [Laravel 5.3 Laravel Homestead（日本語訳）](https://readouble.com/laravel/5.3/ja/homestead.html)
- [Laravel 5.2 Laravel Homestead（日本語訳）](https://readouble.com/laravel/5.2/ja/homestead.html)
- [Laravel 5.1 Laravel Homestead（日本語訳）](https://readouble.com/laravel/5.1/ja/homestead.html)

# Laravel を学べる書籍

2018年11月現在、Laravel について学べる代表的な書籍は下記の3冊になるかと思います。
他におすすめの書籍があれば教えてください。

## [「PHPフレームワークLaravel入門 第 2 版」 秀和システム(2019/12/27)](https://amzn.to/2EV4Fy4)

2019 年 12 月 27 日に第 2 版が販売されたようです。
私は第 1 版しか見たことありませんが、第 2 版は Laravel 6 に対応しているようです。
Laravel 6 に対応してるのは嬉しいですね。

![laravel-.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72985/7c41b94f-d6fa-6acf-3c86-047edd9373c6.png)

引用：[PHPフレームワークLaravel入門 第２版 | 掌田津耶乃 |本 | 通販 | Amazon](https://amzn.to/2EV4Fy4)

## [「絶対に挫折させないアプリ開発　はじめてのLaravel」(2018/10)](https://plumsa.booth.pm/items/1048008)

PHP と Laravel の違い、フレームワークを利用するメリットを学ぶことを目的とした書籍です。
TODO アプリを素の PHP、Laravel（ルーティングメイン）、Laravel（MVC）で3回作成することで、PHP と Laravel の違いを学ぶことができます。
実際にコードベースで Laravel（フレームワーク）を利用するとどんなメリットがあるの？という方に最適です。
PHP でも TODO アプリを作成するため、理解するには PHP の基本的な知識な必要になります。
Laravel の基礎的なことは「PHPフレームワーク Laravel入門」の方がより詳説しているので、Laravel入門者は「PHPフレームワーク Laravel入門」で学んだ後にこの書籍を手に取るのがよいかと思います。
書籍版とダウンロード版があります。

![3.jpg](https://qiita-image-store.s3.amazonaws.com/0/72985/f615602e-48d4-ad73-1bea-b8a14a5a5e68.jpeg)

引用：[絶対に挫折させないアプリ開発　はじめてのLaravel - plumsa - BOOTH（同人誌通販・ダウンロード）](https://plumsa.booth.pm/items/1048008)

## [「PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応」ソシム (2018/9/26)](https://amzn.to/2z8M8fh)

Laravel の基礎を学んだ後に、より深く知りたい方向けの書籍です。
右も左もわからない方には理解するのが難しいと思うので、入門書を終えてステップアップしたい方はこちらの書籍を読みましょう。

![2.jpg](https://qiita-image-store.s3.amazonaws.com/0/72985/66578bd9-5228-9395-4e6b-0332e13597e4.jpeg)

引用：[PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応 | 竹澤 有貴, 栗生 和明, 新原 雅司, 大村 創太郎, 丸山 弘詩 |本 | 通販 | Amazon](https://amzn.to/2z8M8fh)

# **TIPS**

## **仮想マシンを起動・停止するには？**

**Vagrantfile があるディレクトリに移動**してから、`vagrant up` してください。
Homestead を利用して開発環境を構築した方は、Homestead ディレクトリに Vagrantfile があります。

仮想マシンの起動だけではなく、`vagrant halt` で仮想マシンの停止をする場合も **Vagrantfile があるディレクトリに移動**してからコマンドを打ってください。

別のディレクトリで  `vagrant up` を打つと下記のエラーが表示されます。

```txt:エラー
A Vagrant environment or target machine is required to run this
command. Run `vagrant init` to create a new Vagrant environment. Or,
get an ID of a target machine from `vagrant global-status` to run
this command on. A final option is to change to a directory with a
Vagrantfile and to try again.
```

`vagrant ssh` で仮想マシン内で操作している方は、`logout` と打つとホストOSのディレクトリに戻ります。
ホストOSの Vagrantfile があるディレクトリに移動してから、`vagrant halt` などを入力してください。


## **よく使う Vagrant ＆ Linux/Unix コマンド一覧**

vagrant を利用するときに、よく使うコマンドです。

|コマンド|内容|
|:--|:--|
|vagrant up|仮想マシンの起動|
|vagrant halt|仮想マシンの停止|
|vagrant ssh|仮想マシンにSSHでログイン|
|vagrant status|仮想マシンの状態を確認|
|vagrant reload|仮想マシンの再起動|
|vagrant destroy|仮想マシンの破棄|
|vagrant suspend|仮想マシンの一時停止|
|vagrant resume|一時停止の復帰|
|vagrant -v|vagrant のバージョン確認|
|vagrant box list|ダウンロード済みのboxを確認|
|vagrant box remove xxx|boxの削除 xxxにはbox名を入力　※homesteadを削除するなら `vagrant box remove laravel/homestead`|
|logout|仮想マシンからログアウト|

# note

note でも記事を公開してるので、興味がある方はご覧ください。

・[【初学者向けコードリーディング】 PHP の TODO アプリのコードを一緒に読み解こう](https://note.mu/7968/n/n46a8beb87c93)