Edited at

LaravelとDockerでプロジェクトを始めるときに見るメモ

12/19 phpstorm用の設定について追記


概要

Laravelで新規プロジェクトを立ち上げる機会が多くなり、

毎回「最初にこれ考えとけばよかった!」ってのが出てくるので、まとめて見ました!

以下の環境で作ります。


  • Mac

  • Laravel 5.7

  • Laradock

  • heroku


開発の進め方

以下の手順で進めていきます。


  • 開発環境構築

  • Laravelで開発前に決めておくべきこと

  • DBマイグレーションファイルの作成

  • Seederの作成


    • リレーションを意識してSeederを最初に作っておくと以下の利点があります。

    • DB設計不備を発見できる。型やサイズ、リレーションなど。

    • Modelにリレーションを記述する必要があるので、開発中に同時にModelに手が入る事が少なくなる。

    • リレーションのサンプルが出来るので、それを参考にメンバーが開発しやすくなる。



  • 開発

  • デプロイ


開発環境構築

Laradockを利用します。

Vagrantで構築するより軽いのと、ミドルウェアを疎結合にして、実際の本番環境の近づけるためです。

サンプルはこちら

https://github.com/naoki0531/template-laravel


構成

本番へアップするソースになるべく不純物を入れたくないので、以下のような構成にします。

開発環境用リポジトリを作り、srcフォルダ内へLaravelのソースリポジトリをクローンする形にします。

開発環境用リポジトリ

└ laradock/

└ src/

└ data/

ファイル名
用途

aradock/
laradockリポジトリ

src/
Laravelのソースリポジトリ

data/
mysqlなどのデータ永続化フォルダ

README.md
手順を記載

.env.laradock
laradock用の.envファイル


前準備


  • git

  • docker for mac

  • docker-compose

  • 開発環境用リポジトリ

  • Laravelソースリポジトリ


開発環境用リポジトリの作成

$ mkdir {プロジェクト名}

$ cd {プロジェクト名}
$ git init


永続化dataディレクトリの作成

laradockで実行されるmysqlなどのデータがここに格納されます。

$ mkdir data

$ touch data/.gitkeep


gitignore作成

dataディレクトリの直下のデータとsrcディレクトリをgitの管理外へ。

他、エディタの設定ファイルなどあればここへ追加。

$ vi .gitignore

src

data
!data/.gitkeep

# phpstormの設定ファイル
.idea


envファイル作成

手順をなるべく減らしたいので、laradockの.envの雛形を開発用リポジトリに入れておきます。

$ git submodule add https://github.com/laradock/laradock.git

$ cp laradock/env-example .env.laradock
$ vi .env.laradock

# ソースと永続化データフォルダのパス変更

APP_CODE_PATH_HOST=../src
DATA_PATH_HOST=../data

# NGINXのポートを変更
NGINX_HOST_HTTP_PORT=8080

# MYSQL
MYSQL_DATABASE={データベース名}
MYSQL_USER={ログインユーザー名}
MYSQL_PASSWORD={パスワード}


READMEの作成

上から実行していくだけで環境が見れる状態を作ります。

$ vi README.md

バックスラッシュは削除してください。

# initial setting

\```bash
$ git clone {開発環境用リポジトリURL} {開発環境用ディレクトリ}
$ cd {開発環境用ディレクトリ}
$ git submodule init
$ git submodule update
$ git clone {Laravelのソースリポジトリ} src
$ cp src/.env.example src/.env
$ cp .env.laradock laradock/.env
$ cd laradock
$ docker-compose up -d --build nginx mysql workspace
$ docker-compose exec workspace composer install
$ docker-compose exec workspace npm install
$ docker-compose exec workspace php artisan key:generate
\```
http://localhost:8080/


以下のファイルをコミット

.env.laradock

.gitignore
.gitmodules
README.md
data/.gitkeep
laradock


Laravelリポジトリの作成


laradock実行

$ cp .env.laradock laradock/.env

$ cd laradock
$ docker-compose up -d --build nginx mysql workspace


Laravelプロジェクトの作成

$ docker-compose exec workspace composer create-project laravel/laravel .


Laravelソースリポジトリへコミット

$ cd ../src

$ git init
$ git add .
# 以下省略


動作確認

$ cp .env.example .env

$ cd ../laradock
$ docker-compose exec workspace composer install
$ docker-compose exec workspace php artisan key:generate

http://localhost:8080/


Laravelで開発前に決めておくべきこと


Modelの場所

スクリーンショット 2018-10-13 17.57.45.png

デフォルトではこの位置ですが、自分は好みでModelsフォルダを作成してそこへ格納しています。

以下のようにnamespaceの修正を忘れずに。


User.php

<?php

namespace App\Models;

// ・・・



Serviceクラスの有無

正解はありませんので、アプリ特性を考えて作るか作らないか判断すべきかと思います。

WEBやAPIなどで使い回すロジックが多い場合は作ったほうが良いかもしれません。


ViewComposerの利用


FormValidationの利用


データベース

Laravelのmigrationを利用します。

直接作成するのではなく、Laravelのライブラリを利用して、DBから自動生成する形を取りたいと思います。


準備

まずDBを作るためのER図をMysqlWorkBench を利用して作成します。


  • [File] > [New Model] > [Add Diagram] を選択。

  • 左カラムの [mydb] をダブルクリックして、データベース名を.envで指定したものに変えておきましょう。

スクリーンショット 2018-10-13 12.15.06.png


ER図の作成

画像のアイコンをクリックし、作成していきます。

スクリーンショット 2018-10-13 12.18.21.png

必ずこうしなければならないというわけではないですが、わかりやすいのでORMのデフォルトルールに従って作っていきましょう。


  • データベース名は複数形にする。

  • 中間テーブル以外はAutoincrementのidカラムを作る。

  • アプリケーションの利用で増えていくテーブルにはcreated_atupdated_atdeleted_atをつけておく。

  • 中間テーブルはORMのdetachで物理削除されるのでtimestamp系はつけない。

スクリーンショット 2018-10-13 17.31.18.png


ER図からDBにテーブルを作成


  • [Database] > [Forward Engineer] を選択

  • DBの接続情報を入力して進めると、テーブルが作成されます。

スクリーンショット 2018-10-13 17.21.11.png

できました!


DBからmigrationファイルを作成


  • デフォルトで用意されているuserのマイグレーションファイルを削除。


src

$ rm database/migrations/2014_10_12_000000_create_users_table.php




  • Laravel Migrations Generatorのインストール


laradock

$ docker-compose exec workspace composer require --dev "xethron/migrations-generator"




  • app/Providers/AppServiceProvider.phpへ追記


AppServiceProvider.php

    public function register()

{
if ($this->app->environment() !== 'production') {
$this->app->register(\Way\Generators\GeneratorsServiceProvider::class);
$this->app->register(\Xethron\MigrationsGenerator\MigrationsGeneratorServiceProvider::class);
}
}


  • 作成


laradock

$ docker-compose exec workspace php artisan migrate:generate



  • 完成!

スクリーンショット 2018-10-13 17.42.01.png


  • 確認

一応、流せる事を確認しておきましょう。freshで全てのテーブルを削除してから実行してくれます。


laradock

$ docker-compose exec workspace php artisan migrate:fresh



開発


phpstormでlaravel用の設定を行う

ファサードやモデルの補完が行えるようになってとても便利なので入れましょう!


必要パッケージインストール


laradock

$ docker-compose exec workspace composer require doctrine/dbal

$ docker-compose exec workspace composer require barryvdh/laravel-ide-helper
$ docker-compose exec workspace php artisan ide-helper:generate
$ docker-compose exec workspace php artisan ide-helper:model


phpstorm設定


  • plugin

    [Preferences] > [Plugins]

    Laravel Pluginを入力してインストール


  • エラー対策

    ide-helperを使うと、multiple definitionsエラーが出てしまうので、エラーを抑制します。

    [Preferences] > [Editor] > [inspections] > [PHP] > [Undefined] > [Undefined class]

    Don't report・・・にチェックを入れる。



確認

DBのカラム名とファサードが補完できるようになりました!

スクリーンショット 2018-12-19 18.36.49.png

スクリーンショット 2018-12-19 18.39.23.png

※ ファサードやモデルが増えるたびにコマンドを実行し直しておきましょう。


ログイン画面

特に理由がないならば、LaravelのAuthをカスタムしていくのがとても便利です。


Auth実行


laradock

$ docker-compose exec workspace php artisan auth



https対応

ローカルではhttp、

本番ではhttpsにしたいかと思います。

asset()関数をそのまま使うと、全てhttpになってしまいますし、

secure_asset()などに書き換えるのも面倒です。

そこで以下のファイルを書き換えることで、動的に対応されるようになります。

app/http/Middlewares/TrustProxies.php


TrustProxies.php

protected $proxies = '**';



デプロイ


heroku

簡単に公開できるので、よく利用しています。

herokuで公開する手順。


procfileの作成

以下のファイルを作成してmasterへコミット。


laravel/src

$ echo 'web: vendor/bin/heroku-php-apache2 public/' > Procfile