新しくv4.0をリリースしたので、解説記事をリニューアルしました!
Laravel × Dacapo データベースマイグレーションサポートツールの使い方
この記事は Laravel Advent Calendar 2018 24日目の記事です。
記事を書くにあたって
自作ライブラリを公開してcomposerでインストールできるようにする記事を書こうと思ったのですが、こちらの [Laravel]あなたもOSS貢献!GitHubに自作ライブラリを公開してcomposerでインストールできるようになるまで 記事と思いっきりネタが被ってしまうため、急遽作ったライブラリについての紹介記事を書くことにしました🙇♂️
作成したライブラリのGitHubリポジトリ
予備知識
マイグレーションとは
Laravelではデータベースのテーブル作成や編集などを管理する方法として「マイグレーション」という機能が標準搭載されています。
- マイグレーションファイルの作成
- マイグレーションの実行
マイグレーションファイルにテーブルの定義を記述し、マイグレーションの実行により、MySQL等の実際のデータベースにテーブルを作成します。
これをGitで管理することにより、チーム内で同一のテーブル構成にできたり、テーブル定義の変更の履歴を管理できるメリットがあります。
困っていること
マイグレーションファイルの作成のファイル名が見辛い問題
$ php artisan make:migration create_tasks_table
database/migrations/2018_11_14_121306_create_tasks_table.php
と日付+マイグレーション名でどんどん生成されていきますが、ファイルが増えるとすごく見辛いです。
開発初期段階は作り直しもよく発生するので日付を揃えたい。
make:migration コマンドが遅い問題
コマンドを実行して、マイグレーションファイルが生成されるのになぜか時間がかかります。
Macのローカル環境で10秒かかり、dockerコンテナ内で実行すると21秒かかりました。
これはそこまで困ってないですが、謎に時間がかかるのが謎です。
Laravel-Dacapo
この問題を解決したく、Laravel Dacapoを作りました!
ライブラリ名の由来
名前となったダ・カーポ(da capo)は音楽用語で「始めに戻って繰り返す」という意味があります。
Composerは作曲家という音楽に関わる名称なのでピッタリだなと個人的に思いました😊
インストール
$ composer require --dev ucan-lab/laravel-dacapo
ライブラリをインストールして、設定ファイルを配置します。
$ php artisan vendor:publish --provider="UcanLab\LaravelDacapo\ConsoleServiceProvider"
database/shema.yml
ひな形ファイルが用意されます。
schema.yml
users:
timestamps: true
columns:
id: increments
name:
type: string
email:
type: string
unique: true
nullable: true
email_verified_at:
type: timestamp
nullable: true
password:
type: string
rememberToken: true
password_resets:
columns:
email:
type: string
index: true
token:
type: string
created_at:
type: timestamp
nullable: true
上記の記述にすれば、Laravel標準のマイグレーションファイルを生成します。
コマンド
マイグレーションファイル生成
$ php artisan dacapo:generate
Cleard Migration Directory
Created Migration: 1970_01_01_000000_create_users_table.php
Created Migration: 1970_01_01_000000_create_password_resets_table.php
schema.yml
を読み込んで、マイグレーションファイルを生成します。
-
1970_01_01_000000
=> テーブル作成 -
1970_01_01_000001
=> インデックスキー -
1970_01_01_000002
=> 外部キー
このように整理整頓されてマイグレーションファイルが生成されます。
マイグレーションファイル生成、マイグレーション実行
$ php artisan dacapo:generate --fresh
マイグレーションファイル生成、マイグレーション実行、シーディング実行
$ php artisan dacapo:generate --seed
マイグレーションファイルを全削除
$ php artisan dacapo:clear
本番運用が始まったら...
開発の初期段階だとテーブル作り直しはよくやりますが、本番運用が始まってしまうと大変なことになります。
本番運用が始まったらschema.ymlとdacapoは削除して、通常のマイグレーションに移行しましょう!!!
今後について
Laravelのマイグレーションに全て対応してる訳じゃなく、自分が使う範囲のことにしか確認できてないです。
READMEをもう少し充実させたいのと罪を犯したソースコードを書き直したい衝動に駆られてます。
使ってもらった感想
schema.ymlに全テーブルの情報があるのでフィールド探すのがすごく楽だと言われました。
それは目的ではなかったのですが、1ファイルにまとまってると検索もしやすいし便利だよねってことでした。(運用始まったら使えなくなるけど...。)