ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
マイグレーションとは
Laravel のマイグレーションはDB スキーマの変更を PHP コードで管理する仕組みです。テーブル作成・カラム追加・インデックス追加などをコード化し、Git で履歴管理してチーム全員の DB を同期できます。
1. ファイル生成
# テーブル新規作成 (規約名: create_*_table)
php artisan make:migration create_users_table
# 既存テーブルへの変更 (規約名: add_/change_/drop_*_to_*_table)
php artisan make:migration add_avatar_to_users_table --table=users
# 任意ファイル名
php artisan make:migration create_articles_table --create=articles
生成されるファイルは database/migrations/2026_06_11_120000_create_users_table.php のようにタイムスタンプ + 名前形式です。実行順はファイル名昇順。
2. 雛形の中身
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
public function up(): void
{
Schema::create('users', function (Blueprint $table) {
$table->id(); // BIGINT UNSIGNED AUTO_INCREMENT PK
$table->string('name'); // VARCHAR(255)
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken(); // VARCHAR(100) nullable
$table->timestamps(); // created_at / updated_at
});
}
public function down(): void
{
Schema::dropIfExists('users');
}
};
3. よく使うカラム型
| メソッド | SQL 相当 |
|---|---|
id() | bigIncrements('id') の別名 |
string('name', 100) | VARCHAR(100) |
text('body') | TEXT |
longText('content') | LONGTEXT |
integer('count') | INT |
bigInteger('amount') | BIGINT |
decimal('price', 8, 2) | DECIMAL(8,2) |
boolean('is_active') | TINYINT(1) |
date('birthday') | DATE |
dateTime('published_at') | DATETIME |
timestamp('expires_at') | TIMESTAMP |
timestamps() | created_at / updated_at |
softDeletes() | deleted_at NULL |
json('meta') | JSON |
uuid('uuid') | CHAR(36) |
enum('role', ['admin','user']) | ENUM(...) |
foreignId('user_id') | BIGINT UNSIGNED (FK 用) |
4. 修飾子 (Modifier)
$table->string('email')->unique(); // ユニーク
$table->string('nickname')->nullable(); // NULL 可
$table->integer('count')->default(0); // デフォルト
$table->integer('age')->unsigned(); // UNSIGNED
$table->string('slug')->index(); // インデックス
$table->string('email')->comment('ログイン用'); // コメント
$table->string('name')->after('id'); // 列順 (MySQL のみ)
$table->string('status')->charset('utf8mb4'); // 文字セット
$table->timestamp('created_at')->useCurrent(); // DEFAULT CURRENT_TIMESTAMP
$table->timestamp('updated_at')->useCurrentOnUpdate();
5. 外部キー (foreignId)
Schema::create('articles', function (Blueprint $table) {
$table->id();
// 推奨: foreignId + constrained
$table->foreignId('user_id')
->constrained() // users テーブルを参照
->cascadeOnDelete() // 親削除で子も削除
->cascadeOnUpdate();
// 任意のテーブル/カラムを指定
$table->foreignId('category_id')
->constrained('categories', 'id')
->nullOnDelete();
$table->string('title');
$table->text('body');
$table->timestamps();
});
6. 既存テーブルの変更
// up: 追加
Schema::table('users', function (Blueprint $table) {
$table->string('avatar')->nullable()->after('name');
$table->index('email');
});
// down: 元に戻す
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropIndex(['email']);
$table->dropColumn('avatar');
});
}
// カラム型の変更 (doctrine/dbal が必要)
// composer require doctrine/dbal
Schema::table('users', function (Blueprint $table) {
$table->string('name', 100)->change();
});
// カラム名変更
Schema::table('users', function (Blueprint $table) {
$table->renameColumn('name', 'full_name');
});
7. 実行・巻き戻し
# 未適用ぶんを順に実行
php artisan migrate
# 直近 1 バッチを巻き戻し
php artisan migrate:rollback
# 直近 5 つを巻き戻し
php artisan migrate:rollback --step=5
# 全部巻き戻し
php artisan migrate:reset
# 全部巻き戻し → 全部実行
php artisan migrate:refresh
# DROP → 全部実行 (★ データ全消し)
php artisan migrate:fresh
php artisan migrate:fresh --seed # シードまで流す
# 状態確認
php artisan migrate:status
# 本番 (確認プロンプトをスキップ)
php artisan migrate --force
8. down() メソッドを書く理由
down() を真面目に書くと migrate:rollback で安全に戻せます。テスト環境やローカルで「やっぱりやめた」が即できるのがメリット。本番では使わない方針 (前進専用) のチームもあります。
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->string('phone')->nullable();
});
}
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('phone');
});
}
9. 本番運用での注意
- 必ず事前バックアップを取る (mysqldump / pg_dump)
- 大きなテーブルへの ALTER はテーブルロックになる場合あり → 深夜帯 or pt-online-schema-change
- カラム削除や型変更は後方互換を 2 リリースに分割: ① 新カラム追加 → ② コード移行 → ③ 旧カラム削除
migrate:freshは本番で絶対に流さない (.env でAPP_ENV=productionなら警告)- 本番のテーブル設計は1 マイグレーション = 1 変更を推奨。差し戻しが楽
10. シーダとの組合せ
# シーダ作成
php artisan make:seeder UserSeeder
# マイグレーション + シーダを一気に
php artisan migrate --seed
php artisan migrate:fresh --seed
FAQ
Q: 既に流したマイグレーションをやり直したい
A: migrate:rollback で巻き戻してから編集して再 migrate。本番では使えないので、本番修正用の追加マイグレーションを書きます。
Q: 1 PR で 10 個のマイグレーションが溜まる
A: そのままで OK。タイムスタンプ順に流れるので衝突しません。ただしレビューしやすいよう機能ごとに PR を分けるのが推奨。
Q: schema dump で短縮したい
A: php artisan schema:dump --prune で過去マイグレーションを 1 つの SQL に集約。新規環境のセットアップが高速化します。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- 新規プロジェクトの作成
- サーバーの起動
- マイグレーションファイルの作成
- マイグレーションの実行(migrate)
- モデルの作成
- 全ルートを確認
- Laravelのバージョンの確認方法
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?