mattintosh note

どこかのエンジニアモドキの備忘録

PHPでYAMLファイルのシンタックスチェックをする

PHP アプリケーションが使用している YAML ファイルに何らかの誤りがあってアプリケーションが正しく動いていない気がするのでシンタックスチェックを行うことにした。YAML のチェックに yq 入れるのもなぁ…ということで PECLYAML ライブラリを使うことにした。

YAML ライブラリには yaml_parse()yaml_parse_file() があるが今回は yaml_parse_file()コマンドラインからファイルを引数として渡すようにする。

_IFS=$IFS IFS=$'\n'
set -- $(find /var/www/html -iregex ".*\.ya?ml")
IFS=$_IFS

php -r 'foreach ($argv as $arg) { if(!file_exists($arg)) continue; $data = yaml_parse_file($arg); if ($data === false) echo $arg . PHP_EOL; }' "$@"

そのままだとパースに失敗したエラーメッセージとファイル名が出てくる。PHP標準エラー出力/dev/null に捨てればエラーのあったファイル名だけが出てくる。

もうちょっとちゃんとしたアプリケーションっぽく書けるんだろうけどやりたいことは出来たので今日はこの辺で。