スキーマ管理とマイグレーション

SchemaShell は、スナップショットを生成ししたりデータベースのスナップショットをリストアしたりするだけでなく、スキーマオブジェクト・スキーマ SQL ダンプを生成する機能を提供します。

スキーマファイルを生成して使用する

生成されたスキーマファイルを使用すると、データベースに依存しないスキーマを簡単に移動できます。使用しているデータベースのスキーマファイルは、次のように生成します:

$ cake schema generate

これを実行すると、 app/config/sql ディレクトリに schema.php ファイルが生成されます。

スキーマシェルはモデルが定義されているテーブルのみ処理します。スキーマシェルにすべてのテーブルを処理させるには、コマンドラインで -f オプションを指定する必要があります。

後から、すでに作成した schema.php ファイルを用いてデータベーススキーマを再構築するには、次のようにします:

$ cake schema run create

これは schema.php の内容に従ってテーブルを削除し、作成します。

スキーマファイルは SQL ダンプファイルを生成するために使用することもできます。CREATE TABLE ステートメントを含む SQL ファイルを生成するには、次のようにします:

$ cake schema dump filename.sql

filename.sql は SQL ダンプ用に設計されたファイル名です。filename.sql を省略した場合、SQL ダンプはコンソールに出力されますが、ファイルには書き出されません。

CakePHP のスキーマシェルを使用したマイグレーション

マイグレーションはデータベーススキーマのバージョン管理をします。これは、機能を開発した際に生じる、データベースへの変更を適用するための、簡単かつデータベース非依存の方法です。マイグレーションは、SCM 管理用スキーマファイルかスキーマスナップショットのどちらかを使います。スキーマシェルを使用してスキーマファイルをバージョン管理するのはとても簡単です。すでにスキーマファイルがある場合は、次を実行します。

$ cake schema generate

次のような選択肢が表示されます:

Generating Schema...
Schema file exists.
 [O]verwrite
 [S]napshot
 [Q]uit
Would you like to do? (o/s/q)

[s] (snapshot) を選択すると、バージョンアップ用の schema.php が生成されます。schema.php がある場合は、schema_2.php などが生成されます。いつでも次のように実行することでこれらのスキーマファイルをリストアすることができます:

$ cake schema update -s 2

2 は実行したいスナップショットの番号です。スキーマシェルはプロンプトを表示し、 ALTER ステートメントを実行するか確認します。その際に既存のデータベースと実行するスキーマファイルの違いを表示します。

コマンドに -dry を指定することで、予行演習することができます。