ブログトップ

公開日:

更新日:

12 min read

エンジニアリング

テストデータ作成を楽しく効率的に - AIとFakerの活用法

テストデータ作成を楽しく効率的に - 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ライブラリの主な特徴

  1. 多様なデータ生成: 名前、住所、電話番号、メールアドレス、文章、日付など、様々な種類のランダムデータを生成できます。
  2. ローカライズサポート: 日本語を含む多くの言語や地域に対応したデータを生成できます(日本の郵便番号、住所形式など)。
  3. 一貫性のあるデータ: 同じシード値を使うことで、繰り返し同じデータセットを生成することも可能です。

使用例(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’から卒業しましょうよ!