【小ネタ】YAMLファイルをMarkdownへ変換を簡単にやってみた

YAMLからDocumentを作る作業をやっています。何も考えず手動で変換しよう作業していたのですが、間違いも発生しますし、量が多いのでツールを作ることにしました。
2023.09.27

こんにちはCX事業本部Delivery部のさかじです。 YAMLからDocumentを作る作業をやっています。何も考えず手動で変換しよう作業していたのですが、間違いも発生しますし、量が多いのでツールを作ることにしました。

環境

  • Windows 11
  • WSL2 Ubuntu22.04.2 LTS

前提条件

$ python3 --version
Python 3.10.12
  • PyYAMLのインストール
$ pip install PyYAML
  • tabulateのインストール
$ pip install tabulate

サンプルYAMLファイルを作成

car.yml

cars:
  - make: Toyota
    model: Corolla
    year: 2020
    color: red
    engine:
      type: petrol
      displacement: 1.8
  - make: Honda
    model: Accord
    year: 2018
    color: white
    engine:
      type: diesel
      displacement: 2.2
  - make: Subaru
    model: Impreza
    year: 2021
    color: blue
    engine:
      type: petrol
      displacement: 2.0

ちなみにこちらのサンプルデータはChatGPTに作ってもらいました。

YAML読み込み

$ python3

>>> import yaml
>>> with open('./car.yml') as stream:
>>>     data = yaml.load(stream, Loader=yaml.SafeLoader)

※ PyYAML5.1以降はyaml.load(input) と呼び出すことが非推奨になりました。参考

dataprint()すると以下のように見えました。

>>> print(data)
{'cars': [{'make': 'Toyota', 'model': 'Corolla', 'year': 2020, 'color': 'red', 'engine': {'type': 'petrol', 'displacement': 1.8}}, {'make': 'Honda', 'model': 'Accord', 'year': 2018, 'color': 'white', 'engine': {'type': 'diesel', 'displacement': 2.2}}, {'make': 'Subaru', 'model': 'Impreza', 'year': 2021, 'color': 'blue', 'engine': {'type': 'petrol', 'displacement': 2.0}}]}

Markdown書き出し

car.ymlは読み込んだ前提で進めます

簡単にkeyで表を作ってみます。

>>> from tabulate import tabulate
>>> cars = data['cars']
>>> print(tabulate(cars, headers='keys'))
cars
------------------------------------------------------------------------------------------------------------------------
{'make': 'Toyota', 'model': 'Corolla', 'year': 2020, 'color': 'red', 'engine': {'type': 'petrol', 'displacement': 1.8}}
{'make': 'Honda', 'model': 'Accord', 'year': 2018, 'color': 'white', 'engine': {'type': 'diesel', 'displacement': 2.2}}
{'make': 'Subaru', 'model': 'Impreza', 'year': 2021, 'color': 'blue', 'engine': {'type': 'petrol', 'displacement': 2.0}}

今回はGithubなどで使われるMarkdownで作りたいと思います。

>>> print(tabulate(cars, headers='keys', tablefmt='github'))

| make   | model   |   year | color   | engine                                  |
|--------|---------|--------|---------|-----------------------------------------|
| Toyota | Corolla |   2020 | red     | {'type': 'petrol', 'displacement': 1.8} |
| Honda  | Accord  |   2018 | white   | {'type': 'diesel', 'displacement': 2.2} |
| Subaru | Impreza |   2021 | blue    | {'type': 'petrol', 'displacement': 2.0} |

  非常に簡単に出力できました。

参考サイト

最後に

YAMLから自由なフォーマットのMarkdownを作ることが容易にでき、ドキュメント化が自動化できます。
業務で使用するデータで機密のデータはオンラインツールで変換できませんので簡単に変換できるライブラリは非常に助かります。