swagger-to-mockでswaggerファイルからmock jsonを作成する

API のドキュメントツールは依然として、swaggerを使うことが多いのですが、
Unit Tests を書くときにmockデータを swagger から簡単に書き出せるといいなと思うことがあります。

そこで、今回swagger-to-mockという mock データを生成するCLIを作りました。
swagger で定義した yaml ファイルをパースして、exampleデータが有れば、example の値を。そうでなければ、下記のリストにある各型で定義したデフォルトの値を含む json ファイルを吐き出してくれます。

string: ""
number: 0
integer: 0
boolean: true
array: []
object: {}

$npx swagger-to-mock swagger.yaml

としてあげると、定義された各レスポンスに対して、${API_PATH}_${HTTP_METHOD}_${RESPONSE_STATUS}.json の命名規則に基づき、json ファイルが生成されます。

例えば、下記のような内容の swagger ファイルに対して、swagger-to-mockを実行すると

responses:
  '200':
    description: pet response
    content:
      application/json:
        schema:
          type: array
          items:
            $ref: '#/components/schemas/Pet'
components:
  schemas:
    Pet:
      required:
        - id
        - name
      properties:
        id:
          type: integer
          format: int64
          example: 123
        name:
          type: string
          example: "Tom"
        tag:
          type: string
          example: "Cat"

pets_get_200.jsonというファイルが生成され、ファイルの中身は下記のようになります。

[
  {
    "id": 123,
    "name": "Tom",
    "tag": "Cat"
  }
]

現状、swagger3 (OpenAPI3) にしか対応していませんが、必要に応じて、swagger2 のサポートも追加したいと考えています。
また、各データタイプの format や pattern を考慮することで、より意味のあるデータ生成を行える機構も検討したいと考えています。

参考