YAML意味差チェッカー
YAML文書を貼り付けると、パーサーがYAML 1.1またはYAML 1.2のタグ解決規則に従う場合に値がどう異なるかを確認できます。構文検証ではなく、意味の差を調べます。
ブラウザー内でローカルに処理します。ファイルがアップロードされることはありません。
使い方 ツール
- YAMLを貼り付けるか.yaml/.ymlファイルを読み込みます。データはブラウザーから外へ送信されません。
- 「YAMLを確認」を選びます。
- 指摘された値ごとにYAML 1.1と1.2での意味と影響を確認します。
- 提案された移植可能な表記を使うか、曖昧さを除いた修正版全体をコピーします。
前提条件
- 特定ライブラリの実動作ではなく、公表された2つのスキーマ(YAML 1.1のtag:yaml.org,2002型とYAML 1.2 Core Schema)を比較します。実際のパーサーは異なり、たとえば一般的なPyYAML SafeLoaderは文書がYAML 1.2を宣言していても1.1式の解決を適用します。
- 引用符で囲まれていないplainスカラーのみ検査します。`yes`のようにすでに引用された値はどのスキーマでも曖昧でなく、指摘しません。
- 入れ子を含む`key: value`形式のマッピングを認識します。flow形式コレクション(`{a: 1}`)、ブロックスカラー(`|`、`>`)、アンカー・エイリアスは対象外です。
出典と参考データ
方法論
文書中の各plainスカラーをYAML 1.1のタグ解決正規表現とYAML 1.2 Core Schema正規表現で個別に解決します。型または値が異なる場合に指摘します。真偽値・nullの不一致は真偽判定を暗黙に逆転させるため「問題となる可能性が高い」、数値・タイムスタンプの不一致は値や型を変えるため「要確認」として示します。
計算例
有名な「Norway問題」
入力項目: country: NO
結果: YAML 1.1ではNOを真偽値false、YAML 1.2では文字列「NO」と解釈します。問題となる可能性が高い差として指摘し、`country: 'NO'`を提案します。
先頭ゼロ付き数値
入力項目: retries: 0123
結果: YAML 1.1では0123を8進数(83)、YAML 1.2では10進数(123)と解釈します。同じ文字列が異なる数を意味します。
実用的なアドバイス
- 文字列のままにしたい値が真偽値、null、数値と誤認される可能性がある場合は引用符で囲みます。国コード(NO、ON)、バージョン風文字列、yes/no/on/offがよくある例です。
- パーサーを管理できる場合は、ライブラリの歴史的な既定値に頼らずYAML 1.2 Core Schemaの動作を明示してください。
よくある間違い
- 目視で正しく見えるYAMLならどこでも同じように解釈されると思うこと。曖昧な値は一見普通に見えるものです。
- `%YAML 1.2`ディレクティブだけで十分と思うこと。一部の一般的なパーサーはこれを完全には尊重せず、1.1式のスカラー解決を続けます。
よくある質問
なぜ`enabled: yes`がtrueになるのですか?
YAML 1.1の真偽値語一覧では、大文字・小文字を問わず`yes`をtrueに解決します。YAML 1.2 Core Schemaが真偽値として認識するのはtrue/falseだけなので、同じ文字列は`yes`という文字列になります。
YAMLのNorway問題とは?
ノルウェーのISO国コードNOは、YAML 1.1でfalseとして認識される語でもあります。そのため引用符のない`country: NO`は、1.1パーサーでは`country: false`に変わります。
値を引用符で囲めば常に安全ですか?
はい。引用されたスカラー(`"yes"`、`'NO'`)はすべてのYAMLスキーマで明示的な文字列になります。このツールはすでに引用済みの値を指摘しません。
PyYAMLが`yes`や`no`を真偽値にするのはなぜですか?
一般的なPyYAML SafeLoaderはYAML 1.1式の真偽値解決を適用し、plainな`yes`をtrue、`no`をfalseとします。そのため`country: NO`は真偽値として読み込まれる場合がありますが、YAML 1.2 Core SchemaではNOは文字列です。このツールは公表スキーマ規則を比較するもので、PyYAMLや特定ローダーの設定を実行・検証しません。
最終確認日: 2026-09-25
完全なYAMLパーサーではなく、スカラー解決チェッカーです。flow形式、ブロックスカラー、アンカー/エイリアス、マージキーは解析しません(より広い検査にはYAML Cross-Runtime Preflightを参照)。また公表スキーマ同士を比較し、仕様と異なることもある個別ライブラリの実動作は再現しません。
テーマとツールの設定、保存済みリストと最近使用したリストは、このブラウザー内にのみ保存されます。