TestData 作成ライブラリ Mimesisの紹介


# はじめに
大量の（それっぽい）企業データがあったら良いなぁという状況があり、Mimesisというライブラリが便利だったので紹介します

## 対象
フロントエンジニア、テストデータを作成したい人、Pythonが好きな人
python3.6以上がインストールされていること

## ゴール
インストール〜簡易的なJSONテストデータを出力できるまで

# Mimesisとは
テストデータ作成ライブラリ
Fakerが有名のようだが、法人データ作成がないと思われた
Mimesisでは法人データが作成でき、かつちょっと変わったHomePageだとか
IPアドレスのようなデータも作成できるようなので、このライブラリを使用してデータを作成してみました
[Mimesis公式](https://mimesis.name/index.html)


# インストール
Mimesisのインストールはpipのみ

```
$ pip install Mimesis
```
pipってとても優秀なやつだと、毎回思います(コピペ)

# Getting Started
簡単な使い方

```python:main.py
import mimesis

# テストデータを日本語に設定
g = mimesis.Generic('ja')

# 会社名と法人タイプ 
print("{0} {1}".format(g.business.company_type(), g.business.company()))
# homePage
print(g.internet.home_page())
```

## 起動＆閲覧
ターミナルで

```
$ python main.py 
株式会社 デンカ生研
https://bantay.moscow
```

なんとなくありそうな会社名じゃないでしょうか



# JSONデータとして出力

せっかくなのでJSONのテストデータを作成してみます
（SwaggerにしろImportするにしろそのほうが便利なので）

## ソース
先程のソースを

```python:main.py
import json
from datetime import date, datetime
import mimesis

# 日付と数値のフォーマットを揃える(JSON出力時にはこれを用意しておくと便利)
def format_default(obj):
    if isinstance(obj, datetime) or isinstance(obj, date):
        return obj.isoformat()
    if isinstance(obj, decimal.Decimal):
        #小数部分が無ければIntで返す
        if float(obj).is_integer():
            return int(obj)
        else:
            return float(obj)
    raise TypeError

# 複数件セットできるようにDictを準備
data = []
g = mimesis.Generic('ja')

# 複数件生成してDictにセット(必要件数分ここを変更
for idx, x in enumerate(range(0, 2)):
    ins_data = {}
    ins_data['company_id'] = idx  # Id
    ins_data['company_name'] = "株式会社 {0}".format(g.business.company())  # 会社名
    ins_data['foundation_date'] = g.datetime.formatted_date("%Y/%m")  # 設立年月日
    ins_data['postal_code'] = g.address.postal_code()  # 郵便番号
    ins_data['state'] = g.address.state()  # 都道府県
    ins_data['city'] = g.address.city()  # 〜市
    ins_data['street'] = g.address.street_name()  # 番地
    ins_data['home_page'] = g.internet.home_page()  # homepage
    data.append(ins_data)  # Dictに追加

# DictをJSONとしていい感じに整形して出力
print(json.dumps(data, default=format_default, indent=2, ensure_ascii=False))
```

```
$ python main.py 
[
  {
    "company_id": 0,
    "company_name": "株式会社 三菱ＵＦＪフィナンシャルグループ",
    "foundation_date": "2003/08",
    "postal_code": "559-9285",
    "state": "秋田県",
    "city": "松山市",
    "street": "目黒",
    "home_page": "https://trachytes.frl"
  },
  {
    "company_id": 1,
    "company_name": "株式会社 大丸",
    "foundation_date": "2004/02",
    "postal_code": "564-0918",
    "state": "福島県",
    "city": "太田市",
    "street": "要町",
    "home_page": "https://arvin.tui"
  }
]
```

どうでしょう、見てるだけでも楽しい感じがしますね

あとはこんな感じで

```
$ ptyhon main.py > testData.json
```

テストデータ（JSON）を作成して、SwaggerやFrontのMock用データに利用しています


# おまけ
最後に公式に書いてあることですがどんなデータを作成できるか紹介しておきます
（他にも使い所がわからないような面白いものもあるので

#### Random
idやamountなど

#### Address
countryやcityなど

#### Business
companyやcompany_typeなど

#### Datetime
daysやhoursなど

#### Food
drinkやvegetableなど (これ面白いですよね

#### Person
first_nameやemail, blood_typeなど

#### Text
alphabetやanswerなど

#### Development
osやversionなど

#### File
file_nameやmime_typeなど

#### Hardware
cpuやscreen_sizeなど

#### Internet
home_pageやhttp_method, ip_v4など

#### Numbers
complex_numberやintegers(start=0, end=10, n=10)など

#### Path
homeやrootなど


#### Path
homeやrootなど