YAML の文法をチェックする (Ruby)
Ruby
Published: 2020-01-14

やったこと

YAML の文法が正しいかどうかを確認する方法を調べました。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

調査

正常な YAML

sample.yml

aaa:
  bbb: 111
  ccc: 222
$ ruby -r yaml -e 'YAML.load_file "sample.yml"'

特に何も表示されません。

壊れている YAML

sample2.yml

aaa:
  bbb: ccc:::
  ccc: 222
$ ruby -r yaml -e 'YAML.load_file "sample2.yml"'
Traceback (most recent call last):
	7: from -e:1:in `<main>'
	6: from /Users/xxxxx/.rbenv/versions/2.6.3/lib/ruby/2.6.0/psych.rb:577:in `load_file'
	5: from /Users/xxxxx/.rbenv/versions/2.6.3/lib/ruby/2.6.0/psych.rb:577:in `open'
	4: from /Users/xxxxx/.rbenv/versions/2.6.3/lib/ruby/2.6.0/psych.rb:578:in `block in load_file'
	3: from /Users/xxxxx/.rbenv/versions/2.6.3/lib/ruby/2.6.0/psych.rb:277:in `load'
	2: from /Users/xxxxx/.rbenv/versions/2.6.3/lib/ruby/2.6.0/psych.rb:390:in `parse'
	1: from /Users/xxxxx/.rbenv/versions/2.6.3/lib/ruby/2.6.0/psych.rb:456:in `parse_stream'
/Users/himejima/.rbenv/versions/2.6.3/lib/ruby/2.6.0/psych.rb:456:in `parse': (sample2.yml): mapping values are not allowed in this context at line 2 column 13 (Psych::SyntaxError)

SyntaxError が発生しました。

コマンドの意味

-r はライブラリを require します。

-e はコマンドラインで実行する時に使います。

抜粋

$ man ruby
...

-r library     Causes Ruby to load the library using require.  It is useful when using -n or -p.

-e command     Specifies script from command-line while telling Ruby not to search the rest of the arguments for a script file name.

参考