一人もくもく会 α verでサービス開始しました。

CakePHP3とLaravel5のマイグレーション比較

phpフレームワークには大体マイグレーション機能がついている。 業務でアプリケーション開発を行う時は各開発者のローカルの開発環境、サーバー上の開発環境、ステージング環境、本番環境などと分かれていたりするため、 そういった場合はマイグレーションを使用すると本当に楽。

なので使うのは使うのだが、正直あまり好きではない。 rollbackして再度migrateしたら一度データは消えてしまうし、 本当はRidgepoleのように完成形だけ保存して勝手にその形に合わせて欲しいというのが本音。

ただ、必ずしもそうできるというわけではないので、それでも使うのであればなるべく楽したい、 ということでCakePHP3のマイグレーションの便利さをLaravel5と比較してみる。

Laravel5のマイグレーション

Laravelのマイグレーションは必要なものは揃っていて、基本という感じ。 seedもあるのでデータの初期化もできる。

雛形作成

php artisan make:migration add_votes_to_users_table --table=users
php artisan make:migration create_users_table --create=users

実際の処理書き込み

$table->string('name')->nullabel()->after('id');

実行

php artisan migrate

特に迷うこともなく簡単。 その他にもいくつか機能はある。

CakePHP3のマイグレーション

基本的なところは大して変わらない。 だが、いくつか便利なものがある。

差分から勝手にマイグレーションファイル作成

なんと、最後のマイグレーションと現在の構成を比較し、 勝手にマイグレーションファイルを作成してくれる。 phpMyAdminで適当にカラム追加したり調整したりして 最後に実行すればいいだけ。すごく楽。

bin/cake bake migration_diff AddFlagToTable

afterだけ自動ではないので自分であとで付ける。

これも間違いがあった場合はrollbackで戻せる。

またこの機能のため、現在の構成をダンプデータとして保存しておいたり、 マイグレーション済みとしてマーキングしたりすることも可能なので 適宜その時の状態に応じて調整できる。

マイグレーション無しで進めてしまったアプリケーションも後付でマイグレーション方式に変更できる。

コード書く量を減らして早く仕事を終わらせよう。