100% ローカル — データがブラウザの外に出ることはありません

YAMLバリデータ|解析が止まった行をそのまま教えてくれます

YAMLが解析できるかを調べます。字下げ、引用符、アンカー、重複キー。解析が止まった場所は行番号で示されるので、どこを見に行けばよいかがすぐに分かり、迷わず直せます。

高速 プライベート Cookieゼロ

YAML 入力

Result 出力

このツールが検査するもの

文書が解析できること。YAML の場合、これは見た目より広い意味を持ちます。

  • 字下げが一貫し、空白でできていること。
  • 引用符が閉じられ、ブロックスカラー(|、>)が正しく字下げされていること。
  • 各エイリアス *name に対応するアンカー &name があること。
  • 同じキーを二度持つマッピングがないこと。
  • --- の区切りが完結した文書を作っていること。

通れば根の形と大きさを返します。通らなければ、解析器のメッセージを行と桁つきで返します。YAML の解析器は、場所を告げるのが非常に上手です。

バリデータ、チェッカー、パーサー──そして .yml と .yaml

構文チェッカー、フォーマットチェッカー、パーサー、テスター、バリデータ。五つの呼び名が問うているのは一つのことです。この文書は解析できるか。貼り付けたときに起きているのは、それです。

.yml と .yaml は同じ言語であって、二つの変種ではありません。拡張子は習慣の産物です。YAML の公式は .yaml を勧めていますが、一世代前の道具が先に .yml と書き、そのまま動かなかったのです。Docker Compose は両方を読み、GitHub Actions も両方を読み、このページも同じです。どちらの綴りで届いたかは、ファイルの中身からは分かりません。

タブは字下げではない

タブの幅は八桁であり、四桁であり、二桁でもあります。見る人によります。したがってタブで作った字下げには定まった意味がなく、YAML では字下げこそが構造です。仕様はこれを禁じており、このツールも同じです。

引用符で囲んだスカラーの中では、タブはただの一文字であり何の問題もありません。困るのは左端だけです。

重複キーは誤り

port: 8080
host: example.com
port: 3000

仕様はマッピングのキーが一意であることを求めます。多くの解析器はこれを無視して後のほうを採ります。設定ファイルが、二度書いたことを忘れていた値で黙って動くのはこのためです。ここでは誤りとし、二つ目の行を示します。

複数文書の流れは妥当

--- は文書を区切り、一つのファイルはいくつでも文書を持てます。報告はその数を示します。Kubernetes のマニフェストはたいてい流れであり、流れは構文の誤りではありません。

検査しないもの

文書が意味をなすかどうか。

完璧な YAML でありながら壊れた Compose ファイルということはあり得ます。image のないサービス、enviroment と書かれたキー、数値が期待される場所の引用符付きポート。どれも構文の問題ではなく、ここでは捕まりません。

素の語の意味も決めません。yes は YAML 1.2 の読み手には文字列 yes、1.1 の読み手には真偽値の真であり、どちらも妥当な YAML を読んでいます。この違いはこの検査器には決められません。次にそのファイルを読むのが誰かによって決まるからです。

プライバシー

すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。

よくある質問

なぜタブによる字下げは拒否されるのですか。
タブには定まった幅がないからです。タブで作った字下げには定まった意味がなく、YAML では字下げこそが構造のすべてです。仕様はタブの字下げを明確に禁じています。引用符で囲んだ値の中のタブは問題ありません。困るのは字下げだけで、だからこそ行と桁を示します。
なぜ重複キーは「後勝ち」ではなく誤りなのですか。
YAML 仕様がキーの一意性を求めており、「後勝ち」とは、設定が書かれた内容の半分を黙って無視する仕組みだからです。上のほうに `port: 8080`、下のほうに `port: 3000` と書かれていたら、教えてもらいたいはずです。どちらが動いているのかを午後いっぱい調べたい人はいません。
docker-compose や Kubernetes のファイルとして検査してくれますか。
いいえ。検査するのは YAML として解析できるかどうかです。非の打ちどころのない YAML でありながら、使い物にならない Compose ファイルということはあり得ます。image のないサービス、綴りを間違えたキー、数値が期待される場所の引用符付きポートなど。スキーマ検証にはスキーマが要り、それは別の道具です。

関連ツール