本記事では、Laravelのマイグレーションとは何かをわかりやすく解説します。
以下の記事の続きです。まだ読んでいない方はぜひご一読ください!
初心者の方でもLaravelの動作環境を簡単に作れるWINDIIオリジナルのソースコードを用意したので、実際に動かして学ぶとより深く理解できるようになります!
以下の記事を参考にご活用ください。
目次
Laravelのマイグレーション(migration)ってなに?
マイグレーションとは、データベースの構造をバージョン管理できる機能です。

上の図のような3人のチームで開発しているとします。
誰かが実装上の都合でデータベース構造(スキーマと呼ばれます)を変更したくなったとき、マイグレーションファイル を記述します。
このマイグレーションファイルにはデータベースの構造をどうやって変更するかが書かれています。
このマイグレーションファイルを他のチームメンバーに共有して、そのチームメンバーがマイグレーションを実行するためのコマンドを打つだけで、データベース構造が共有できます。
まだチーム開発を経験したことない人ですと、マイグレーションの良さがイマイチぴんと来ないかもしれませんが、絶対に必要になるのでしっかり覚えていきましょう!
データベースをみてみる
マイグレーションを学ぶにはデータベースをみられるようにする必要があります。
WINDIIのスターターキットを使用している方はhttp://localhost:8080 を開いてみましょう!
こんな感じでphpMyAdminが表示されていると思います。
example というデータベースをクリックすると以下のような感じで3つテーブルが作成されているはずです。
ここに新たなテーブルを追加していくのがゴールです!
マイグレーションファイルを作成してみる
マイグレーションについてざっくり理解したところで、実際にマイグレーションファイルを作って理解を深めていきましょう。
まずはartisanコマンドでマイグレーションファイルを作成します。
以下のコマンドを実行した後、
docker-compose exec app bash
以下のコマンドでマイグレーションファイルを作成します。
php artisan make:migration create_posts_table
すると、 database/migrations/XXXX_create_posts_table.php が作成されます。
中身を見てみましょう。以下のような感じになっていると思います。
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePostsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->bigIncrements('id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('posts');
}
}
up() と down() が記述されているのがわかります。
up() にはデータベース構造の変更を記述し、down() には元にもどす処理を記述します。
(要するにデータベースのバージョンアップとバージョンダウンの処理を記述すれば良いというわけです。)
それではさっそく記述していきます!
タイトルと本文を持ったブログを保存するテーブルを作りたいので以下のようにします。
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('title'); // タイトル
$table->string('content'); // 本文
$table->timestamps();
});
}
書き上げたら以下のコマンドを実行してみましょう。
php artisan migrate
以下のようなメッセージが出るはずです。(日付は実行した時によって違います)
Migrating: 2019_03_16_135036_create_posts_table
Migrated: 2019_03_16_135036_create_posts_table
phpMyAdminをみてみましょう。以下のようにpostsデーブルが追加されているはずです!
postsテーブルの中身を見てみましょう。
titleとcontent をカラムに持っているのがわかりますね。
これで新たにテーブルを作成することができました!
テーブルのスキーマを変更する
先ほどの作業で新たにテーブルを作成することができましたが、今度はこのテーブルの構造を変更してみましょう。
投稿に著者の名前を追加したくなったとします。カラム名はauthorにすることにします。
先ほどと同じように以下のコマンドでマイグレーションファイルを作成します。
php artisan make:migration add_author_to_posts_table --table=posts
–table オプションで変更したいテーブルの名前を指定します。
作成したファイルを以下のようにします。
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddAuthorToPostsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('posts', function (Blueprint $table) {
$table->string('author')->after('content');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('posts', function (Blueprint $table) {
$table->dropColumn('author');
});
}
}
up() にはauthorカラムを追加する処理を記述します。contentの後に来るよう指定しています。
down()にはauthorカラムを削除する処理を追加しているのがポイントです。
書き上げたら以下のコマンドを実行してマイグレーションを実行しましょう。
php artisan migrate
実行したらphpMyAdminをみてみましょう。
content の後にauthor カラムが追加されているのがわかりますね。
ロールバックしてみる
先ほど、せっかくdown() にも処理を記述したのでこれを実行してみましょう。
データベースの構造を元に戻ることをロールバック と言います。
以下のコマンドを実行してロールバックしてみましょう。
php artisan migrate:rollback
これを実行すると以下のようにデータベーススキーマがロールバックされていることがわかります。
いかがでしたでしょうか。
以上でマイグレーションの基本は終わりです!
次はEloquentモデルについてです!

WINDII

最新記事 by WINDII (全て見る)
- Canvaが最高すぎる。使い方を完全ガイド【チュートリアルあり】 - 2019年5月14日
- 人気急上昇中のLaravelをはじめよう!【徹底解説】 - 2019年4月23日
- Laravelの認可を理解して実装してみよう! - 2019年3月29日
この記事へのコメントはありません。