crud-d-scaffoldを使って、Laravel5.6でブログコンテンツを爆速構築する方法

Laravel5.6用パッケージ「crud-d-scaffold」をリニューアルしたので、
チュートリアルを書きます。

#出来上がりのイメージ。
以下、デモサイトになります。

**■Crud-d-Scaffold デモページ**
https://demo-cds.dog-ears.net/
※トップページおよび、フッタは追加修正しています。Scaffoldでは更新されません。

###**インデックスページ**
デフォルト、1ページ10件表示。
IDでの完全一致およびスキーマ内容での部分一致で検索絞り込み表示可能。並び替えもできます。
ちなみにスマホ等で表示すると、IDと第一カラム（下記の例だとTITLE）のみの表示になります。

![cap06.png](https://qiita-image-store.s3.amazonaws.com/0/103767/2b781298-3d58-d65c-8435-ef1aeaf486ea.png)


###**Createページ**
複製登録、編集もほぼ同じページになります。
one-to-manyリレーションでつながっている項目は、プルダウンで。（many側のみ）
many-to-manyリレーションでつながっている項目は、チェックボックス（Pivotテーブルにカラムがある場合は、モーダルで入力）で入力します。
![cap07.png](https://qiita-image-store.s3.amazonaws.com/0/103767/d32edc9d-207b-a91e-3508-c7dd3789fbe5.png)
![cap08.png](https://qiita-image-store.s3.amazonaws.com/0/103767/7f6c5da8-4c5f-e198-0827-fed5ca60855e.png)

###**詳細ページ**
one-to-manyリレーションでつながっている項目は、テーブルで表示されます。
![cap09.png](https://qiita-image-store.s3.amazonaws.com/0/103767/1a2e6aed-812d-a644-9869-6859f40452f5.png)

では、作っていきましょう。


最初に、以下は準備されているものとします。
・公開済みのSSH接続できるサーバー。なければ、cloud9でも可
・composerおよびphp7.1.3以上ともろもろphp拡張はインストールされているものとする。

必要要件の詳細は以下、公式ページを参照してください。

**■Laravel 5.6 インストール**
https://readouble.com/laravel/5.6/ja/installation.html

#（１）Laravelのインストール
SSHでサーバーに接続後、インストールしたい場所に移動してから、以下実行

```
composer create-project --prefer-dist laravel/laravel ./[インストールするフォルダ]
```

インストールが完了したら、インストールしたフォルダ内で以下を設定する。

* publicディレクトリを、Apacheの公開フォルダに設定する。
* storage下と、bootstrap/cacheディレクトリを書き込み可能にする

**DBの設定**
ここでは、sqliteを使います。（Crud-d-scaffoldは、mysqlでも動作します。）

.envファイルを修正

```
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
```

↓

```
DB_CONNECTION=sqlite
#DB_HOST=127.0.0.1
#DB_PORT=3306
#DB_DATABASE=homestead
#DB_USERNAME=homestead
#DB_PASSWORD=secret
```

[インストールするフォルダ]/database/に以下の空ファイルを書き込み可で作っておく
database.sqlite

これで、Laravelのインストールが完了しました。

![cap01.png](https://qiita-image-store.s3.amazonaws.com/0/103767/bd83bc18-bc0f-877f-2a0f-e0cb9e51e4c3.png)



#（２）DBの設計
下記のサイトで、簡単に設計できます。

■ER-DIAGRAM-TOOL
http://er.dog-ears.net/

まずは主要モデルを作ります。

###**(i)postモデル**

Edit – Create Model

![cap02.png](https://qiita-image-store.s3.amazonaws.com/0/103767/8183d224-7373-6c27-9854-5e29637cd15c.png)

```
Name：post
Display name：POST
use soft delete：チェック
```
※Nameは単数形のキャメルケースで書く（例.nicePost）

次に、スキーマを追加します。
スキーマの追加は、追加されたモデルのadd schemaを押せば追加できます。!

![cap03.png](https://qiita-image-store.s3.amazonaws.com/0/103767/2e560064-1a9d-d3e5-85c6-292e2bf1a0eb.png)

```
Name：title
Display name：TITLE
Type：string
Input Type：text
Varidate：空欄
Faker Type：sentence()
nullable：チェックなし
unique：チェックなし
show in list：チェック
show in detail：チェック
```

※Nameは単数形のキャメルケースで書く（例.bigTitle）
※Varidateは、以下参照。ただしrequired、uniqueに関しては、チェックボックスで自動に入るので、入力不要。

**■Laravel 5.6 バリデーション – 使用可能なバリデーションルール**
https://readouble.com/laravel/5.6/ja/validation.html#available-validation-rules

※Faker Typeは、以下参照

**■github – fzaninotto/Faker**
https://github.com/fzaninotto/Faker

最初のスキーマ作成時に、リレーション用に表示するスキーマを設定するか聞いてくるので、OKとする。後からモデルの編集画面で変更することも可能です。



同様にスキーマをもう一つ追加

```
Name：body
Display name：BODY
Type：string
Input Type：textarea
Varidate：空欄
Faker Type：paragraph()
nullable：チェック
unique：チェックなし
show in list：チェックなし
show in detail：チェック
```

※本文は長いので、一覧画面には表示しない。また、空欄可としています。

同様に、以下3モデルを作ります。



<details><summary>**(ii)tagモデル**</summary>
[モデル設定]
Name：tag
Display name：TAG
use soft delete：チェック
&nbsp;
[スキーマ設定]
Name：name
Display name：NAME
Type：string
Input Type：text
Varidate：空欄
Faker Type：word()
nullable：チェックなし
unique：チェック
show in list：チェック
show in detail：チェック
※名前はユニークにしました
</details>



<details><summary>**(iii)categoryモデル**</summary>
[モデル設定]
Name：category
Display name：CATEGORY
use soft delete：チェック
&nbsp;
[スキーマ設定]
Name：name
Display name：NAME
Type：string
Input Type：text
Varidate：空欄
Faker Type：word()
nullable：チェックなし
unique：チェック
show in list：チェック
show in detail：チェック
</details>



<details><summary>**(iv)commentモデル**</summary>
[モデル設定]
Name：comment
Display name：COMMENT
use soft delete：チェック
&nbsp;
[スキーマ設定1]
Name：title
Display name：TITLE
Type：string
Input Type：text
Varidate：空欄
Faker Type：sentence()
nullable：チェックなし
unique：チェックなし
show in list：チェック
show in detail：チェック
&nbsp;
[スキーマ設定2]
Name：body
Display name：BODY
Type：string
Input Type：textarea
Varidate：空欄
Faker Type：paragraph()
nullable：チェック
unique：チェックなし
show in list：チェックなし
show in detail：チェック
</details>



次に、リレーションさせていきます。
各モデルの右上の●から、別のモデルの●までドラッグするとリレーションを作れます。

![cap04.png](https://qiita-image-store.s3.amazonaws.com/0/103767/74329483-d518-5f82-7b89-3a0bfbc1c9fb.png)

作るリレーションは、以下の通り。

* category -> post（one-to-many）
* post -> comment（one-to-many）
* post -> tag（many-to-many）

many-to-manyの時は、Pivotテーブル（中間テーブル）が生成されます。
中間テーブルにカラム追加もできます。

post_tagモデルで、add schema

```
Name：priority
Display name：PRIORITY
Type：integer
Input Type：text
Varidate：空欄
Faker Type：numberBetween(1,10)
nullable：チェック
unique：チェックなし
show in list：チェック
show in detail：チェック
```

ここまでで、モデル図はこんな感じになりました。

![cap05.png](https://qiita-image-store.s3.amazonaws.com/0/103767/df399c24-d212-14fb-bcda-b1519cf25894.png)

最後に、File – Saveでcrud-d-scaffold.jsonをダウンロードします。



#（３）Crud-d-Scaffold パッケージのインストール および実行
SSHに戻って、Crud-d-Scaffold パッケージをインストール

```
composer require dog-ears/crud-d-scaffold
```

（２）でダウンロードしたcrud-d-scaffold.jsonをLaravelインストールフォルダ直下にアップ。
その後、以下実行

```
php artisan vendor:publish --tag=public --force
php artisan crud-d-scaffold:setup -f
php artisan migrate
php artisan db:seed
```

以上で、公開用アドレス/posts/を開くと、デモサイトのような状態で、確認できます。
※繰り返しですが、トップページおよび、フッタは追加修正しています。Scaffoldでは更新されません。

#まとめ
LaravelでスキャフォールドできるCrud-d-Scaffoldについて、説明させていただきました。
とりあえず、Laravelで簡単なアプリの骨組みを作りたいときに、便利かと思います。

まだ、粗削りなところが多々あると思うので、今後も更新続けていこうと思います。

もし、使ってみて、不具合や、修正要望などあれば、
どんどん言ってみてもらえればと思います。

それでは。