laravel5.4でscaffoldしたい

# はじめに

どうしてもLaravel5.4.23+PHP7.1.4の環境でscaffoldしたかったので、乱立してるサードパーティを分かる範囲で(+railsのscaffoldに似た結果になる入力を）集めて実行してみました。rails5と比較して、各ライブラリで生成できるファイルの一覧がまとめられたらいいなと。取り急ぎ、どの程度生成できるか確認したい。

- laravel
    - 5.4.23
- php
    - 7.1.4
- os
    - macOS Sierra 10.12.5

# setup db

```sql
grant all on *.* to 'test'@'localhost' identified by 'test';
create database scaffold;
```

```ini:.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=scaffold
DB_USERNAME=test
DB_PASSWORD=test
```

# 比較対象

- [laralib/l5scaffold](https://github.com/laralib/l5scaffold)
   - http://qiita.com/imasami/items/d479f570e17e0acf7bff
   - sqliteでは動かず、mysqlなら動いた
- [amranidev/scaffold-interface](https://github.com/amranidev/scaffold-interface)
    - http://qiita.com/imasami/items/0169f86eedb15fc4d634
    - sqliteでは動かず、mysqlなら動いた
- ~~[jrenton/laravel-5-scaffold](https://github.com/jrenton/laravel-5-scaffold)~~
    - laravel5.3用らしい
    - `composer update`時に`Call to undefined method Illuminate\Foundation\Application::share()`が出る
- ~~[Innodite/laravel5-scaffold](https://github.com/Innodite/laravel5-scaffold)~~
    - laravel5.2用らしい
    - `app/Http/routes.php`を要求してくる
- ~~[robbielove/l5scaffold](https://packagist.org/packages/robbielove/l5scaffold)~~
    - laravel5.2用らしい
    - `app/Http/routes.php`を追加しろとreadmeに書いてる
- ~~[rohmad-st/kodegenerator-laravel-5](https://github.com/rohmad-st/kodegenerator-laravel-5)~~
    - scaffoldぽいけど、repositoryとかform requestとか普段見ないファイルを生成してくれちゃう。
    - 逆にbladeなどは生成してくれない。
    - laravel5.4未満用かもしれないので試行しない。
- ~~[coopers98/genericcrud](https://github.com/coopers98/genericcrud)~~
    - scaffoldではないので試行しない。
    - 手動作成のコントローラにCRUDなメソッドをtraitできるものっぽい。

# rails5の生成例を基準とする

基本的にlaravel用のscaffoldライブラリの試行は下記のようにrails5での内容に沿って行う。

```:console
$ rails new . -f
```

## scaffold simple table

```:console
$ rails generate scaffold AdminUser name:string mail:string
```
```:console
$ rails routes

         Prefix Verb   URI Pattern                     Controller#Action
    admin_users GET    /admin_users(.:format)          admin_users#index
                POST   /admin_users(.:format)          admin_users#create
 new_admin_user GET    /admin_users/new(.:format)      admin_users#new
edit_admin_user GET    /admin_users/:id/edit(.:format) admin_users#edit
     admin_user GET    /admin_users/:id(.:format)      admin_users#show
                PATCH  /admin_users/:id(.:format)      admin_users#update
                PUT    /admin_users/:id(.:format)      admin_users#update
                DELETE /admin_users/:id(.:format)      admin_users#destroy
```

## 生成ファイル一覧

### view

- app/assets/javascripts/admin_users.coffee
- app/assets/stylesheets/admin_users.scss
- app/assets/stylesheets/scaffolds.scss
- app/helpers/admin_users_helper.rb
- app/views/admin_users/_admin_user.json.jbuilder
- app/views/admin_users/_form.html.erb
- app/views/admin_users/edit.html.erb
- app/views/admin_users/index.html.erb
- app/views/admin_users/index.json.jbuilder
- app/views/admin_users/new.html.erb
- app/views/admin_users/show.html.erb
- app/views/admin_users/show.json.jbuilder

### controllers

- app/controllers/admin_users_controller.rb

### models

- app/models/admin_user.rb

### routes

- config/routes.rb

### migrates

- db/migrate/20170529054019_create_admin_users.rb

### tests

- test/controllers/admin_users_controller_test.rb
- test/models/admin_user_test.rb
- test/system/admin_users_test.rb

#### fixtures

- test/fixtures/admin_users.yml

## 総感

特に何も手作業はなく、routesまで有効になっている。生成されたファイルを確認すると、CRUDなviewと簡単なtestcaseが生成された(rspecを仕込んであれば、controllers, modelsの他にroutes用rspecも生成されたはず）。

具体的に生成ファイルされたファイル一覧は右記参照。https://github.com/laravel-scaffold-trial/base-rails5/pull/1