ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
基本の流れ
php artisan make:migration create_tasks_table # ファイルを作る
php artisan migrate --pretend # SQL を確認する
php artisan migrate # 実行する
php artisan migrate:status # 状態を確認する
INFO Running migrations.
2026_09_07_120000_create_tasks_table .................... 24ms DONE
Laravel は migrations テーブルに実行済みのファイル名とバッチ番号を記録します。すでに実行したものは飛ばされるので、何度実行しても安全です。
実行前に SQL を見る
php artisan migrate --pretend
CreateTasksTable: create table `tasks` (`id` bigint unsigned not null auto_increment primary key,
`title` varchar(255) not null, `created_at` timestamp null, `updated_at` timestamp null)
default character set utf8mb4 collate 'utf8mb4_unicode_ci'
実際には実行されません。本番に当てる前に、意図しない DROP や大きなテーブルへの ALTER が含まれていないかを必ず確認してください。
状態の確認
php artisan migrate:status
Migration name .......................................... Batch / Status
2026_01_01_000000_create_users_table ........................... [1] Ran
2026_09_07_120000_create_tasks_table ........................... [2] Ran
2026_09_07_130000_add_status_to_tasks_table ................. Pending
バッチ番号は「同じ migrate 実行でまとめて適用された単位」です。ロールバックはこの単位で戻ります。
戻す
php artisan migrate:rollback # 直前のバッチをまとめて戻す
php artisan migrate:rollback --step=1 # 1 件だけ戻す
php artisan migrate:rollback --batch=3 # バッチ 3 を戻す
php artisan migrate:reset # すべて戻す(down を順に実行)
rollback は「直前の 1 件」ではなく「直前のバッチ全体」を戻します。3 件まとめて migrate していたら 3 件とも戻るので、1 件だけ戻したいときは --step=1 を付けてください。
# 1 件ずつバッチを分けて適用する(戻しやすくなる)
php artisan migrate --step
作り直す
| コマンド | 何をするか | 本番 |
|---|---|---|
migrate | 未実行のものを適用 | 使う |
migrate:rollback | 直前のバッチを down() で戻す | 慎重に |
migrate:refresh | すべて戻してから再実行(down() を通る) | 使わない |
migrate:fresh | 全テーブルを DROP してから再実行 | 絶対に使わない |
php artisan migrate:fresh --seed # 開発中にデータごと作り直す
php artisan migrate:refresh --step=2 # 直近 2 件だけ作り直す
migrate:fresh は down() を通らず、データベース内のテーブルをすべて削除します。マイグレーションで管理していないテーブルも消えます。開発環境専用と考えてください。
本番での実行
# 1. バックアップ
mysqldump -u user -p dbname > backup_$(date +%Y%m%d_%H%M%S).sql
# 2. 何が走るか確認
php artisan migrate:status
php artisan migrate --pretend
# 3. メンテナンスモードにする(必要なら)
php artisan down --secret="xxxxx"
# 4. 実行(本番は非対話なので --force が必須)
php artisan migrate --force
# 5. 戻す
php artisan up
APP_ENV=production のとき、Laravel は「Application In Production!」と表示して
Do you really wish to run this command? と聞いてきます。
CI やデプロイスクリプトは入力できないためそこで止まるので、--force を必ず付けます。
失敗したとき
SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'tasks' already exists
| エラー | 原因と対処 |
|---|---|
Table ... already exists | 手作業で作ったテーブルがある。落として作り直すか、migrations に記録を入れる |
SQLSTATE[HY000] [1045] Access denied | .env の接続情報。対処はこちら |
Specified key was too long | 古い MySQL。Schema::defaultStringLength(191) を設定する |
Cannot add foreign key constraint | 参照先の型が違う(id は bigint unsigned)。参照先を先に作る |
doctrine/dbal が必要 | カラム変更に必要(Laravel 10 以前)。対処はこちら |
MySQL は DDL でトランザクションが効きません。1 つのマイグレーションで複数のテーブルを触っていると、途中で失敗して「半分だけ適用された」状態になります。この場合は手作業で状態を戻すか、DB をバックアップから復元してください。
-- 実行済みの記録を確認する
SELECT * FROM migrations ORDER BY id DESC LIMIT 10;
実行時に一緒にやること
php artisan migrate --seed # シーダーも走らせる
php artisan migrate --database=second # 接続先を指定する
php artisan migrate --path=database/migrations/legacy # 特定のディレクトリだけ
php artisan migrate --isolated # 複数サーバーで同時実行しないようにする
--isolated は Laravel 9.38 以降で使えます。デプロイ時に複数のサーバーが同時に migrate を実行する構成では、これを付けておくと 1 台だけが実行します。
安全なマイグレーションの書き方
- 1 マイグレーション 1 目的にする。まとめると失敗時の切り分けができない
- 大きなテーブルへの
ALTERはロック時間を見積もる。オンライン DDL やツールの利用を検討する - カラム削除は「使わなくする → 数日後に削除」と 2 段階に分ける
down()を必ず書く。書けないなら書けない理由をコメントに残す- マイグレーションでデータを大量に更新しない。件数が増えるとデプロイが止まる。シーダーやバッチに分ける
関連
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- 新規プロジェクトの作成
- サーバーの起動
- マイグレーションファイルの作成
- マイグレーションの実行(migrate)
- モデルの作成
- 全ルートを確認
- Laravelのバージョンの確認方法
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- Wi-Fi とは|規格と世代(Wi-Fi 4〜7)・周波数帯・CSMA/CA・WPA3 NEW 2026-09-07 07:45:13
- set コマンドでシェルオプションと位置パラメータを操作 | bash 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- UE5 Get Overlapping Actorsで特定クラスだけ処理|Class Filter・Cast To 2026-09-07 07:45:13
- Linuxで特定拡張子のファイルを再帰削除|find -deleteの安全手順 2026-09-07 07:45:13
- Django CBVでテンプレートに値を渡す|get_context_data・extra_context 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
- Linux catコマンドの使い方|行番号表示・複数ファイル連結 2026-09-07 07:45:13
- unable to execute 'gcc': No such file or directory 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?