CakePHP 2系のCakeDC Migrationsプラグインのマイグレーションファイルの作成について

## マイグレーションファイルの作成

### データベースの更新サイクルについて

　CakeDC Migrationsプラグインを利用したデータベースの更新サイクルは、次の二つがあります。

1. Auto-Migration Files
<img src="https://qiita-image-store.s3.amazonaws.com/0/105847/a6f113a2-5c08-ebdb-bf20-96d8c4a4bd73.png" width="400" />
　データベースは手動で更新し、更新した内容をもとに自動的にマイグレーションファイルを作成する。
　この場合、データベースは手動で更新しているので、自分ではマイグレーションファイルを使いません。作成したマイグレーションファイルは、gitでコミットし、他の開発者が使います。
　扱えるのは、テーブル情報のみ（カラムやインデックスなど）です。レコードは扱えません。  
  
2. Manually Creating Migration
<img src="https://qiita-image-store.s3.amazonaws.com/0/105847/1c79149c-3b10-1fcb-835b-a025d3a115ed.png" width="400" />
　空のマイグレーションファイルを作成し、更新したいデータベースの作業を自分で記述する。マイグレーションファイルを適用して、データベースを更新する。
　この場合、空のマイグレーションファイルに、更新時(up)の手続きと、ロールバック時(down)の手続きを記述します。また、beforeとafterメソッドに手続きを記述することで、レコードの追加やデータの変更（新しく出来たカラムに初期値を入れるなど）なども可能です。レコードの追加は、基本的にモデルを通して行います。


### Auto-Migration Files

  1. もしまだやっていなければ、最初のマイグレーションを行います。
    
        $ Console/cake Migrations.migration run reset
      
  2. 次に、現在のデータベースの状況に対応したSchemaファイルを作成します。
    
        $ cake schema generate -f  
      
    （スキーマファイルの作り方を尋ねられたら、既存のスキーマファイルを上書きするのであればOverwriteを選択します。Snapshotでも問題ないかは未確認）  
    オプションの"-f"は、モデルがないテーブルについてもスキーマを作成する場合につけます。  
    
  3. この状態で、SQLを使って、テーブルの追加、カラムの変更などを行います。
    
  4. その後、  
        
        $ Console/cake Migrations.migration generate -f
    
    で、新しいマイグレーションファイルを作成します。
    オプションの"-f"は、モデルがないテーブルについてもマイグレーションファイルを作成する場合につけます。
    
        Do you want compare the schema.php file to the database? (y/n)
    
    と尋ねられたらyと答えて下さい。これで、マイグレーションファイルが出来ました。この新しいマイグレーションファイルに合わせて、スキーマファイルを更新するか尋ねられるので、更新しない(Quit)か、上書き(Overwrite)してください。  
    保存時の名前は適当につけてください。ファイル名は、入力した名前の前に、現在のタイムスタンプが付きます。
    
### Manually Creating Migration

  1. もしまだやっていなければ、最初のマイグレーションを行います。  
    
        $ Console/cake Migrations.migration run reset
    
  2. 空のマイグレーションファイルを作成します。
    
        $ Console/cake Migrations.migration generate  
    
    ここで
    
        Do you want compare the schema.php file to the database? (y/n)
    
    と尋ねられたらnと答えて下さい。これで、マイグレーションファイルが出来ました。

  3. マイグレーションファイルを編集してください。たとえば、テーブルを作るのであれば、
    
        'up' => array(
            'create_table' => array(
                'categories' => array(
                    'id' => array(
                    'type'    =>'string',
                    'null'    => false,
                    'default' => null,
                    'length'  => 36,
                    'key'     => 'primary'
                ),
                'name' => array(
                    'type'    =>'string',
                    'null'    => false,
                    'default' => null
                ),
                'indexes' => array(
                    'PRIMARY' => array(
                        'column' => 'id',
                        'unique' => 1
                    )
                )
            )
        )

    
    となります。その他の記述法については、
    https://github.com/CakeDC/migrations/blob/master/Docs/Documentation/Migrations.md
    を参考にしてください。
    保存時の名前は適当につけてください。ファイル名は、入力した名前の前に、現在のタイムスタンプが付きます。
    
  4. マイグレーションファイルが出来たら、マイグレーションファイルを実行します。
    
        $ Console/cake Migrations.migration run
    
    一つずつマイグレーションファイルを適用する場合、runではなくupを使います。
    
### その他

現在のマイグレーションの状態は

    $ Console/cake Migrations.migration status

で確認できます。

## 参考サイト

ドキュメント
https://github.com/CakeDC/migrations/tree/master/Docs/Documentation

チュートリアル
https://github.com/CakeDC/migrations/blob/master/Docs/Tutorials/Quick-Start.md