ちょっとした作業で、テスト用のユーザデータを作る必要が出てきて「なんか良いのないかなー」と思って探してみたところ、fakerというPythonのツールがいい感じにデータを生成してくれたので、記録として残しておくことにする。ライブラリとしても利用できるようだ。 localeの設定に応じて出力してくれるサンプルも変えているようで、日本語の名前や住所、メールアドレスも取得できるらしい。 fakerはPythonで書かれており、以下のコマンドでインストールできる。

pip install faker

インストールができたら、helpを見てみよう。

blacknon@BS-PUB-UBUNTU-01:~$ faker --help
usage: faker [-h] [--version] [-o output] [-l LOCALE] [-r REPEAT] [-s SEP]
             [-i [INCLUDE [INCLUDE ...]]]
             [fake] [fake argument [fake argument ...]]

faker version 0.8.10

positional arguments:
  fake                  name of the fake to generate output for (e.g. profile)
  fake argument         optional arguments to pass to the fake (e.g. the
                        profile fake takes an optional list of comma separated
                        field names as the first argument)

optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  -o output             redirect output to a file
  -l LOCALE, --lang LOCALE
                        specify the language for a localized provider (e.g.
                        de_DE)
  -r REPEAT, --repeat REPEAT
                        generate the specified number of outputs
  -s SEP, --sep SEP     use the specified separator after each output
  -i [INCLUDE [INCLUDE ...]], --include [INCLUDE [INCLUDE ...]]
                        list of additional custom providers to user, given as
                        the import path of the module containing your Provider
                        class (not the provider class itself)

supported locales:

  ar_AA, ar_EG, ar_JO, ar_PS, ar_SA, bg_BG, bs_BA, cs_CZ, de_AT, de_CH, de_DE, dk_DK, el_GR, en, en_AU, en_CA, en_GB, en_TH, en_US, es, es_ES, es_MX, et_EE, fa_IR, fi_FI, fr_CH, fr_FR, he_IL, hi_IN, hr_HR, hu_HU, id_ID, it_IT, ja_JP, ka_GE, ko_KR, la, lt_LT, lv_LV, ne_NP, nl_BE, nl_NL, no_NO, pl_PL, pt_BR, pt_PT, ro_RO, ru_RU, sk_SK, sl_SI, sv_SE, th_TH, tr_TR, tw_GH, uk_UA, zh_CN, zh_TW

  faker can take a locale as an argument, to return localized data. If no
  localized provider is found, the factory falls back to the default en_US
  locale.

examples:

  $ faker address
  968 Bahringer Garden Apt. 722
  Kristinaland, NJ 09890

  $ faker -l de_DE address
  Samira-Niemeier-Allee 56
  94812 Biedenkopf

  $ faker profile ssn,birthdate
  {'ssn': u'628-10-1085', 'birthdate': '2008-03-29'}

  $ faker -r=3 -s=";" name
  Willam Kertzmann;
  Josiah Maggio;
  Gayla Schmitt;

examplesを見るとわかるように、サブコマンドとして取得したい値を指定してやることで、サンプルデータを生成してくれる。 指定できるサブコマンドはかなり数が多い(どうもライブラリから直接持ってきてるっぽい)のだが、とりあえず以下のようなものが利用できるようだ(かなり数が多いので一部だけ抜粋)。

  • name
  • email(引数でドメイン指定可能)
  • free_email
  • zipcode
  • address
  • mac_address
  • ipv4
  • ipv6
  • text(あまり使わない気がする…)

countryやcity、ビル名といった情報も個別に取得可能のようだ。 その他、「profile」を指定することで、jsonでプロフィール関係のデータを一括出力してくれる。

blacknon@BS-PUB-UBUNTU-01:~$ faker profile
{'website': [u'http://hamada.jp/'], 'username': u'amiyake', 'name': u'\u9234\u6728 \u76f4\u5b50', 'blood_group': 'A+', 'residence': u'\u5c71\u5f62\u770c\u5c0f\u7b20\u539f\u6751\u571f\u5442\u90e86\u4e01\u76ee23\u756a4\u53f7 \u30af\u30ec\u30b9\u30c8\u5143\u6d45\u8349282', 'company': u'\u682a\u5f0f\u4f1a\u793e \u5c71\u7530', 'address': u'\u9ce5\u53d6\u770c\u8db3\u7acb\u533a\u4e09\u7b4b6\u4e01\u76ee6\u756a20\u53f7 \u30d1\u30fc\u30af\u767e\u6751855', 'birthdate': '1990-12-15', 'sex': 'F', 'job': 'Speech and language therapist', 'ssn': u'435-47-3076', 'current_location': (Decimal('61.2161055'), Decimal('-128.061467')), 'mail': u'akirahamada@yahoo.com'}