LoginSignup
6
1

More than 1 year has passed since last update.

PythonでYAMLの検証をする

Last updated at Posted at 2021-05-21

手前味噌ですが、pre-commitで使えるhooksを作りました。
もしよければご利用ください。

JSON SchemaはあるのにYAML Schemaは?

と思って探してみると、以下の記事を見つけました。

ここにリストアップされているもので、Pythonで使えそうなものは以下でした。

名前 最終更新日(master/main) 感想
Kwalify (GitHub?) 2009年12月1日 2009年!?
Rx (GitHub) 2015年12月18日 ホームページに時代を感じる…
Yamale (PyPi) 2021年4月25日 ロゴがあるのね、やる気満々やん

さすがに古いものを使うのはどうかと思ったので、Yamaleを使うことにしました。

インストール

PyYAML(Yamaleのデフォルト)を使いたい場合は

pip install pyyaml yamale

ruamelを使いたい場合は

pip install ruamel yamale

Yamale式、スキーマファイル

スキーマ自体もYAMLで書いていきます。
オプション --schema が未指定の場合、検証するYAMLファイルと同じディレクトリにある schema.yaml が参照されるようです。

サンプルにあるものがそのまま参考になりそうです。

実行してみる

CLIとAPI、どちらも使えるようになっていますが、ひとまずCLIで動かしてみます。

yamale

オプションが必要な場合があると思うので日本語訳してみました。

usage: yamale [-h] [-s SCHEMA] [-n CPU_NUM] [-p PARSER] [--no-strict] [PATH]

yaml ファイルを検証します。

positional arguments:
  PATH                  検証するフォルダ。未指定だとカレントディレクトリ。

optional arguments:
  -h, --help            このヘルプを表示
  -s SCHEMA, --schema SCHEMA
                        スキーマのファイル名。未指定だとschema.yaml。
  -n CPU_NUM, --cpu-num CPU_NUM
                        CPUの使用数。デフォルトは4。
  -p PARSER, --parser PARSER
                        ファイルをロードするのに使用するYAMLのライブラリ。 "ruamel" か
                        "pyyaml" (デフォルト) が選択肢。
  --no-strict           厳密モードを無効化。スキーマに指定されていないデータが存在しても受け入れます。

ファイルに問題がなければ戻り値が0になります。

pre-commitと組み合わせる

みんな大好き pre-commit と組み合わせたかったのですが、いろいろファイルを用意しないといけなかったので、hooksを自作しました。

repos:
  - repo: https://github.com/k-ogawa-1988/yamale-pre-commit
    rev: v0.0.2  # 2021年5月24日現在
    hooks:
      - id: yamale-validate

オプションはなしでも問題ないはずです。

仕事用のリポジトリにも使ってみましたがちゃんと機能しているようです。

スキーマファイルにエラーがある場合

image.png

データファイルにエラーがある場合

image.png

正常終了

image.png

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1