初心者でもLaradockでLaravelの環境構築をエラーなしで行おう！（windows ver）

###初心者だけどLaravelをエラー出さずに簡単に環境構築したい！
そんな欲張りなあなたのための記事です！
教えてる人たちが何回もこれで構築してますので、まあ多分これで大丈夫！
あなたもLaravelを始めましょう！

Macの方はこちらの記事の方をご参考ください！！
https://qiita.com/mukae_tech/items/24709085948a6d707da3

####開発環境
・Laravel6.*
・Mysql8.*
・windows 10pro以上
・DockerとGit、composerをまだインストールしたことない方は各自インストールしててください！

　Dockerインストールの良記事
　https://ops.jig-saw.com/techblog/docker-for-windows-install/
　centOSを起動するとか以降はやらなくてもOK！
  
　Gitインストールの良記事
　https://eng-entrance.com/git-install

　composerインストール良記事
　https://mseeeen.msen.jp/install-php7-and-composer-in-windows-10/
　※xamppとかですでにパソコン上にPHPが入ってる方は、PHPのインストール部分は飛ばして
　Composerのダウンロード部分からスタートしてください！

すべて準備できましたか？
地味に時間がかかるかもしれませんが、この３つは今後も別のプロジェクトなど様々な場面で使うはずなので我慢して今いれておきましょう。

それでは実際にlaravelの環境をインストールしていきましょう！

####Laradockで環境を作ります。
Laradockとは…
簡単に言うとなんでもPHP環境で使えるやつが詰まってるバラエティパックです。
↓
公式
https://laradock.io/

・例えばmysqlを使いたいと思ったらもともと準備されてるので一瞬
・例えばLaravelMixを使いたいと思ったらもともと準備されてるので一瞬

そんな感じです😌
今回はシンプルに作って行きましょうね。

####Laradockをインストールしていきます。

・みんな大好きコマンドプロンプトでの作業が必須です。
・コマンドプロンプトのことが全くわからない方でもなんとか行けるように書きます。

コマンドプロンプトを最初に開いたところから始めましょう。

まずはLaravelのフォルダを作るところを決めます。

今回はDocumentsフォルダの中に作りたいと思うので、

```
$ cd Documents 
```
でDocumentsフォルダに移動。（cdは移動する意味です）

```
$ mkdir LaravelApp 
```
でLaravelAppフォルダを作成(mkdirはフォルダ作成です。
書類フォルダ見に行ったらフォルダできてるはずです。)

```
$ cd LaravelApp 
```
で作ったLaravelAppフォルダに移動。

ここで

```
$ dir
```
と入力すると、当然ですが何も表示されません。
ここにLaradockを落とします！

```
$ git clone https://github.com/Laradock/laradock.git
```

ガーーーーーーーーとインストールが始まります。
完了して、

```
$ dir
```
を押すと、

laradockって表示されてますね！

これでlaradockのインストールは完了です！

ちなみにlaradockが落とせただけで、Laravel自体はまだですよ！
laradockはlaravelを動かす環境のようなイメージです。

まずは先にLaradock(環境側)の微調整をしていきます。

####Laradockの微調整

```
$ cd laradock
```
```
$ dir
```
を押すと目を塞ぎたくなるような量のフォルダとファイルが。。。
これがlaradockですね。もちろん全部は使わないですし今回調整するのも少しだけです。
頑張りましょう。

laradockフォルダ内で、

```
$ copy env-example .env
```
copyはコピーです。もともとあるenv-exampleというファイルを.envと言う名前で複製しました。
なお、.envの「.」は隠しファイルであることを表しています。
それだけ大事な情報をここには書きます。（例えばデータベースのパスワードとか）




さて、

**★ここからはいったんコマンドプロンプトから離れて、
テキストエディタで編集していきます！★**


お好きなエディター（VScodeでいいんじゃないかな）でLaravelAPPフォルダごと開いてください。
※Vimが使える方はそちらで進めてもOKです。

laradockフォルダの中の、
nginxフォルダの中の、
sitesフォルダの中の、

default.conf

を開いてください！



するとこんな画面になると思います。

<img width="507" alt="スクリーンショット 2019-11-07 0.01.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400532/a2175f76-cadd-d0d9-2c5a-b97a5e67a218.png">

なんのこっちゃですね！
今は特に気にせず、

画像ではすでに変更されていますが、

root /var/www/public;

を画像の通り、

```
root /var/www/app/public;
```

に変更して保存してください。

この追記したappはあとで作るlaravelのフォルダ名と連動しています！
最初は無難に下の方もappでいきましょう！

微調整は次でラストです！

テキストエディタで、
laradockフォルダ直下の、

 mysqlフォルダの
 my.cnfを開いてください。


<img width="694" alt="スクリーンショット 2019-11-09 13.23.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400532/957545cb-c830-3416-de08-76a5c2f778b3.png">

画像のように空いてるところに

default_authentication_plugin=mysql_native_password

を追記します。(バージョンによってはもう記入されているので追記する必要なし。etc→:qで処理完了してください。)

保存して完了です！

この処理をしないと後でphpMyadminへのログインができなくて苦労します！

##phpMyadminのポート番号変更（2020/3/25追記）

Laradockも定期的に進化しているのですが、最近謎の更新（多分ミス）が行われて
phpMyAdminのポート番号とworkspaceのポート番号が自動的にかぶる謎の現象が発生しています。
（すでに別の海外のエンジニアが修正依頼出してるけど、まだ調整中みたいなので自力で修正します）

Laradockの.envファイルを開いてPMA_PORT=8080を8081に変更してください。

PHP MY ADMIN ##########################################

〜省略〜

PMA_USER=default
PMA_PASSWORD=secret
PMA_ROOT_PASSWORD=secret
PMA_PORT=8081　←これを8080から8081に変更します。



####コンテナを立ち上げる

**★ここからまたコマンドプロンプトに戻ります★**

laradockの調整も完了したので、実際にDockerのコンテナ(環境)を立ち上げましょう！
（ネット環境が悪いとこだと時間がかかりすぎるので注意！）

laradockフォルダ上で、
（※laradockフォルダ上に自分がいるかどうか、移動の仕方が分からない方はコマンドプロンプトの使い方について検索を！）

```
$ docker-compose up -d nginx mysql phpmyadmin
```
dockerに慣れてない方は今は謎かと思いますが、
簡単に言うとlaradockに準備されているnginxとMysql、phpmyadminの情報をもとにこれらの環境を構築して！と言う
命令になります。


```
ERROR: Couldn't connect to Docker daemon. You might need to start Docker for Mac.
```
って出た方はDockerサービス自体の起動を忘れてるだけです。落ち着いて！
普通にwindowsのアプリケーションにあるDockerを起動してください！

うまくいった方は環境の構築が始まるかと思います。

数分経って、、、

```
Creating laradock_mysql_1            ... done
Creating laradock_docker-in-docker_1 ... done
Creating laradock_workspace_1        ... done
Creating laradock_php-fpm_1          ... done
Creating laradock_nginx_1            ... done
```
となった方は大成功です！

もし、mysqlなどがExitとなった方は、
XAMPPや他のDockerが起動していませんか？？
ポートが被っているの原因なことが多いです！
と言うか90%はそうです！

全てOFFにして、再度docker-compose up -d nginx mysql phpmyadminをすると動くと思います。
それでもExitのままの場合は、
laravel mysql Exitとかで検索するとたくさん情報が出ますので解決頑張りましょう…。
（できれば分かる人に聞きましょう。）

####Laravel自体をインストール

今までやってきたことはLaravelを動かすための環境の準備です！
ここからが本番です！

と言ってももうあと少しです！


laradockフォルダで、

```
$ docker-compose exec workspace bash
```

をすると先ほど作ったDockerコンテナの中に入ることが出来ます。

するといる場所がroot@~~~~~#とかなります。

このコンテナ内は先ほど作ったLaravelAppフォルダとリンクしていますので、
ここで

```
root@~~~~~# dir
```
をすると（root@~~~~~#はコピーしなくていいですからね）

laradockというさっきと同じフォルダが存在します！
ないとおかしい！
今までのやつで抜けてる部分がないかチェック！


さあLaravelのインストールです！
現時点での最新のLTSであるLaravel6.0を落としましょう！
（またもインストールに時間がかかります。）

下のappと言うのは僕がつけたフォルダ名なので、ご自身の好きなものに変えてOKですが
先ほども述べた通り今回はappで無難にいきましょう。

```
root@~~~~~# composer create-project laravel/laravel app "6.0.*"
```

インストールが完了したら、

```
root@~~~~~# dir
```

するとappフォルダが完成しています！

```
root@~~~~~# cd app
```

```
root@~~~~~# dir
```
をするとLaravelのたくさんのフォルダやファイルが準備されていますね！！
お疲れ様でしたインストール完了です！


####Laravelを表示させよう

まずはブラウザで
[http://localhost](http://localhost)
を表示してみてください！

<img width="1500" alt="スクリーンショット 2019-11-06 23.34.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400532/a75bd3e3-a1ac-35b9-12fc-f6bfdcd790e7.png">


この画面きましたか？
きましたね？きた方はおめでとうございます！
次の項目に進みましょう！

もしも、、、、
<img width="1456" alt="スクリーンショット 2019-11-06 23.36.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400532/213c46ee-59b8-9485-8e7f-52940c2052e3.png">



残念ながらこの画面になってしまった方は、
Laradockの微調整の項目のnginx/site/default.confをいじった部分をよーーく見てください。
多分そこのミスです！本当にあなたが作ったLaravelのフォルダ名とdefault.confの情報が一致していますか？
(僕が決めたappというフォルダ名から変えているなら、default.confの中身も変える必要がありますよ！）

間違ってた場合は、default.confを編集後に保存してから

laradockフォルダで、

```
$ docker-compose restart
```
でコンテナを変更後の情報で再稼働させましょう。

するときっとLaravelのトップページが表示されるはずです！！

####phpMyadminにログインしよう

次はブラウザで
[http://localhost:8081](http://localhost:8081)
を表示してみてください！

phpMyadminが開くはずです！

ここで、

サーバ：mysql //これは固定
ユーザ名:default
パスワード:secret

でログインが可能なはずです！

このパスワードはlaradockフォルダの.envファイルに書いていますよ！
※もし出来なかった人はページの下らへん参考。


####Laravelフォルダ側の.envフォルダを調整

これでほとんどOKですが、あともうひと踏ん張り！
データベースをLaravelで扱うための調整をしましょう！

といっても一瞬です！

**★ここからはまたいったんコマンドプロンプトから離れて、
テキストエディタで編集していきます！★**

laravelAppフォルダの中に

laradockフォルダと、
appフォルダが誕生しているはずなので、

そのappフォルダ直下の
.envファイルを開いて調整を開始します！

そこでDB_CONNECTIONってところを探し出して、
その付近を下記のように変えてください！


```
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret
```

終わったら、
保存して終了。

Laradock側の.envファイルと合わせる感じですね！
これでLaravelでデータベースを扱えるようになります。

####よくあるミス

・laradockとlaravelフォルダは全く違うものです。
・laradockフォルダ上でdocker-compose系は行ってください。
・そのほかコマンド入力でエラーが起こるときは実行するフォルダを間違えてる人が多いです。
どこで実行するのか良く読んでみてください！
・自分なりのフォルダ名にした場合は、必ず連動する部分を全て統一させてください。
・MAMPやXAMPP、そのほか別の言語の環境構築をしてそれらが起動したまま（意図せず起動してる人多し）の方はポート被りでエラーが多発します。必ず全部切ってから試してみてください。

####phpMyadminにログインできない方へ

・laradockのデータベースの管理のクセが強くlaradockで２回目の作成をする際に困惑する方が多いです。
と言うのもプロジェクト単位（コンテナ毎）でデータベース情報を保存をしてるかと思いきや、、、
パソコンの隠しフォルダ.laradock/data/mysqlに情報を全部保存し共有しようとしています。

なのでもし失敗してもう一度構築する方や２個目のプロジェクトを作る場合はそのフォルダがすでに存在しているとlaradockはそのフォルダを読みにいって<b>新規プロジェクトのユーザーもデータベースも作りません（なぜだ！？）</b>

.envに必死に色々変更を加えても全く変化がないんです。。

この現象に悩んでいる方は、
ターミナルを開いて、

```
$ rm -rf ~/.laradock/data/mysql
```
で情報を削除し、

コンテナを立ち上げ済みならlaradock上で

```
$ docker-compose down
```
そして

```
$ docker-compose up -d nginx mysql phpmyadmin
```

を行うと新規の情報でユーザーやデータベースを作ります。
これ知ってないと永遠に積んじゃいそうですね、、、。

####それでもなおphpMyadminでエラーが出る方
<img width="473" alt="スクリーンショット 2019-11-08 21.04.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400532/3bc47082-6b59-8933-8786-2a140f5335bb.png">

このエラーが出てphpMyadminにログインできない方は、
上記でmy.cnfを修正した記憶があると思うのですが、それがうまく反映されていないために起こっているエラーです。

本来であれば上記の記述だけで反映されそうですが
僕の生徒さんも何人かはなぜか反映されなかったので、
強制的にMysqlコンテナ内でパスワードの認証方式を変える方法も記入しておきます。

laradockフォルダ場のターミナルで、



```
$ docker-compose exec mysql bash
```

するとmysqlコンテナに入れるのでrootユーザー（管理者として）でログインします。

```
$ mysql -u root -p
```
パスワードを求められるのでrootと入力します。
（パスワードは打ち込んでもターミナルが反応しませんがちゃんと入力されてます。）

ログインが成功するとwelcome~~~と出て
mysql＞
ってターミナルに表示されます。

ここで、

```
$ ALTER USER 'default'@'%' IDENTIFIED WITH mysql_native_password BY 'secret';
```

と入力します。
すると今回作っているdefaultユーザーの認証方法が変更されます。
変更されたかの確認は

```
SELECT user, host, plugin FROM mysql.user;
```

で行います。

これで先ほどのエラーなくphpMyadminにログイン出来るはずです！


####Laravelを楽しんで！

・これにて環境構築は完了です！まずは一通りのlaravelの機能は堪能できると思います！
そして慣れてきたらlaradockの中身の多さにびっくりすると思います！
便利なlaravelをどんどん使ってみてください！

Twitterでフォローお待ちしてます〜！
https://twitter.com/Mukae9