公開日:
更新日:
12 min read
エンジニアリングテストデータ作成を楽しく効率的に - AIとFakerの活用法

テストデータの作成
システム開発において、面倒くさいけど避けて通れないというものが、いろいろとあります。 その一つがテストデータの作成です。 例えば、画面の入力テストでありがちなパターン。
氏名:ほげほげ
住所:テスト
電話番号:00000000000
email:hoge@hoge.com
お問い合わせ内容:あああああああああああああああああああああああ
不思議なことに、多くの人が同じパターンを思いつくようです。 たまにですが、いや、少なくないケースで、このようなテストデータがそのまま本番環境に残っていることがあります。
私はもうちょっと工夫します。
氏名:空条承太郎
住所:東京都千代田区千代田1-1 ※100-0001で郵便番号変換されるから
電話番号:080-0893-4649
email:jojo@jump.com
お問い合わせ内容:オラオラオラオラオラオラオラオラオラオラ孫悟空
このように、アニメや漫画、小説などからキャラクターや会社名を使ってテストデータを作成すると、テストが楽しくなります。 楽しいですよね? 別に政治家でもアーティストでもセクシー女優でもいいと思います。
そういえば…若い頃の話です。 日経新聞のCTS(電算写植システム)の開発をしていた時、テストデータがなぜか宮沢りえのサンタ・フェでした。 そう、あのふんどしで話題になったアレです。 誰がテストデータに選んだのだろうか…
ただし、本名や住所、電話番号などの個人情報は使わないようにしましょう。
大量のデータ作成
実際の例を挙げてみます。 下記のテーブルに追加するテスト用に顧客情報を20件生成してください。 市区町村は実在するものです。
+--------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+---------------+------+-----+---------+-------+
| clid | int | NO | | NULL | |
| clname | varchar(96) | NO | | NULL | |
| clkana | varchar(96) | NO | | NULL | |
| clemail | varchar(96) | NO | | NULL | |
| clpost | varchar(96) | NO | | NULL | |
| clpref | varchar(12) | NO | | NULL | |
| claddr1 | varchar(96) | NO | | NULL | |
| claddr2 | varchar(96) | NO | | NULL | |
| cltel1 | varchar(24) | NO | | NULL | |
| cltel2 | varchar(24) | NO | | NULL | |
| clfax | varchar(24) | NO | | NULL | |
| clbirthy | int | NO | | NULL | |
| clbirthm | int | NO | | NULL | |
| clbirthd | int | NO | | NULL | |
| clmemo | varchar(1024) | NO | | NULL | |
| registerdate | datetime | NO | | NULL | |
+--------------+---------------+------+-----+---------+-------+
これを作るのは大変です。これだけで1日つぶれそうです。 どうでもいいデータなのですが、冒頭のような適当なデータではテストになりません。
私なんかは、この時点で現実逃避したくなります。 別の作業をしながら、暇を見て、気分転換に1件作成しては元の作業に戻るの繰り返し。 工数は少ないのに、時間がかかります。 人間は機械ではないのです。
いや、こういう作業が好きな人はいいですよ。 私は好きではないです。 面倒くさい。 単純、単調で面倒くさい仕事は自動化するのがエンジニアというものです。
AIの活用
そこでAIの出番です!試してみましょう。
このテーブル用のテストデータをタブ区切りで作成してください。 データはテストが楽しくなるように日本のドラマやアニメ、アーティストや政治家などの著名人の名前やアニメやドラマ、小説に出てくる会社や団体名を活用してください。 例:アナハイム・エレクトロニクス株式会社、菱井インダストリーや篠原重工、世界経済新聞社、株式会社トリリオンゲームなど
clid clname clkana clemail clpost clpref claddr1 claddr2 cltel1 cltel2 clfax clbirthy clbirthm clbirthd clmemo registerdate
1 黒の組織 クロノソシキ contact@gorganization.com 100-0001 東京都 中央区銀座1-1-1 シルバービル5F 03-1234-5678 03-8765-4321 03-2345-6789 1980 1 1 秘密結社として暗躍 2025-01-07 12:00:00
2 NERV ネルフ contact@nerv.jp 150-0002 東京都 渋谷区宇田川町2-2 第三本部 03-9876-5432 03-5432-6789 03-6789-1234 1995 6 22 特務機関 2025-01-07 12:00:00
3 未来ガジェット研究所 ミライガジェットケンキュウショ contact@mirai-lab.co.jp 540-0012 大阪府 大阪市中央区心斎橋1-1-1 秋葉原オフィス 06-9876-5432 06-5432-6789 06-6789-1234 2010 4 12 世界線を変えるガジェット研究 2025-01-07 12:00:00
4 桜田ファミリア サクラダファミリア info@sakurada.co.jp 160-0022 東京都 新宿区西新宿2-3-4 新都心ビル9F 03-6543-2100 03-2100-6543 03-4321-0987 2001 5 15 特殊能力者の集団 2025-01-07 12:00:00
5 ウソップ海賊団 ウソップカイゾクダン usopp@kaizokudan.jp 250-0011 神奈川県 小田原市海賊町1-2-3 灯台の下 0465-123-4567 0465-765-4321 0465-876-5432 2000 8 10 冒険と夢を共有 2025-01-07 12:00:00
6 赤木法律事務所 アカギホウリツジムショ akagi@lawfirm.jp 104-0032 東京都 中央区築地3-4-5 勝負の場 03-1111-2222 03-3333-4444 03-5555-6666 1990 3 31 勝負は戦略 2025-01-07 12:00:00
7 鬼殺隊 キサツタイ contact@slayers.jp 300-0001 茨城県 水戸市鬼滅町5-6-7 炭治郎館 029-1234-5678 029-8765-4321 029-2345-6789 1910 10 10 鬼狩り専門 2025-01-07 12:00:00
8 ポケモンカンパニー ポケモンカンパニー info@pokemon.co.jp 060-0042 北海道 札幌市中央区北4条西4-1 ポケモンセンター 011-123-4567 011-765-4321 011-876-5432 1996 2 27 ポケモンの管理 2025-01-07 12:00:00
9 スズメバチ団 スズメバチダン info@suzumebachi.com 330-0854 埼玉県 さいたま市大宮区蜂巣1-2-3 アジト 048-123-9876 048-654-3210 048-789-4321 1985 9 9 復讐に燃える団体 2025-01-07 12:00:00
10 サクラ商事 サクラショウジ info@sakura-shouji.co.jp 460-0008 愛知県 名古屋市中区栄3-5-7 桜ビル3F 052-123-4567 052-765-4321 052-876-5432 1970 4 1 地域密着型企業 2025-01-07 12:00:00
11 花の慶次プロダクション ハナノケイジプロダクション info@keiji-production.jp 920-0853 石川県 金沢市花町2-3-1 戦国ビル 076-111-2222 076-333-4444 076-555-6666 1989 5 11 戦国文化の発信 2025-01-07 12:00:00
12 銀魂株式会社 ギンタマカブシキガイシャ info@gintama.jp 300-0002 茨城県 水戸市侍町3-4-5 万事屋ビル 029-987-6543 029-432-1987 029-543-6789 2003 12 24 万事解決 2025-01-07 12:00:00
13 帝愛グループ テイアイグループ info@teiai.co.jp 160-0022 東京都 新宿区東新宿2-5-6 地下施設 03-0000-9999 03-1111-8888 03-2222-7777 1976 7 7 地下労働と強運経営 2025-01-07 12:00:00
14 ドラえもん未来開発 ドラエモンミライカイハツ doraemon@mirai-dev.com 102-0083 東京都 千代田区飯田橋4-4-1 四次元タワー 03-4444-5555 03-6666-7777 03-8888-9999 1969 9 3 未来技術の創造 2025-01-07 12:00:00
15 渋谷スクランブル事務所 シブヤスクランブルジムショ scramble@shibuya.co.jp 150-0002 東京都 渋谷区渋谷1-2-3 スクランブル交差点ビル 03-9876-5432 03-5432-6789 03-6789-1234 1990 8 24 交差点のように人を繋ぐ 2025-01-07 12:00:00
16 湘南乃風企業 ショウナンノカゼキギョウ info@shonan-wind.com 251-0025 神奈川県 藤沢市湘南台5-5-5 サーフビル 0466-123-4567 0466-765-4321 0466-876-5432 2002 7 10 音楽と湘南文化の融合 2025-01-07 12:00:00
17 黒猫ヤマト運送 クロネコヤマトウンソウ yamato@delivery.co.jp 135-0004 東京都 江東区亀戸6-6-6 黒猫タワー 03-3333-4444 03-5555-6666 03-7777-8888 1976 4 12 配送業界のトップランナー 2025-01-07 12:00:00
18 マクロス開発 マクロスカイハツ macross@macross.co.jp 330-0845 埼玉県 さいたま市中央区航空町1-1-1 航空タワー 048-123-4567 048-765-4321 048-876-5432 1982 10 3 次元を超えた技術開発 2025-01-07 12:00:00
19 三日月軒 ミカヅキケン info@mikazuki.jp 500-8102 岐阜県 岐阜市夜空町7-8-9 満月ビル 058-123-4567 058-765-4321 058-876-5432 1921 11 11 地域の味と文化 2025-01-07 12:00:00
20 草薙財閥 クサナギザイバツ info@kusunagi.co.jp 600-8003 京都府 京都市下京区京町2-3-4 京都本社 075-123-4567 075-765-4321 075-876-5432 1987 12 18 伝統と革新の融合 2025-01-07 12:00:00
データ生成にかかったのは、わずか数分です。 しかも私好みの渋い回答です。素晴らしい!
Fakerライブラリ
しかし、世の中には同じ問題に困った人がたくさんいて、その解決策の集合知としてFakerなるライブラリがあるそうだ。
Fakerライブラリは、テストデータやダミーデータを簡単に生成するためのオープンソースのツールです。多くのプログラミング言語で実装されており、特にPython、PHP、JavaScript、Rubyなどでよく使われています。
Fakerライブラリの主な特徴
- 多様なデータ生成: 名前、住所、電話番号、メールアドレス、文章、日付など、様々な種類のランダムデータを生成できます。
- ローカライズサポート: 日本語を含む多くの言語や地域に対応したデータを生成できます(日本の郵便番号、住所形式など)。
- 一貫性のあるデータ: 同じシード値を使うことで、繰り返し同じデータセットを生成することも可能です。
使用例(Python版)
from faker import Faker
import csv
# 日本語ロケールの初期化
fake = Faker('ja_JP')
# 20件のテストデータを生成しCSVに書き出す例
with open('test_data.csv', 'w', newline='', encoding='utf-8') as csvfile:
fieldnames = ['id', 'name', 'kana', 'email', 'post', 'pref', 'addr1', 'addr2', 'tel1', 'tel2', 'fax', 'birth_year', 'birth_month', 'birth_day', 'memo', 'register_date']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for i in range(1, 21):
birth_date = fake.date_of_birth(minimum_age=20, maximum_age=60)
writer.writerow({
'id': i,
'name': fake.name(),
'kana': fake.kana_name(),
'email': fake.email(),
'post': fake.zipcode(),
'pref': fake.prefecture(),
'addr1': fake.city(),
'addr2': fake.street_address(),
'tel1': fake.phone_number(),
'tel2': fake.phone_number(),
'fax': fake.phone_number(),
'birth_year': birth_date.year,
'birth_month': birth_date.month,
'birth_day': birth_date.day,
'memo': fake.text(max_nb_chars=50),
'register_date': fake.date_time_this_year().strftime('%Y-%m-%d %H:%M:%S')
})
AIアプローチとは異なり、Fakerは完全にプログラマティックに動作し、実在の著名人や架空のキャラクター名ではなく、完全に架空のデータを生成するのが特徴です。 本格的なテスト環境ではこちらの方が適切かもしれない。
あまりワクワクしないけど、まあ、余計なリスクを背負う必要もないですしね。
結論
テストデータ作成は、プログラマーの知恵と工夫が試される場面でもある。 AIの活用やライブラリの利用など、選択肢は増えている。 単調な作業を自動化することで本来の創造的な作業に集中できるようになるのが、現代のエンジニアリングだ。
さあ、今からあなたも「ああああ」や’hogehoge’から卒業しましょうよ!