データベースとマイグレーション
これまでの記事でページを表示するしくみを学びました。実際のアプリはデータを保存・取得する必要があります。今回は データベース? データを整理して保存・検索できるソフトウェア。Webアプリのユーザー情報や投稿データなどはここに保存される。 の準備をしましょう。
データベース接続の設定
Laravelのデータベース設定はプロジェクトルートの .env ファイルに書きます。.env ファイルを開くと、次のような設定が書かれています。
# 📁 .env(プロジェクトルートにある設定ファイル)
DB_CONNECTION=sqlite
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=laravel
# DB_USERNAME=root
# DB_PASSWORD=
今回はそのままSQLiteを使います。SQLiteはファイル1つで動くデータベースで、追加のインストールが不要です。設定をそのまま変更せず進めましょう。
SQLiteのデータベースファイルは database/database.sqlite に保存されます。ファイルがなければ自動で作られます。
マイグレーションとは
マイグレーション? データベースのテーブル構造をコードで定義・管理する仕組み。変更履歴を残せるので、チームで同じDB構造を共有しやすい。 は、データベースのテーブル設計をコードで書いて管理する仕組みです。
テーブルとはExcelのシートのようなものです。
tasks テーブルのイメージ
┌────┬──────────────┬──────────┬───────┐
│ id │ title │ body │ done │
├────┼──────────────┼──────────┼───────┤
│ 1 │ 牛乳を買う │ │ false │
│ 2 │ 勉強する │ 毎日少し │ false │
└────┴──────────────┴──────────┴───────┘
マイグレーションファイルはこのテーブルの設計書をPHPのコードで書いたものです。コードで管理することで「どのようなテーブル変更を行ったか」の履歴が残り、チームで開発するときに全員が同じ構造を再現できます。
マイグレーションファイルを作る
ターミナルで次のコマンドを実行します。
php artisan make:migration create_tasks_table
database/migrations/ フォルダの中に新しいファイルが作られます。ファイル名はコマンドを実行した日時をもとに自動で決まります(例:2025_04_30_000000_create_tasks_table.php)。
作られたファイルを開く
database/migrations/2025_XXXX_create_tasks_table.php を開くと次のようになっています。
<?php
// 📁 database/migrations/xxxx_create_tasks_table.php(自動生成直後)
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
// テーブルを作る処理(migrate コマンドで実行)
public function up(): void
{
Schema::create('tasks', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
// テーブルを削除する処理(rollback コマンドで実行)
public function down(): void
{
Schema::dropIfExists('tasks');
}
};
up() の中の $table->id() が主キー(自動採番のID)、$table->timestamps() が作成日時と更新日時のカラムです。
カラムを追加する
up() の中に、アプリに必要なカラムを追加します。$table->id(); と $table->timestamps(); の間に追加してください。
// 📁 database/migrations/xxxx_create_tasks_table.php
// up() メソッドの中を書き換える
public function up(): void
{
Schema::create('tasks', function (Blueprint $table) {
$table->id(); // ID(変更しない)
$table->string('title'); // ← 追加:タイトル
$table->text('body')->nullable(); // ← 追加:内容(空でもOK)
$table->boolean('done')->default(false); // ← 追加:完了フラグ
$table->timestamps(); // 作成日時・更新日時(変更しない)
});
}
よく使うカラムの種類をまとめました。
| メソッド | 種類 | 使い方の例 |
|---|---|---|
string('name') | 短い文字列 | タイトル、名前 |
text('body') | 長い文字列 | 本文、メモ |
integer('count') | 整数 | 数量、年齢 |
boolean('active') | true/false | フラグ |
timestamps() | 日時2カラム | 作成日・更新日 |
->nullable() をつけると「空(NULL)でもOK」、->default(false) は「デフォルト値を false にする」という意味です。
マイグレーションを実行する
ファイルを作っただけではまだテーブルはできていません。次のコマンドで実際にテーブルを作ります。
php artisan migrate
ターミナルに Migrating: ... と表示されてから Migrated: ... になれば成功です。tasks テーブルができました。
間違えたときはロールバック
テーブルの設計を変えたいときは、次のコマンドでひとつ前の状態に戻せます。
php artisan migrate:rollback
down() に書いた処理(Schema::dropIfExists('tasks'))が実行されてテーブルが削除されます。マイグレーションファイルを修正してから再度 php artisan migrate を実行すれば、新しい設計でテーブルを作り直せます。
シーダーで開発用データを入れる
シーダー? データベースに初期データや開発用テストデータを流し込む仕組み。手動で入力しなくてもDBにデータを用意できる。 を使うと、コマンド一発で開発用のテストデータをDBに流し込めます。毎回手動で入力しなくて済むので、開発効率が上がります。
① シーダーファイルを作る
php artisan make:seeder TaskSeeder
database/seeders/TaskSeeder.php が作られます。
② シーダーにデータを書く
database/seeders/TaskSeeder.php を開き、run() メソッドを書き換えます。
<?php
// 📁 database/seeders/TaskSeeder.php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class TaskSeeder extends Seeder
{
public function run(): void
{
// DB::table('テーブル名')->insert([データの配列])
DB::table('tasks')->insert([
[
'title' => '牛乳を買う',
'body' => null,
'done' => false,
'created_at' => now(),
'updated_at' => now(),
],
[
'title' => 'Laravelを勉強する',
'body' => '毎日少しずつ',
'done' => false,
'created_at' => now(),
'updated_at' => now(),
],
[
'title' => '掃除をする',
'body' => null,
'done' => true,
'created_at' => now(),
'updated_at' => now(),
],
]);
}
}
③ DatabaseSeeder から呼び出す
database/seeders/DatabaseSeeder.php を開いてください。run() メソッドの中に TaskSeeder を追加します。
<?php
// 📁 database/seeders/DatabaseSeeder.php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run(): void
{
$this->call([
TaskSeeder::class, // ← この行を追加
]);
}
}
④ シーダーを実行する
php artisan db:seed
Seeding: TaskSeeder と表示されれば成功です。
データが入ったか確認する
Tinker? Laravelに付属するコマンドラインのPHPインタープリタ。コードを直接入力してDBへの保存や取得をその場で試せる。 を使うとコマンドラインからデータを確認できます。
php artisan tinker
起動したら次のコードを入力して Enter を押してください。
DB::table('tasks')->get()
3件のタスクが表示されれば成功です。exit または Ctrl+C で終了できます。
まとめ
この回でやったこと:
database/migrations/に マイグレーション? データベースのテーブル構造をコードで定義・管理する仕組み。変更履歴を残せるので、チームで同じDB構造を共有しやすい。 ファイルを作り、tasksテーブルを設計したphp artisan migrateでテーブルを作成したdatabase/seeders/TaskSeeder.phpにテストデータを書いたphp artisan db:seedでデータを流し込んだ- Tinker? Laravelに付属するコマンドラインのPHPインタープリタ。コードを直接入力してDBへの保存や取得をその場で試せる。 で投入されたデータを確認した
次回はいよいよ Eloquent? LaravelのORM(データベース操作ツール)。SQLを直接書かずにPHPのコードでデータを取得・保存できる。 を使って、このテーブルのデータをPHPのコードで読み書きします。