手前味噌ですが、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
オプションはなしでも問題ないはずです。
仕事用のリポジトリにも使ってみましたがちゃんと機能しているようです。