CakePHP 4 で開発用の大量データをシードで作る
はじめに
Web システム開発では、ページナビなどの動作確認に大量のデータが必要になる場合があります。
しかしそれらを手動で登録するのは辛いですよね...
そこで今日は CakePHP 4 のシード機能を使って、開発用の大量データを短時間で簡単に準備する方法をご紹介します。
またチーム開発で Git を使うケース等のために、作ったシードを Git の管理対象外にする方法も併せてご紹介します。
今回は CakePHP 4.5 で確認していますが、4.x 系ならどれでも同様の手順で行けるかと思います。
1. 大量データのシード作成&実行
今回は下記のような drinks テーブルを例にしています。
CREATE TABLE drinks (
id int(11) NOT NULL,
name varchar(255) NOT NULL,
created datetime NOT NULL,
modified datetime NOT NULL
);
シードの内容を下記のようにすることで大量のデータを簡単に作ることができます。
本番用シードと区別するため、今回は SeedsDev フォルダに置いています。
フォルダ名は変えていただいて差支えありません。
(もしすでに SeedsDev がある場合は別フォルダを作ることをお勧めします)
config/SeedsDev/DrinksSeed.php
<?php
declare(strict_types=1);
use Cake\I18n\FrozenDate;
use Migrations\AbstractSeed;
/**
* Drinks seed.
*/
class DrinksSeed extends AbstractSeed
{
/**
* Run Method.
*
* @return void
*/
public function run(): void
{
// 件数
$qty = 1000;
// 基準日時(時間は 00:00:00)
$baseTimestamp = FrozenDate::now()->subDays($qty);
$data = [];
foreach (range(1, $qty) as $i) {
$created = $baseTimestamp->addDays($i);
$modified = $created;
$data[] = [
'id' => $i,
'name' => "飲料 {$i}",
'created' => $created,
'modified' => $modified,
];
}
$table = $this->table('drinks');
$table->truncate();
$table->insert($data)->save();
}
}
$baseTimestamp は created に使用していますが、created の日付はレコード1件挿入ごとに + 1日していくため、未来の created ができないように subDays($qty) で調整しています。
今回は modified を created と同じにしていますが、可変にしてもいいかもしれませんね。
このシードの実行は下記コマンドで行えます。
bin/cake migrations seed --source SeedsDev --seed DrinksSeed
- CakePHP 4 で Migrations や Seeds を別フォルダに置いて実行 / Twin Turbo Computing
- https://tt-computing.com/cake4-migrations-dir
2. Git の対象外にする
下記のように「*」と記述した .gitignore を SeedsDev フォルダに置けば、SeedsDev フォルダ自体共有されません。
config/SeedsDev/.gitignore
*