Laravel マイグレーションファイルを作成する際のちょっとした名前規則
前置き
php artisan make:migration
する際のドキュメントに載っていない密かな名前規則について書いてみたいと思います。名前規則に従った名前にすると、--table=テーブル名
とか省けるよ、とかそんなお話です。
なお、実際の動作は、Laravel Ver.10.33 にて確認していますが、結構古いバージョンでも行けます。
本題
マイグレーション用のファイルには、新規作成用と修正用のファイルがありますが、まずは新規作成時から見て行きます。
新規作成用
まずは気にせず次のコマンドでマイグレーションファイルを作成してみます。
php artisan make:migration hoge
すると、2024_01_06_144325_hoge.php
みたいなファイル名で、中身は以下になります。(コメントや細かい部分は省略)
return new class extends Migration
{
public function up(): void
{
//
}
public function down(): void
{
//
}
};
少し寂しい感じですね…🥲
では今度は、--create=テーブル名
を付けて見ます。
php artisan make:migration hoge --create=posts
すると中身はこうなりました。
return new class extends Migration
{
public function up(): void
{
+ Schema::create('posts', function (Blueprint $table) {
+ $table->id();
+ $table->timestamps();
+ });
}
public function down(): void
{
+ Schema::dropIfExists('posts');
}
};
Schema::create('posts')
などが付いてくれました。
ですが、さすがにファイル名に hoge
は意味不明ですね。
ということで、以下のコマンドのいずれかで作成すれば、
php artisan make:migration create_posts
php artisan make:migration create_posts_table
Laravel が以下の形式を自動で認識して、
create_(テーブル名)
create_(テーブル名)_table
上記と同じファイルを作成してくれます。
まぁ最も、新規作成時は、モデルファイルとかと一緒に作成する事が多いので、あまり出番はないかも知れませんが。
php artisan make:model Post -mf
とか。
修正用
では今度は、先程 --create=posts
とした箇所を --table=posts
に変えて、以下のコマンドを叩いてみます。
php artisan make:migration hoge --table=posts
すると、今度は修正用としてファイルが生成されました。
return new class extends Migration
{
public function up(): void
{
+ Schema::table('posts', function (Blueprint $table) {
+ //
+ });
}
public function down(): void
{
+ Schema::table('posts', function (Blueprint $table) {
+ //
+ });
}
};
Schema::create
ではなく、Schema::table
となっているのが確認できます。
例によって、hoge
は意味不明なので、より現実的なファイル名を付けるのですが、修正用の場合は、以下の名前規則に従うと、--table=posts
を付けなくて大丈夫になります。
xxx_(to|from|in)_(テーブル名)
xxx_(to|from|in)_(テーブル名)_table
例えば、
php artisan make:migration add_status_to_posts_table
とすれば、直前で見たファイルと同じファイルができあがります。--table=テーブル名
を省けるという微妙な感じがいいですね。
詳しくは、ソースの正規表現をチラ見して見ると分かり易いかも知れません。
const CREATE_PATTERNS = [
'/^create_(\w+)_table$/',
'/^create_(\w+)$/',
];
const CHANGE_PATTERNS = [
'/.+_(to|from|in)_(\w+)_table$/',
'/.+_(to|from|in)_(\w+)$/',
];
参考ソース:
TableGuesser.php
雑感
しかし、日付&時刻が付いてファイル名が長くなるのは、どうにかならないものでしょうか…。
間違い等ありましたらコメントお願いします。
Discussion