Laravelはとても人気のあるPHPフレームワークです。Laravelにはartisanというコマンドラインツールがあり、これの拡張が容易です。人気と相まって各々の作ったartisanコマンドには便利なものが多くあります。この記事ではlaravel-dacapoとeloquent-model-generatorを用いて1テキストファイルにまとまったデータベース定義からデータベースの初期化を行うマイグレーションコードとデータベースに対応したモデルコードを作ります。どちらのライブラリもcomposer requireで導入、管理できます。
ucan-lab/laravel-dacapo: Laravel migration generator from schema.yml
krlove/eloquent-model-generator: Eloquent Model Generator
laravel-dacapoはデータベース定義を記述したymlファイルからデータベース初期化用のマイグレーションコードを生成するライブラリです。このライブラリを用いることによってデータベース定義が1テキストファイルで管理されることになり、開発段階でよくある複数人が同時にマイグレーションファイルを触ることによる定義の衝突が起こらなくなります。使い方はとてもシンプルでphp artisan dacapo:initで生成されるdatabase/schemas/default.ymlファイル中にデータベース定義を記述、定義を変えたらphp artisan dacapo:generate、php artisan migrate:freshするだけです。これで適切な順番でデータベースが初期化されます。ymlファイルの例は以下です。
users: relations: \ - foreign: group_id references: id on: groups onUpdate: cascade onDelete: cascade columns: id: bigIncrements name: string email: type: string unique: true email_verified_at: type: timestamp nullable: true password: string rememberToken: true timestamps: true
laravel-dacapoの発起人であるucan-lab氏は日本人でQiitaに自身の作成したライブラリ等の記事を投稿しています。詳しくは彼の記事を読むのが良いです。
Laravel × Dacapo で始める快適マイグレーション生活! – Qiita
eloquent-model-generatorは現在のデータベースを元にEloquents(Laravelで使われるデータベースにマッピングされたモデル)ファイルを自動生成します。これを使うとよりわかりきったことを心を無にしてコピペ、改変する作業から解放されます。
以前紹介した記事の様にテーブル名、モデル名を指定して自動生成します。
# モデル名を指定(テーブル名はモデル名の複数形) php artisan krlove:generate:model User # モデル名とテーブル名を指定 php artisan krlove:generate:model User --table-name=user
【Laravel】Eloquent自動生成ライブラリeloquent-model-generatorの紹介 – 株式会社シーポイントラボ | 浜松のシステム開発会社
テーブル名をコピペして正規表現で置換すると、それらしいコマンドが生成できるのでそれを使うと良いでしょう。
``` tags task_tag tasks users ``` に対して ^(.*)$をphp artisan krlove:generate:model \1 --table-name=\1と置換して ``` php artisan krlove:generate:model tags --table-name=tags php artisan krlove:generate:model task_tag --table-name=task_tag php artisan krlove:generate:model tasks --table-name=tasks php artisan krlove:generate:model users --table-name=users ``` 複数形をざっくり消すためにs -を -と置換して ``` php artisan krlove:generate:model tag --table-name=tags php artisan krlove:generate:model task_tag --table-name=task_tag php artisan krlove:generate:model task --table-name=tasks php artisan krlove:generate:model user --table-name=users ``` あとはCapsLockをオンにしてBackSpaceと適切なアルファベットキーを交互に連打 ``` php artisan krlove:generate:model Tag --table-name=tags php artisan krlove:generate:model Task_tag --table-name=task_tag php artisan krlove:generate:model Task --table-name=tasks php artisan krlove:generate:model User --table-name=users ```
これでコマンドを走らせると外部キーを参考にしたリレーション、PHPDoc、fillableなどが埋められたモデルファイルが生成されます。
上記二つのライブラリを組み合わせるとPHPのコードを一切触らないまま、プロジェクトに適したボイラープレートが作成されます。フローは次の様になります。
composer require ucan-lab/laravel-dacapo composer require krlove/eloquent-model-generator php artisan dacapo:init // laravel-dacapo用形式のymlファイルを記述する。データベース設計もこのymlファイルと実データベースと実データベース参照便利ツールを元にすると記述が二度手間にならなくて楽。 php artisan dacapo:generate php artisan migrate:fresh // eloquent-model-generator用のコンフィグを用意 // コマンドを正規表現か何かで生成 php artisan krlove:generate:model Hoge --table-name=hoges php artisan krlove:generate:model Fuga --table-name=fugas