【サルが書く】LaraDockでLaravelの環境構築やってみよう編

わきゃ

環境構築がこの世で一番難しいと思っています。


今回はLaraDockを使用して、Laravelの開発環境構築を行っていきます。
※基本的にMacでの環境構築方法を説明していきます。

## LaraDockとは？
LaraDockとは、仮想化ソフトウェア「Docker」上で動作する、オープンソースの開発環境です。
https://laradock.io/

Dockerとは、コンテナと呼ばれる仮想環境を作ることができるものです。これまでの仮想環境に比べると動作が軽く、環境の設定等をコードで管理できるため、環境の再現性が高いです。

LaraDockはLaravelの動作に必要な環境を構築するコードを、GitHubから引っ張ってきてそのコードを元にDockerが環境を構築してくれます。

LaraDockには以下の機能が含まれています。

- nginx (webサーバー)
- php-fpm (phpの実行環境)
- MySQL (DB管理システム)
- workspace (Laravelの開発に必要な環境がまとまっているもの)
- phpMyAdmin (MySQLをGUIで操作できるもの)

## Laravelの環境を構築していくわよ

Laradockのの導入には `Docker` と `git` のインストールが必要です。

### 1. Dockerのインストール

1. DockerHubにアクセス会員登録を行う。
https://hub.docker.com/

2. 会員登録後に、トップページにある `Get started with Docker Desktop` のリンクをクリックし、Dockerをダウンロードします。

3. ダウンロードファイルを展開し、指示通りにインストールを進めます。インストールが完了したらDockerを起動した状態にしておきましょう。

### 2. gitのインストール

Macの場合Xcodeがインストールがされていればgitのインストールがされていると思います。
以下のコマンドをターミナルで叩いてみましょう

```bash
$ git --version
git version 2.23.0
```

バージョン情報が出ていればgitはすでにインストールされています。

バージョンが古い場合があるので、最新版のgitをインストールしても良いと思います。
https://git-scm.com/downloads

### 3. LaraDockのインストール

```bash
# laradock_testという名前でディレクトリを作ります
bash-3.2$ mkdir laradock_test

# cd でlaradock_testに移動
bash-3.2$ cd laradock_test/

# git cloneでlaaradockのソースをダウンロードします。
bash-3.2$ git clone git@github.com:laradock/laradock.git
Cloning into 'laradock'...
remote: Enumerating objects: 32, done.
remote: Counting objects: 100% (32/32), done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 9337 (delta 10), reused 7 (delta 0), pack-reused 9305
Receiving objects: 100% (9337/9337), 8.66 MiB | 4.45 MiB/s, done.
Resolving deltas: 100% (5002/5002), done.

# lsでディレクトリの中身を確認するとlaaradockディレクトリが確認できます。
bash-3.2$ ls
laradock

# cdでlaradockディレクトリに移動しましょう。
bash-3.2$ cd laradock/
```

### 4. コンテナの初期化をやる

コンテナ初期化の前に、設定ファイルを作成する必要があります。

```bash
# 元のソースにあるenv-exampleを.envとしてコピーする
bash-3.2$ cp env-example .env
```

コンテナの初期化を行ってきましょう。

```bash
# コンテナの初期化行います。ダウンロードや設定を行うのでしばらく待ちます。
bash-3.2$ docker-compose up -d nginx mysql workspace phpmyadmin
```

初期化が終わると自動的にコンテナが起動状態になっています。
 `docker ps` コマンドを実行すると起動中のコンテナを確認することができます。

```bash 
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                                      NAMES
09b6b2e0f3e8        laradock_nginx        "/bin/bash /opt/star…"   28 seconds ago      Up 26 seconds       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   laradock_nginx_1
7dcee16a8564        laradock_php-fpm      "docker-php-entrypoi…"   29 seconds ago      Up 27 seconds       9000/tcp                                   laradock_php-fpm_1
7f049605423b        laradock_phpmyadmin   "/docker-entrypoint.…"   31 seconds ago      Up 29 seconds       0.0.0.0:8080->80/tcp                       laradock_phpmyadmin_1
38a2d3135a8d        laradock_workspace    "/sbin/my_init"          31 seconds ago      Up 28 seconds       0.0.0.0:2222->22/tcp                       laradock_workspace_1
018fa8e3cdde        laradock_mysql        "docker-entrypoint.s…"   32 seconds ago      Up 30 seconds       0.0.0.0:3306->3306/tcp, 33060/tcp          laradock_mysql_1
59ec053e8585        docker:dind           "dockerd-entrypoint.…"   32 seconds ago      Up 30 seconds       2375-2376/tcp                              laradock_docker-in-docker_1
```

6つのコンテナが起動していることが確認できます。

### 5. Laravelのプロジェクトを作っていこう
先程、初期化を行ったworkspaceが作業を行うコンテナなのでそこへ接続(ログイン)を行います。
ログインはデフォルトで用意されているlaradockで行います。

```bash 
docker-compose exec --user=laradock workspace bash
```

ログインが完了すると、 `/var/www`ディレクトリに入るので、下記のcomposerコマンドを叩いて新規プロジェクトを作成します。
このcreateコマンドを打つことによって、必要なパッケージは自動的にインストールされ、laravelのアプリケーションが作成されます。
コマンド内の `test_app` がアプリケーション名になります。

```bash
composer create-project laravel/laravel test_app --prefer-dist "5.5.*"
```

アプリケーションは作成されましたが、まだ `http://localhost` ではアクセスできません。

### 6. 最後にホストに設定をしなくてはならない......!!

一旦、workspaceコンテナから出ます。

```bash
laradock@38a2d3135a8d:/var/www$ exit
exit
```

そこで先程の `.env` ファイルを編集します。

```bash
vi .env
###########################################################
###################### General Setup ######################
###########################################################

### Paths #################################################

# Point to the path of your applications code on your host
#　ここを先程作成したアプリケーション名に書き換える
APP_CODE_PATH_HOST=../
↓
APP_CODE_PATH_HOST=../test_app

..(略)
```

書き換えただけでは、設定が反映されないので、コンテナの再起動を行います。

```bash
# 停止
bash-3.2$ docker-compose stop
Stopping laradock_nginx_1            ... done
Stopping laradock_php-fpm_1          ... done
Stopping laradock_phpmyadmin_1       ... done
Stopping laradock_workspace_1        ... done
Stopping laradock_mysql_1            ... done
Stopping laradock_docker-in-docker_1 ... done

# 起動
bash-3.2$ docker-compose up -d nginx mysql
Starting laradock_mysql_1              ... done
Recreating laradock_docker-in-docker_1 ... done
Recreating laradock_workspace_1        ... done
Recreating laradock_php-fpm_1          ... done
Recreating laradock_nginx_1            ... done
```

ここで `http://localhost` にアクセスしてみましょう。
テストページが表示されるはずです！
<img width="1440" alt="スクリーンショット 2019-10-26 17.30.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177293/fb0f73c0-9000-c07f-39c3-aaaa80acac99.png">


### 環境ができた！いろいろためしてみよう！

### 7. 参考文献

[PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応](https://amzn.to/2MFN7eg)