サクッとLaradockでLaravel8 (&PHP8 &Nginx)

こんにちわ！今年もアドベントカレンダーの季節がやってきましたー！ヽ(=´▽`=)ﾉ

今年も弊社ではせめて年に1記事はなんんかアウトプットを残そう！と言うスローガンで記事を上げて行きたいと思っていますm(_ _)m
なのでカレンダーが埋まっていなくてもご容赦下さい(；´Д｀)

さて！今年も色々新技術やらせて貰ったのですがその中から最も苦戦した（ｗ）`Laravel8 ` の話を書かせて貰おうと思います。
***※言い訳をすると、最近はPHPでは無い案件の方が多くなってきていて浦島状態でした・・・\_(´ཀ`」 ∠)_***

`Laradock` は`Laravel` 開発環境を `Docker` コンテナとしてローカルに即座に立ち上げが出来る画期的なOSSです。
`Docker` の習得には時間が掛かりますので上辺でサクッとやりたい私にとても向いていました（おい


# `Laradock` でサックリ `PHP8` `Laravel8` な環境を作るレシピのご紹介

今回の記事のターゲットの方は
`Laradock` を使って簡単に `Nginx` `PHP8` `Laravel8` な環境をサックリ作りたい方を対象にしています。
(※何よりも自分が困ったので・・・)

手順は以下です。

- `Github` でリポジトリを作成
- `Laradock` をsubmoduleとしてリポジトリに追加
- `Laradock` を使ってローカルにサックリ `Laravel8` 環境を構築して `Github` にPush

手順は答を知ってしまうと割と簡単でこんな感じです。
順番に説明していきます。


#### 先ずは通常通りプロジェクト用のリポジトリを用意します。
![スクリーンショット 2021-11-30 1.09.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151630/2720f1e7-d17e-d16f-c752-ad6860970799.png)

#### Github上でリポジトリを作ったら、ローカルにクローンします。
![スクリーンショット 2021-11-30 1.24.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151630/9bae7c04-bb75-59be-284a-ce6007eb8e55.png)
***※私は~/workspaceと言うディレクトリの下にクローンしましたがお好きな場所で良いと思います。***

#### 自分のリポジトリの配下に `Laradock` も持ってきます。
この時、サブモジュールとして自身のリポジトリに追加するのが簡単だと思います。
`git submodule add https://github.com/laradock/laradock.git laradock`
とコマンドで実行すれば追加されます。
![スクリーンショット 2021-11-30 1.36.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151630/7628fe4b-b83f-b4a6-7460-fcac87972be8.png)

#### 操作しやすいようにAtomエディタでプロジェクトを開いておくと便利です。
![スクリーンショット 2021-11-30 1.33.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151630/9bd2b372-b7e4-c888-dfae-8c74a06491d5.png)
![スクリーンショット 2021-11-30 1.33.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151630/696ebcf9-6f60-3ed7-01a2-508aa3af49bf.png)

#### `Laradock`の為にDocker Desktopをインストールします。

[https://www.docker.com/products/docker-desktop](https://www.docker.com/products/docker-desktop) コチラからMac版、Windows版環境に合う方をダウンロードしてインストールして下さい。
***※説明を割愛しますが、手順通りにインストールすればOKです。***
![スクリーンショット 2021-11-30 1.47.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151630/d5f0156a-9908-239c-8c4f-5d1cb5a1a262.png)
言われるがままにサンプルまで実行するとこんな感じの画面になり、インストールが終了します。

#### `Laradock` を起動したらローカルの `Laravel8` 開発環境がもう出来てしまいます。

larabelsample/laradock/.env.example をコピーして larabelsample/laradock/.env を作ります。
.envの中の
`PHP_VERSION=7.4`を8.0に変更します。
***※ローカルはPHP8でなくて構わないと言う場合はいじらなくて良いです。***

`cd laradock`
`docker-compose up -d nginx mysql workspace phpmyadmin`
としてLaradockを起動させます。
![スクリーンショット 2021-11-30 2.02.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151630/1edf258f-0d00-83ab-ad72-3108505840bd.png)
コマンド実行直後に `Laravel` 用の `Dockerコンテナ` の作成が始まりますので暫く待ちます。
![スクリーンショット 2021-11-30 2.06.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151630/02b08adc-05a8-57fb-6972-b49886a748ec.png)
程なくDockerが起動しました！
しかし起動しただけだとまだ404 Not Foundです。
![スクリーンショット 2021-11-30 2.18.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151630/dda8ad7e-d4cd-4c62-dcc9-60c5d8fb2af4.png)
理由は簡単で、Dockerが起動しただけでアプリケーションの中身が空っぽだからです。
なのでアプリケーションの雛形もサクッと作成して行きます。

#### `Laradock` で作成した workspace から `composer` を使ってプロジェクトを作成します。

`docker-compose exec workspace bash`として、workspaceコンテナにログインします。

![スクリーンショット 2021-11-30 2.25.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151630/9c797f32-f018-dda0-f2ff-19d5c00eec37.png)
workspaceでは既に `composer` が実行出来る状態が整っていますので 
`composer create-project laravel/laravel sample`
としてプロジェクトの作成を行います。
この時、最後の引数で指定する名前はプロジェクトの名前を指定しましょう。
***※この名前でディレクトリが作成されます。***

暫くするとプロジェクトが作成されます。
終わると以下のような構成になるかと思います。
![スクリーンショット 2021-11-30 2.59.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151630/d2f5aadb-bc19-76a7-d7bc-3fb0992c4e4d.png)
プロジェクトの作成が完了したら、一度コンテナから`exit`して抜けます。

#### もう一度 larabelsample/laradock/.env を編集します。

`APP_CODE_PATH_HOST=../` を作成したプロジェクトのディレクトリに変更します。
ローカルの.envのファイルの場所から見たパスを指定するので
`APP_CODE_PATH_HOST=../sample`
とすればOKです。
***※この手順は敢えてプロジェクト作成の後からやる必要がある事に注意が必要です。***

#### また、作成したプロジェクトの.envファイルの設定も変更します。

larabelsample/sample/.envが作成されているハズです。
larabelsample/sample/.envの `DB_HOST=127.0.0.1` を `DB_HOST=mysql` に変更して下さい。
作成した `Docker` コンテナのmysqlを向いてくれるようになります。

#### 最後に `Nginx` を再起動して `localhost` にアクセスしてみましょう！

`cd laradock`
`docker-compose up -d nginx`

上記コマンドで再設定したenvに沿ってコンテナが再構築されますので暫く待ちましょう。
![スクリーンショット 2021-11-30 3.22.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151630/e4ebc9d9-9ec0-a791-0275-0e8b09170427.png)

##### 再構築が完了し、無事起動したらいよいよ [http://localhost](http://localhost) にアクセスしてみましょう！

![スクリーンショット 2021-11-30 3.22.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151630/e50ed918-bd29-9b03-afc6-9c2b719fe132.png)

無事完了していれば `Nginx` `Laravel8` `PHP8` と言う環境でスタートページが表示されると思います。

##### `PHPMyAdmin` にもアクセスが出来るようになっているハズです。

[http://localhost:8081/](http://localhost:8081/) にアクセスしてみましょう。
***※デフォルトの接続設定は以下です***
サーバー: mysql
ユーザー名: root
パスワード: root
![スクリーンショット 2021-11-30 3.27.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151630/d38e6def-b5a0-4ee0-7ad1-8ee2c8a3451b.png)
無事アクセス出来れば設定は無事完了しています。

このままGitにPushしてしまって、もうOKです。
直ぐにチーム開発が始められると思います。

個人的には larabelsample/sample/.env はバージョン管理に入れてしまって良いと思います。
***※標準では larabelsample/sample/.gitignore で ignore されています。***
.envをバージョン管理に置くことでチームメイトはGitリポジトリをCloneするだけで開発が始められるようになります。
***※但し、.envにはDBのパスワードを記述しているのでプライベートリポジトリの場合のみのオススメになります。***

以上長くなりましたが `Laradock` でサックリ `PHP8` `Laravel8` な環境を作るレシピのご紹介でした。
参考になれば幸いです！

最後まで読んで頂き有難う御座いました！それでは！！m(_ _)m