2018年1月14日日曜日

MigrationとBake

Migration(マイグレーション)とはなにか


Migrationとはなんでしょうか。これはDBのテーブルにアクセスするページを追加する際には一番最初に実行するコマンドと言えるくらいによく使うコマンドです。MigrationとはMigrationファイルを実行、DBにテーブルを新規作成(あるいは逆にロールバック)する際に使うコマンドです。

まあこんな説明だけ聞いてもわからないので実際に使ってみましょう。
以下のコマンドを実行します。
$ cd /vagrant/cake
$ bin/cake bake migration CreateProducts name:string description:text created modified
(CakePHP3の解説ページ)

すると「cake/config/Migrations」ディレクトリにMigrationファイルが追加されます。
(このコマンドの実行に失敗する場合はおそらくファイルのパーミッション設定がうまくいっていないものと思われます。共有フォルダ内のエラーを見ながら対処してください)
これがMigrationファイル

このMigrationファイルから新しいテーブルをDB内に作成します。次のコマンドを実行してください。
$ bin/cake migrations migrate
すると新しいテーブルが作成されます。


つまり、流れとしてはまずbin/cake bake migration CreateProducts name:string description:text created modifiedでMigrationファイルを作成、その後にbin/cake migrations migrateコマンドでそのファイルからテーブルを作成するという感じになります。

本当にテーブルができているのか、確認してみます。
$ mysql -uroot -proot
mysql> show databases;
mysql> use test;
mysql> show tables;


すると新しいテーブル「products」が追加されていることが確認できました。Cakephp3ではこのようにテーブルの作成・削除・修正はmigrationファイルを通じて行います。migrationファイルを通じてすることで、migrationファイルを(gitなどで)共有する他のチームメンバーともDBの構造(テーブルの有無や修正内容)を即座に共有することができるのです。

(関係ないけどGitを使う人向けに補足:このためGitを使用する際、ブランチを変更する際にはブランチ変更前に全てmigrationをroll backし、ブランチ変更後にmigrationを再度実行するという操作が必要となります。これをしないとmigrationファイルに記述されていないのにDBにだけ存在するテーブルなどが発生してしまい不具合の原因となります。こういったものはbin/cake migrations statusコマンドで確認することができます。「missing」とあるphinxログが表示されれば、それが迷子になってしまったmigrationファイルに記述されていない修正です)

Bake(ベイク)


次にこのDBのテーブルからViewを作成します。次のコマンドを実行してください。
$ bin/cake bake all products
これは「controller」「 model」「 template」 のすべてを自動で作成しろという意味のコマンドです。もしそれぞれが個別にほしい場合、次のようなコマンドを実行します。
$ bin/cake bake controller products
$ bin/cake bake model products
$ bin/cake bake template products

すると自動的にView(template)やらModelやらが作成されます。

自動作成したページにアクセスしてみましょう。
http://192.168.33.10/cake/products/

これがその自動生成したページであり、データの登録・削除・詳細閲覧など基本的な機能が自動で作られています。
自動生成されたページ

左端に見える「New Products」を押してみてください。するとデータを登録する画面に飛びます。この画面から製品(Product)情報を登録できるようになっているので試してみてください。

さてこのようにCakePHP3のBakeとMigrationを使うとあっという間に、かつバグが入る余地もなく(もちろん私たちの手で改造すればバグが入りこむ可能性がありますが)ウェブサイトを作ることができました。もし「製品の登録・削除・閲覧機能がほしい」というお客さんがいたらすぐその要望に応えることができますね。

また同じようにすることで「顧客管理」ページや「社員管理」ページも追加することができます。あとは見た目をWebデザイナーにでもかっこよくしてもらえば個性も演出できるでしょう。これがCakePHP3を用いたウェブアプリの高速開発です。

結論


Migration(マイグレーション)ってなに? --- テーブルを作成・編集・削除するため、またそれを他の人に共有するために使います。
Bake(ベイク)ってなに? --- 指定されたテーブルから基本的な機能(Model, Controller, Template)を自動生成するために使います。


1. vagrantとvirtual box
2. アパッチのインストール
3. MySQLのインストール
4. PHPのインストール
5. CakePHP3のインストール
6. MigrationとBake