開発を続けているとデータベースのカラムの構造が変更するってことはしょっちゅうですが、管理がいい加減だとメンバー間でテーブルの構造が変わっていたり、本番と開発で違ってくるなどのトラブルが続出します。
そういったテーブルの構造を管理する手法の1つに「マイグレーション」というものがあります。
まだ学習段階ですが、データベースのバージョン管理のようなものかなという気がします。
cakePHPで今回そのマイグレーションに取り組んだのでメモをしておきます。
状況としてすでにリモートのサーバーにソースとDBがあり、ローカルのDBの変更を反映させたい状況だとします。
インストール
プロジェクトフォルダ直下(app)で
1 |
git submodule add git://github.com/CakeDC/migrations.git app/Plugin/Migrations |
と入力。
1 2 3 |
Cake Migration Shell --------------------------------------------------------------- No migrations available. |
と表示されればOKです。
マイグレーションの作成
最初はまだデータベースの履歴自体を登録していないので、その登録作業を行います。
1 |
php .\Console\cake.php Migrations.migration generate -f |
YesNo型式でいろいろ聞かれるが全てYesでOK
1 |
Please enter the descriptive name of the migration to generate: |
と聞かれるが、これはマイグレーション(1つの履歴情報)のファイル名を聞かれています。
ここで入力してあげると新しいファイルがConfig/Migration直下に作成されてます。
マイグレーションの見方
1 |
php .\Console\cake.php Migrations.migration run |
と入力してあげるとバージョン名がでる。
またスキーマ(ファイル情報を格納しておくようなファイル?)の更新も合わせて行う
1 |
php .\Console\cake.php schema generate -f |
1 2 3 4 5 6 7 8 9 |
Welcome to CakePHP v2.5.0 Console --------------------------------------------------------------- App : app Path: ......\app\ --------------------------------------------------------------- Cake Schema Shell --------------------------------------------------------------- Generating Schema... Schema file: schema.php generate |
↑
のようなメッセージが出力されます。
Config/Schemaの下にschema.phpというファイルが存在しています。
リモートサーバーへの反映
リモートサーバーにログインし、
1 |
php .\Console\cake.php Migrations<span class="crayon-sy">.</span>migration run |
と入力。
先ほど登録したマイグレーションの履歴情報が出力され、一番最後に下記のようなメッセージがでます。
1 |
Please choose which version you want to migrate to. [q]uit or [c]lean. |
ここで番号を入力してあげればOK
ちなみに今のデータベースのバージョン情報を見たい場合は
1 |
php .\Console\cake.php Migrations<span class="crayon-sy">.</span>migration status |
で見れます。ここでデータベースのバージョンが上がっていればOKです。
まだわからないことが山ほどありますが、とりあえず最初はこんなもんで。
参考リンク