【PHP】ランダムデータ入りCSV生成スクリプトの作り方

  • 2021年2月4日
  • PHP

 PHP は多芸で組み込み関数のみでもランダムな文字列など何かしらのプリミティブなランダム値を生成するコードを簡単に書けます。その様なちょっとしたコードを集めると、案件で使うようなランダムなテストデータも生成できます。こういったコードを使ってCSVに大量のランダムデータを書き込む例が次です。

<?php
//make_test_data.php

/**
 * ランダム文字列の生成。こんな感じで便利なランダム値生成関数を作ると後で楽です。
 * @param  int  $size
 * @return string
 * @throws Exception
 */
function str_random($size = 32) {
    return strtolower(substr(str_replace(['/', '+'], ['_', '-'], base64_encode(random_bytes($size))), 0, $size));

}

/**
 * 配列の中からランダムな一つを返す。
 * @param $arr
 * @return mixed
 */
function arr_random($arr){
    return $arr[array_rand($arr)];
}

/**
 * ランダムデータの生成。ここで任意のテストデータの定義を作ります
 * @return array
 * @throws Exception
 */
function make_data(){
    return [
        'name' => '浜松'.str_random(rand(8,16)),
        'location' => arr_random(['静岡', '浜松', '磐田', '袋井']),
        'amount' => rand(0, 100000),
        'created_at' => date('Y-m-d H:i:s', rand(strtotime('-2 year'), strtotime('-1 year'))),
        'updated_at' => date('Y-m-d H:i:s', rand(strtotime('-1 year'), strtotime('now')))
    ];
}

/**
 * メイン処理。ランダムデータを与えられた引数分生成してCSVに書き込み
 * @param $data_num
 * @throws Exception
 */
function main($data_num){
    // __DIR__ はPHPファイルのあるディレクトリを指す組み込み定数
    $f = fopen(__DIR__.DIRECTORY_SEPARATOR.'test_data.csv', 'wb');
    for ($i = 0; $i < $data_num;$i++){
        fputcsv($f,make_data());// 行をファイルに書き込むPHP組み込み関数
    }
    fclose($f);
}

$data_num = 10;// ランダムデータの個数
main($data_num);

 これをphp make_test_data.phpと動かすと次の様なものがmake_test_data.phpを置いたディレクトリ内のtest_data.csv内に出力されます。

浜松x7mzkna0y9nw,磐田,97864,"2019-12-07 04:33:06","2020-07-14 00:53:52"
浜松gqpr1clsx,浜松,25752,"2019-04-30 15:37:41","2020-12-14 02:53:12"
浜松y65ks3ttefpcpjij,浜松,70937,"2019-05-17 00:29:32","2020-03-25 19:31:41"
浜松ik8znfntp2,袋井,90246,"2019-11-16 19:18:00","2020-07-06 09:52:07"
浜松ksjdtew9t3ti6,磐田,54863,"2019-12-20 09:52:38","2021-01-02 12:11:19"
浜松esqxb5ouhby,浜松,39113,"2019-07-20 01:50:09","2020-12-28 23:58:35"
浜松4oawlxc2yoq3jm8f,袋井,46539,"2019-07-16 09:17:13","2020-09-06 15:04:03"
浜松-dvqqn-8esrz,磐田,82094,"2019-07-13 01:10:48","2020-06-10 01:48:39"
浜松mymut8c26qvymhx,浜松,94646,"2019-07-01 07:04:06","2020-10-06 22:47:57"
浜松wfn_v5bio9q,浜松,48409,"2019-05-01 23:37:12","2020-06-03 21:47:08"

 要はランダムデータを生成する関数を用意して、必要なデータ数分その関数を回し、都度その内容をCSVに書き込むだけです。
 このようなスクリプトを何個か作ることで Faker 等のランダムデータ生成ライブラリを使わずともそれなりのテストデータを簡易に生成できます。またCSVからデータベースへ値をインサートするツールはよくあり、永続ストレージに保存することも少々ググればできる様になります。
 ライブラリをむやみに増やしたくない、増やせない様な状況ではこういった外部ライブラリが不要なスクリプトでテストデータの生成やテストをできるようにしておくと何かと便利です。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG