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

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

★★2020/6月現在：自分の生徒さんにも使ってもらってエラー無し記録を更新中です😄★★
つまりこの記事でエラー出ちゃう人は環境とかスペルミスの方の可能性が高いかと！

windowsの方はこっち！
https://qiita.com/mukae_tech/items/89075e7caf7d6506e0b3

####開発環境
・Laravel6.*(php7.3以上)
・Mysql8.*
・Mac限定です！
・DockerとGitをまだインストールしたことない方は各自インストールしててください！

　Dockerインストールの良記事
　https://qiita.com/kurkuru/items/127fa99ef5b2f0288b81
　nginxを起動するとか以降はやらなくてもOK！
  
　Gitインストールの良記事
　https://tracpath.com/bootcamp/git-install-to-mac.html

・composerも必須です！

####Composer入ってる？

この人です。

<img width="974" alt="スクリーンショット 2019-11-07 0.19.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400532/fb41ef50-325c-3e63-db01-7199402d3b0e.png">

Laravel使う際に必須ですので、まずはインストールしておきましょう。
もしかしたらもう入っているかもしれないので、

ターミナルを起動して、
（$マークは分かりやすいように書いてます。コピペするときは無視）

```
$ composer -v
```
ここでconposerって表示される方はもうインストールされています！
次の項目に進んでください！
出なかった方は、

まずはターミナル上でmac専用色々便利なインストールを簡単にしてくれるシステムhomebrewを落とします。
コピペしてください！


```
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

インストール後に、

```
$ brew install homebrew/core/composer
```

これだけでComposerは準備完了です！

```
$ composer -v
```

とするとcomposerって表示されると思います！
さあ実際にlaravelの環境をインストールしていきましょう！


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

・例えばmail送信の勉強をしたいと思ったらもともとmailhogが準備されてるので一瞬
・例えばredisを使いたいと思ったらもともと準備されてるので一瞬

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

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

・みんな大好きコマンドライン(ターミナル)での作業が必須です。
・コマンドラインのことが全くわからない方でもなんとか行けるように書きます。

ターミナルを最初に開いたところから始めましょう。

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

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

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

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

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

ここで

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

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

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

```
$ ls
```
を押すと、

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

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

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

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

####Laradockの微調整

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

laradockフォルダ内で、

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

```
$ ls -a
```
と -a をつけてあげると表示されます。
このファイルは今回はこの処理だけでOKです！

次は

```
$ cd nginx/sites/
```

```
$ vim 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">

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

①まずキーボードのiを押してVimをインサートモードにします。
②そして画像ではすでに変更されていますが、

root /var/www/public;

を画像の通り、

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

に変更して（Vimの簡単な使い方は検索！）

キーボードのescを押して、
:wq（保存して終了）
で終了してください。

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

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

```
$ cd ../../
```
でlaradockフォルダ上まで戻って、

```
$ vim 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">


「i」でインサートモードにして、
画像のように空いてるところに

default_authentication_plugin=mysql_native_password

を追記します。
（Laradockのバージョンによってはすでに記入されてる可能性があります！その場合は特に修正せずにetc→:qで処理を完了してください！）

:wqで保存して完了です！

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

##phpMyadminのポート番号変更（2020/3/25追記）
公式が対応してくれました！！！！（2020/6/30確認）

一応残しておきますが、*****の間の処理はもう不要なはずです！


＊＊＊＊もう不要＊＊＊＊

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フォルダ上で、

```
$ 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サービス自体の起動を忘れてるだけです。落ち着いて！
普通にmacのアプリケーションにある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やMAMP、他の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@~~~~~# ls
```
をすると（root@~~~~~#はコピーしなくていいですからね）

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


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

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

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

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

```
root@~~~~~# ls
```

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

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

```
root@~~~~~# ls
```
をすると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で扱うための調整をしましょう！

といっても一瞬です！
まずターミナルでlaradockフォルダにいる状態から、

```
$ cd ../app
```

で先ほどインストールしたLaravel自体のフォルダへ！

```
$ vim .env
```

で.envファイルの調整を開始します！

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

「i」でインサートモード

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

終わったら、
キーボードのescを押して
:wqエンターで保存して終了。

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