Windows10でLaravel Homestead環境構築

Laravelって出すとこまで。
”Windows10で”と言ってますが、やることはWindows7とか8.1と差異ないと思います。

#Homesteadとは
PHP、Laravelによる開発のために必要なあれやこれやがひとまとめになっている、Laravel公式による仮想環境(VM)用のパッケージです。
LaravelやPHPはもちろん、elixirというlaravel版タスクランナーツールに必要なnode、WebサーバのNginx、
DBへのアクセスを補助してくれるmemcachedとかも入っています。
VMなので気軽に環境を破棄したり再構築したりできるという利点もあります。
まあ要はこれいれちゃえばそのまま開発できるよ！っていうまるごとパック的な感じです。

# 必要なファイルをインスコする
- [git for windows](https://git-for-windows.github.io/) 
- [virtual box](https://www.virtualbox.org/)
- [vagrant](https://www.vagrantup.com/)

それぞれインストーラーにしたがってインストールすればOK。

# セットアップする
インストールできたらBashを使いたいのでgit bashを起動する。git for windowsに同梱されてます。
起動できたらコマンドを上から順に実行する。

```bash

#homesteadに用いる仮想環境用の下地(boxファイル)をつくる
vagrant box add laravel/homestead
#実行すると、このボックスをなんのツールで動かすか聞かれるのでvirtualboxを選択してenter。でもどっちでもいいかもしれない

#homesteadのgitレポジトリをHomesteadというディレクトリの中に作成する
git clone https://github.com/laravel/homestead.git Homestead

#完了したらディレクトリに移動
cd /Homestead

#設定ファイルとかつくる(初めてHomesteadを入れるマシンの場合は必須)
./init.sh

>Homestead initialized!
#上のメッセージが出たら移動してyamlファイルを編集
cd ~/.homestead/
vi Homestead.yaml

#vimが苦手な人はpwdでエクスプローラーから直接エディタ起動していじるなりどうぞ
```

# yamlファイルをいじる

いじるのは``folders``と``sites``の2つだけだと思いますが、一応何が割り当てられてるのは書いておきます。

```Homestead.yaml

ip: "192.168.10.10" #接続先となるIPアドレス
memory: 2048 #割り当てるメモリ(MB)
cpus: 1 #同CPUのコア数
provider: virtualbox #VMのホスト

authorize: ~/.ssh/id_rsa.pub #SSH公開鍵の場所

keys:
    - ~/.ssh/id_rsa #秘密鍵の場所

folders:
    - map: D:\homestead\Laravel #ローカルのディレクトリ
      to: /home/vagrant/Code #VM上のディレクトリ

sites:
    - map: homestead.app #ホスト名
      to: /home/vagrant/Code/test/public #web上に公開するディレクトリ(Apacheのhtdocsみたいなもん)

databases:
    - homestead

```

上のmapとtoは相関関係にあり、ローカル(このマシン)と、これからつくるVMでディレクトリの内部を共有します。
つまり、``sites:to``の``/home/vagrant/Code/test/public``は、ローカル上のディレクトリ``D:\homestead\Laravel\test\public``のことであると読み替えることができます。これは覚えておいてください。もちろん、共有しているので、その中身にはローカルとVM、どちらからでもアクセスできます。
また、**この環境構築をまっさらな状態から始める場合は、マシン上で``folders:map``にあたるディレクトリを予め作っておいてください。**じゃないとこの後の工程でつまります。

# 鍵を作る
VMに入るための鍵を作る。MacやLinuxと異なり、windowsはgit for windowsの中に鍵作成機能があります。最初にインストールしたのはそのためです。
公開鍵？秘密鍵？なにそれおいしいの？という方は[このへん](http://knowledge.sakura.ad.jp/beginner/3543/)とか
[このへん](http://monsat.hatenablog.com/entry/generating-ssh-keys-for-github)とか読んでおくと幸せになれるかもしれません。

【2020/02/03追記】
鍵作成コマンドに鍵長を追加し、4096にしました。
暗号化形式を変更する場合は `-t`で設定できます。（無指定の場合はrsa）
`-C <自分のメールアドレス>` を指定するケースもありますが、今回は省略しています。
PC内部に建てるVMでインターネットには出さない想定ですが、まあ一応ということで。
詳細は[【 ssh-keygen 】コマンド――SSHの公開鍵と秘密鍵を作成する](https://www.atmarkit.co.jp/ait/articles/1908/02/news015.html)を参照して下さい。

```

#鍵をつくる用のフォルダを作成して移動
mkdir ~/.ssh && cd $_

#鍵作成
ssh-keygen -b 4096
#パスフレーズを入れる・入れないは自由。鍵ファイル名はHomestead.yamlのそれと合わせるようにしてください。
Generating public/private rsa key pair.
Enter file in which to save the key (xxxxx): ~/
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
```

成功すると、こんなのが出ます。

```
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxx yyyyy@zzzzz
The key's randomart image is:
# 変な絵みたいのが出てくる
```

`Enter file in which to save the key`で指定したファイルにlsコマンドを実行し、
- 秘密鍵(id_rsa)があるか
- 公開鍵(id_rsa.pub)があるか
を確認します。


#hostsファイルを書き換える
IPアドレスからVMの環境に転送するために、hostsファイルを編集し、
yamlファイルに従って以下を追加する。
windowsマシンでは``C:\Windows\System32\drivers\etc\hosts``にあります。
編集前・編集後に書き込み権限の設定を忘れないように。

```text

//左がIPアドレス、右がホスト名(sitesのmap)
192.168.10.10 homestead.app

```


# vagrant起動
いよいよ仮想マシンを起動します。
起動前に先ほどのディレクトリを作ったか確認して、以下のコマンドを実行。

```bash

cd ../Homestead
vagrant up

```

なんかいろいろ出ますが、数分で起動します。


# laravelのプロジェクトを作成する
ここで、[homestead.app](http://homestead.app/)にアクセスしても、no input file specifiedと表示されるだけです。yamlファイルで指定したWeb上での公開ディレクトリになにもないからです。というかディレクトリがないからです。
conposerを使ってLaravelのプロジェクトを新規作成します。

```bash

#vagrantにssh接続
vagrant ssh

#VM上のローカル共有ディレクトリに移動
cd Code/

#conposerが最新のバージョンか確認、最新じゃなかったらアップデートをかける
sudo composer self-update

#プロジェクト作成
composer create-project laravel/laravel Laravel --prefer-dist

```

いろいろインスコが始まりますので待ちます。数分かかります。
終わったらvagrantの中身そのものには用がなくなるので、``exit``でVMから抜けても大丈夫です。VMをシャットダウンしてはダメですよ。

# アクセスしてみる
ここまで終わったら、あとはアクセスしてみるだけです。VMが起動していることを確認して、
http://homestead.app/
にアクセスしてみましょう。

![finish.jpg](https://qiita-image-store.s3.amazonaws.com/0/82152/01fc776a-75e9-6fb7-095b-ab52ba42db45.jpeg)

上のように表示されていれば、環境構築は完了です。お疲れ様でした。
開発頑張ってください。

#no input file specifiedから変わらないんだけど
自分もここであれってなりました。
上の表示を出しているのは、Laravelのプロジェクト内、public直下の``index.php``です。
そこまでのローカルのディレクトリが、yamlファイルの``sites:to``に表記されたディレクトリと相違ないか確認してみてください。
そこを修正すればほぼ間違いなく出ると思います。自分はこれで出ました。
ローカルの階層とyaml、どちらに合わせても大丈夫です。VMのディレクトリを直すのはやめたほうがいいです。
出なかったらごめんなさい。Google先生に聞いてみてください。

# 7/28追記 artisanコマンドの実行場所
上記構成で構築した場合、artisanコマンドは以下のように実行します。

``` 
//VMに入って
vagrant ssh

//プロジェクトフォルダへ移動
cd Code/Project

php artisan list

```

Composerとかもここから実行します。
ローカルマシン側のプロジェクトフォルダからは実行できませんのでご注意ください。


# 参考
[2016/02/20におけるLaravel Homestead導入 on Windows](http://qiita.com/zeriyoshi/items/24f0f27a06e440e47dec)
[HomesteadをつかってLaravel5を動かしてみる](http://qiita.com/kz_morita/items/799aaf7440c496f2379b)
[Laravel Homesteadを使ってみよう！](http://qiita.com/syossan27/items/0104615e5f9ae26f0720)
[Laravel 5.1 Laravel Homestead(公式ドキュメント)](http://readouble.com/laravel/5/1/ja/homestead.html)