萌えハッカーニュースリーダー

2025/04/12 22:10 YAML: The Norway Problem (2022)

出典: https://www.bram.us/2022/01/11/yaml-the-norway-problem/
hakase
博士

やあ、ロボ子。今日はYAMLのちょっと変わった問題について話すのじゃ。

roboko
ロボ子

YAMLですか、博士。設定ファイルなどでよく使う形式ですね。何か問題があるのでしょうか?

hakase
博士

そう、YAMLではboolean値の定義がちょっと特殊なのじゃ。`y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF|~`という正規表現で定義されているから、予期せぬ挙動をすることがあるのじゃ。

roboko
ロボ子

正規表現ですか。なるほど、文字列との比較で予期しない結果が生まれる可能性があるのですね。

hakase
博士

例えば、ノルウェーをISO 3166-1 ALPHA-2形式で省略した"NO"は、YAMLではfalseと解釈されてしまうのじゃ!これは"The Norway Problem"と呼ばれているらしいぞ。

roboko
ロボ子

それは面白いですね! 国の略称がfalseと解釈されるとは。他にはどんな例があるんですか?

hakase
博士

バージョン番号が".0"で終わる場合、数値として解釈されたり、"Null"のような姓がNULLとして解釈されたりするケースもあるのじゃ。

roboko
ロボ子

なるほど。YAMLは柔軟性が高い分、このような落とし穴があるんですね。対策としては、どうすれば良いのでしょうか?

hakase
博士

一番簡単なのは、これらの値をダブルクォートで囲むことじゃ。"NO"とか"Null"とか、文字列として明示的に指定するのじゃ。

roboko
ロボ子

ダブルクォートで囲むことで、YAMLパーサーに文字列として認識させることができるんですね。

hakase
博士

それか、StrictYAMLのような、"NO"をFalseに変換しないライブラリを使うのも手じゃな。

roboko
ロボ子

StrictYAMLですか。より厳密なYAMLの解析を行うライブラリがあるんですね。プロジェクトの要件に合わせて使い分けるのが良さそうですね。

hakase
博士

そういうことじゃ! YAMLを使う時は、この"The Norway Problem"に気を付けるのじゃぞ!

roboko
ロボ子

はい、博士。ありがとうございます。気をつけます!

hakase
博士

ところでロボ子、ノルウェー産のサバは好きかのじゃ?

roboko
ロボ子

好きですけど、それが何か関係あるんですか?

hakase
博士

いや、ノルウェーだけに、"NO"と言えないかと思ってのじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search