マイグレーション~DB構造の変遷を共有する
PHPファイルをローカルで作業してテストして、gitでcommitする。
これは分かる。
じゃあDBをいじった時はどうするんだろう?
新しいテーブルを作ったり、カラム追加削除したり、index追加したり。。。
この情報をどうやって開発チーム全体で管理しよう?
!ピコーン!
DB丸ごとdumpしてcommitしよう!(提案)
一体何ギガのファイルをgitで管理するつもりなんですかね・・・(却下)
そんなときはmigration。
マイグレーションを使いましょう。
マイグレーションはDB構造の変化を記録するものです。
新しいテーブルを作ったり、カラム追加削除したり、index追加したり。。。
そんな歴史が一元管理されます。
「新しいテーブルを作ったり、カラム追加削除したり、index追加したり。。。」の一つ一つのやり取りが、一つ一つPHPファイルとして記録されるのです。
つまりこれをgitで共有すれば、新しくチームに入った人のローカルにも、全く同じDBを構築できるのです。
ポイントは「現在の最新のDBがいきなり作られる」のではなく、「新しいテーブルを作ったり、カラム追加削除したり、index追加したり。。。」という歴史が高速で再現されて、その結果「現在の最新のDBが作られる」のです。
「なんで?いきなり最新のDB作っちゃえばいいじゃん」と思うかもしれませんが、他のメンバーが今まで作業してきた過程をちゃんと経ることで結果に至るのは、gitの履歴と同じくらい重要なのです。
「胎児は生命進化の過程を超高速で再体験している」という例の話で考えれば理解しやすいと思います。
(かえって分かりにくいー!)
で、マイグレーションってどうやるの?
まずマイグレーションファイルを作って、そのファイルにDBをどうこうする命令を書きこむの二段階作業です。
まずマイグレーションファイルを作る。
php artisan migrate:make
これが基本コマンド。
使い方はこんな感じ。
php artisan migrate:make わかりやすい名前
わかりやすい名前とは、例えばどこかのテーブルのカラムにindex貼りたい場合は、こんな感じです。
[add]_[index付けたいカラム名]_[index]_[to]_[テーブル名]
つまりこうなります。
php artisan migrate:make [add]_[index付けたいカラム名]_[index]_[to]_[テーブル名] --table=[テーブル名]
具体例。
ekikore_userというテーブルのstation_cdというカラムにindexを貼る場合は、こう。
php artisan migrate:make add_station_cd_index_to_ekikore_user --table=ekikore_user
これによって、先ほどの「分かりやすい名前」の前にタイムスタンプの付いたファイルが自動的に作られます。
作られる場所は、このあたり?
app ▸ database ▸ migrations
今回はこんなファイルができました。
2015_02_16_114748_add_station_cd_index_to_ekikore_user.php
次に二段階目の作業。
できたマイグレーションファイルは、すでに雛形のコードが書かれています。
ここにDB構造を変える命令を書き込みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<?php use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class AddTaskIdIndexToCores extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('ekikore_user', function($table) { $table->index('station_cd'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('ekikore_user', function($table) { $table->dropIndex('ekikore_user_station_cd_index'); }); } } |
up()はDBに対して行った変更の内容を書きます。
down()は逆に、変更前の状態に戻すための処理を書きます。
php artisan migrate
という呪文を唱えると、up()が実行されます。
溜まっていた数多のマイグレーションファイルが続々と実行されます。
これまでDBに対して行われた歴史が、超高速で展開されます。
メイド・イン・ヘブンッ!
逆に時間を逆戻しにして人生やり直したければ、これ。
php artisan migrate:refresh --seed
バイツァ・ダスト!
あれ?migrate:refreshってLaravel4では使えなかったかもしれない。
ちなみにindexの名前はどうやって決めるかというと、
[テーブル名]_[カラム名]_[index]
です。
例えば今回の例なら
[ekikore_user]_[station_cd]_[index]
なので
ekikore_user_station_cd_index
となります。
全然関係ないけど、WordPressってコード書くのに適したプラグインとか無いのかな?
見にくくて仕方ない。
HTMLソースベタ書きにしてみる?
adpc
adpc
関連記事
-
MBAにLaravelな開発環境を構築してみる(中編)
-これまでのあらすじ- パルチザンが環境構築を終えてサーバ起動したらエラーになっ …
-
MBAにLaravelな開発環境を構築してみる(前編)
Laravelを使います。 今世界中で注目されているフレームワークです。 まず響 …
-
MySQLをチューニング3:MySQLの設定見直す
データベースが重いからMySQLをチューニングするに書いた四天王の三人目「MyS …
-
MBAの英字キーボードをKarabinerで使いやすくする
れさくさんの貧弱なMBAを見かねて、MBAが貸与されました。 なんとメモリは2倍 …
-
コマンドラインでMySQLを操作するまとめ(復習)
phpMyAdminなどで運用中心にやっているとコマンドラインを忘れがち。 なの …
-
dumpした大容量sqlファイルでDBを構築-IT版本当にあった怖い話(レベル8)
途中までは、よくある話。 「dumpしたsqlファイル送るからそっちのローカルに …
-
TJCT!プロセスの暗殺教室
ブラウザ上で巨大なデータを扱ったら、応答が返ってこない・・・・ ブラウザを閉じた …
-
MBAにLaravelな開発環境を構築してみる(後編)
-これまでのあらすじ- php -v 「ワタシハPHP5.5デス」 phpinf …
- PREV
- 【大学探訪2】東京医科歯科大学
- NEXT
- MySQLをチューニング1:DB構造を見直す