CakePHP2用のMigrations Pluginについて
tanakaです。関東に引っ越してから数年間、自転車などの移動手段がなく、徒歩か電車での移動だったのですが、不便で、外出が面倒になってたので(…という口実で)クロスバイクを買いました。軽快にこぐことができるので、移動するのが楽しくなりますね!
今日は最近CakePHP2.x用のMigrations Plugin (データベース・スキーマの変更管理システム)を使っていて、CakePHP1.3用のを使ってみたと比べてみて気づいた点を紹介します。
良くなった点
マイグレーションスクリプト生成後に、scheme.phpを更新するか尋ねるようになった
マイグレーションスクリプトの作成作業は次のような手順で行います。
- 現在のスキーマの状態をschema.phpとしてダンプする ( cake schema generate )
- (新しくテーブルを作成する場合は)モデルファイルを作成しておく
- 好きなツールを使ってスキーマを変更する(mysqlコンソールとかphpMyAdminとか)
- 「cake Migrations.migration generate」コマンドを実行して1つずつ質問に答える
このとき、一番最初の、ダンプしておく作業を忘れると、生成するマイグレーションファイルに前回の修正も入ったりして、作り直すのが大変になります。最新のバージョンでは、「cake Migrations.migration generate」コマンド実行の最後に、schema.phpを更新するか聞かれるので、このミスをしにくくなりました
マイグレーションスクリプト生成直前に内容を確認できるようになった
ファイルが生成される前に確認できるので、「モデルを作るのを忘れてた〜」といったミスがしにくくなってます。
ファイル名の最初にUnix Timeが付くのでファイラで順番にソートできる
細かいポイントですが。
ちょっと不便な点
MySQLで、INTEGER型のカラムをVARCHAR型に変えようとするとスクリプト実行時にエラーになる
こちらは、マイグレーションスクリプトの生成は問題ありませんが、up/down 実行時にエラーになります。苦肉の策として、同名のカラムの drop_field と create_field を書く(drop_fieldを配列の先に書く)といいです。データを引き継がないといけない場合は使えない策ですが…
やっぱりモデルを作成しておかないと、生成するマイグレーションに反映されない
モデル自体はファイルを作成しなくてもCakeアプリからテーブルを利用することはできるので、ちょっと不便かな、と思います。
まとめ
CakeDC(CakePHPの開発をリードしている会社)製の Migrations Pluginは、単にCakePHP2に対応できているだけではなく、使うときの落とし穴が減って改善されてます。また、余談ですが最近、不具合に遭遇しました。33文字以上の概要をマイグレーションファイルのクラス名にすると、up/downコマンド実行時にこけるというものです。(変更履歴テーブルのカラム長が33文字だったので実行したスクリプト名が完全に保存できなかった)リポジトリの最新では直っているようです。