【PHP】テストデータ生成ツールを作りました

API

Composerのライブラリを見ていたところ、fakerというテストデータを作成するライブラリを見つけたので、テストデータ作成ツールを作ってみました。

● 環境

 windows11
 php 8.3.8(composer 2.7.7)
 apache 2.4.51(win64)

● 導入するライブラリ

  fakerphp/faker (php7.4以上が必須となります)

● 準備

①composer init の実行
 作成したいフォルダの中で、次のエラーが出た場合、opensslモジュールが読み込まれていませんので、②の処理を行ってください。

C:\target >composer init
:
Define your dependencies.
In Factory.php line 654:

  The openssl extension is required for SSL/TLS protection but is not available. If you can not enable the openssl ex
  tension, you can disable this error, at your own risk, by setting the 'disable-tls' option to true.
:

②opensslモジュールの読込(①でエラーが出なければ飛ばしてください)

  私の環境では、C:\tool\php838にphp.iniが存在しておらず、opensslモジュールの読み込みに失敗していました。
  そこで、
    C:\tool\php838\php.ini-development 
 を複製して、
    C:\tool\php838\php.ini
 という名前に変更した上、次の修正を行いました。

# 776行目付近
;extension_dir = "ext"
↓
extension_dir = "C:\tool\php838\ext"

#952行目付近
;extension=openssl
↓
extension=openssl

 その後、コマンドプロンプトからapacheを再起動させたところcomposer initが正常に動きました。

● コードの作成

 次のPHPプログラムを作成しました

<?php
require_once 'vendor/autoload.php';

// Person構造体の定義
class Person {
    public $name;
    public $birthday;
    public $email;

    public function __construct($name, $birthday, $email) {
        $this->name = $name;
        $this->birthday = $birthday;
        $this->email = $email;
    }
}

// Faker\Generatorのインスタンスを作成(日本語ロケール)
$ja_faker = Faker\Factory::create('ja_JP');
// Faker\Generatorのインスタンスを作成(英語ロケール)
$en_faker = Faker\Factory::create();

function generateRandomBirthday($faker) {
    // ランダムな生年月日を生成
    return $faker->dateTimeBetween('-100 years', 'now')->format('Y-m-d');
}

function generateRandomPerson($ja_faker, $en_faker) {
    // ランダムなPersonオブジェクトを生成
    $name = $ja_faker->name();
    $birthday = generateRandomBirthday($en_faker);
    $email = $en_faker->email();
    return new Person($name, $birthday, $email);
}

// 指定された人数分のPersonオブジェクトを生成
$numberOfPeople = 10; // ここで指定する人数を変更可能
$people = [];

for ($i = 0; $i < $numberOfPeople; $i++) {
    $people[] = generateRandomPerson($ja_faker, $en_faker);
}

// JSON形式で返す
header('Content-Type: application/json');
echo json_encode($people, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

?>

コマンドプロンプトから実行するとこんな感じです。

 JSON便利ですね。
 一発で動くと気持ちがいいです。
 10000人のデータも一瞬で作れました。

 Fakerがどのようにしてランダムな名前を作っているのか調べたろこころ、

手入力した名前や苗字をランダムで並べ替えるというアルゴリズムでしたので、時代に応じた名前をオーバーライドしてもいいかもしれません。

● テストデータ作成サイト

 HTMLからAPIとして呼び出せるように修正しました。
 次のページで公開しています。
   Person Generator (tansunohazama.sakura.ne.jp)

 作成したデータはcsvファイルに変換してダウンロード可能です。
 ランダム値を使って生成したデータですので、たまたま同じ名前があっても実際の個人とは関係ありません。

 テスト用ということで、現在は1000名づつしか出力できないようにしています。