LaravelとLaradockを使ったチームでの開発環境を用意する vol.1 ~Laradock設定編~

# LaravelとLaradockを使ったチームでの開発環境を用意する vol.1 
~Laradock設定編~

こんにちは、Dev.Satsukiです。

みなさんはLaravelのプロジェクトをチームで開発するとき、どうしていますか？
公式のHomesteadでしょうか？

今回使うLaradockは、Laravelの開発に必要な環境をDocker上で動かすものです。
http://laradock.io/

Homesteadとくらべてのメリットは

- カスタマイズしやすい
- 不要なサービスは立ち上げなくていい
- VMよりはやい

といった感じでしょうか

この記事はLaravelとLaradockを使ってプロジェクトを始める際のステップを解説していきます
### この記事のゴール
- Laradockを用いたローカル開発環境を用意する
- チームメンバーに開発環境を配布する
- できるだけチームメンバーにはdocker操作の負担をかけない

いくら便利でも負担が大きいなら実際のプロジェクトでは使えません。
その辺りを考慮した上でのLaradockの開発環境を用意します。

実際にチーム開発で使っていますが、デザイナーさんも問題なく活用できています。

今回の記事では、まずローカル開発環境の用意からです

## 事前準備

まずはDockerをインストールする必要があります。
手持ちの環境に応じてDockerをインストールしてください。

注意点としては、windows10を使っている場合、proライセンスでないとHyper-Vが使えません。
mac/Linux系なら、そのままDockerのインストールを進めてください。

[Docker](https://www.docker.com/)

仕事のチームメンバーにはmac windows Ubuntu使いが混在していますが、それぞれLaradockを用いてローカル開発開発環境を持っています。
OSに依存しないで設定が一本化できるのは嬉しいですね。

## プロジェクト用ディレクトリの準備

まず、以下のようなディレクトリを用意します

    your-project/ - your_laravel_project/

your-project → git管理の対象になるディレクトリ

your_laravel_project → laravelのプロジェクト本体が入る場所
名前は任意に書き換えてください

## Laradockインストール

次に、Laradockをインストールします
この時に注意しないといけないのは、**「laradock」という名前のディレクトリを作らないこと**です。
デフォルトのままだと、この名前のディレクトリが作成されます。

ドキュメントにはしれっと書いていますが、コレを怠ると、別のプロジェクトを始めたときに厄介なことになります

> (It’s important to rename the laradock folders to unique name in each project, if you want to run laradock per project).

というのも、Laradockで作成されるdockerのはimage名は、このディレクトリ名がprefixとして付与されます。
 「laradock」という名のディレクトリが、プロジェクトをまたいで存在している場合、同じimageを共有することになります。

環境設定の分離、余計なエラー防止、開発環境をクリーンに保つためにも、Laradock用のディレクトリ名は変更しておくのが吉でしょう。

    cd your-project
    git submodule add https://github.com/Laradock/laradock.git laradock_your_project

現時点のディレクトリ構成

    your-project/ - your_laravel_project/
    		      - laradock_your_project/

## Dockerの設定

次にLaradockの設定を行います。
Laradockでは、.envファイルに設定を記載します。

ドキュメント通り従って、設定ファイルを書き込めば環境の構築はできるのですが、チームメンバーに配布することを考えるとこの設定方法は少し面倒です。

対策として、Docker関連の設定ファイルと、それをコピーするshell script置き場.shディレクトリを作成します。

ディレクトリ構成は以下の通りです。
setup.shは、現時点でカラで大丈夫です。

    your-project - laradock-your_project/
    		 - your_laravel_project/
    		 - .sh/
    	  		- conf/	
    			- setup.sh

それでは、設定を始めていきましょう

## 開発環境用の.env作成

confディレクトリの下に.envファイルを作成します
コレは実際に使うlaradockのenvです。

基本的にはlaradock-your-project配下にあるenv-exampleのコピーで大丈夫です
DBのパスワードなども変更できるので、必要に応じて編集してください。

プロジェクトの種類にかかわらず、以下の部分のみは必ず変更することをオススメします

    APP_CODE_PATH_HOST=../your_laravel_project
    DATA_PATH_HOST=~/.laradock-your_project/data
    

APP_CODE_PATH_HOSTはLaradockのwebサーバー上で同期するディレクトリです
Laradock本体は別にdocker上になくても大丈夫なので、同期するのはlaravelプロジェクトのディレクトリのみにします。

DATA_PATH_HOSTはdockerのstorage等を保存する、ローカルPCのディレクトリです。
デフォルトでは~/.laradock/dataですが、このままにしておくと別のプロジェクトを作成した時に同じ場所を参照していまいます。
プロジェクトごとにdockerマシンを区別して使うために、ここはLaravelのプロジェクト名と同じにしておくと良いでしょう

作成したenvファイル名は「.laradock-env」として、.sh/conf内に入れておきます

## laradockに.envを適応するためのscriptを作成

.laradock-envが出来ました。続いては、コレを実際に適応するためのscriptを用意します

先程作ったsetup.shを以下のように編集します

    SCRIPT_DIR=$(cd $(dirname $0); pwd)
    
    cd $SCRIPT_DIR
    
    cp -f conf/.laradock-env ../laradock-your_project/.env

コレで、Laradockの.envファイルを設置・更新する場合は、このscriptを流すだけで完結します。

.shディレクトリはサブモジュール外なので、自分のプロジェクトの一部としてgit管理ができます。
これなら開発環境は常に同期できますし、新メンバーへの環境設定もscript一発です。

現時点でのディレクトリ構成

![](https://static.notion-static.com/a56c50c2-ddc7-4963-9daf-0567616d5501/_2018-04-11_15.32.19.png)

scriptを実行して、以下の場所に.envファイルが出来たことを確認します

    // your-project ディレクトリにて
    sh .sh/setup.sh

![](https://static.notion-static.com/52ade757-c9a5-44b8-997e-210b06d856a2/_2018-04-11_14.27.46.png)

## dockerの起動

ではDockerを起動してみましょう
今回は試しにnginx postgres redisを起動します

    cd laradock-your_project
    docker-compose up --build -d nginx postgres redis workspace
    // ubuntuの場合はsudoが必要です

しばらくするとインストールが始まり、イメージの作成がはじまります。しばらく待機しましょう(ちょっと時間かかります)

インストール完了後は、起動中のimageを確認します。

    docker-compose ps
    Name                           Command               State                    Ports
    -----------------------------------------------------------------------------------------------------------------
    laradockyourproject_nginx_1       nginx                            Up      0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
    laradockyourproject_php-fpm_1     docker-php-entrypoint php-fpm    Up      9000/tcp
    laradockyourproject_postgres_1    docker-entrypoint.sh postgres    Up      0.0.0.0:5432->5432/tcp
    laradockyourproject_redis_1       docker-entrypoint.sh redis ...   Up      0.0.0.0:6379->6379/tcp
    laradockyourproject_workspace_1   /sbin/my_init                    Up      0.0.0.0:2222->22/tcp

帰ってきた結果のstateが全てUpになっていればOKです。
php-fpmは指定していませんが、勝手に立ち上がります。

## 動作確認

ここまで来たらlocalhostにアクセスしてみましょう。

[http://localhost](http://localhost/)

nginxの404エラーが表示されていればココまでの手順はOKです。

## 仮想マシンの停止

作業が終わったら、仮想マシンを止めておきましょう
これで今回の作業は終了です。おつかれさまでした。

    docker-compose stop

---

## まとめ ココまででやったこと

- プロジェクト用のディレクトリ作成
- Laradock設定ファイル作成
- ローカル環境を設定するためのshell script作成
- ローカル開発環境用のDocker起動 停止

ここまでくればLaradockの山場は終わりです。
最初の設定は面倒ですが、gitで他の人に環境配布する際は、setup.shを走らせて、あとはdocker起動コマンドを打つだけです。

初めてのQiita投稿ですが、なかなか書くのって緊張しますね。
何ツッコミどころなどありましたら、コメント欄やTwitterで連絡をお願いします。
[デベロ葉サツキ (@dev_satsuki) | Twitter](https://twitter.com/dev_satsuki)

## 次回予告

次回記事では、Laravelのプロジェクトを作成して、実際にdocker上でLaravelを動かしてみます。