Rubyの-cオプションを使うと、スクリプトを実行せずに構文だけをチェックできる。
基本的な使い方
ruby -cにファイルを指定すると、構文が正しければSyntax OKと表示される。
$ cat ok.rb
def hello
puts "Hello, World!"
end
$ ruby -c ok.rb
Syntax OK
構文エラーがある場合はエラー内容が表示され、終了ステータスも1になる。
$ cat ng.rb
def hello
puts "Hello, World!"
$ ruby -c ng.rb
ruby: ng.rb:2: syntax errors found (SyntaxError)
> 1 | def hello
| ^~~ expected an `end` to close the `def` statement
> 2 | puts "Hello, World!"
| ^ unexpected end-of-input, assuming it is closing the parent top level context
$ echo $?
1
終了ステータスで判定できるため、CIやGit hookで構文チェックを組み込むのに使いやすい。
標準入力からチェックする
ファイルを指定しない場合は標準入力を読み込んでチェックする。
$ echo 'puts "hi"' | ruby -c
Syntax OK
複数ファイルは一括チェックできない
ruby -cに複数のファイルを渡しても、チェックされるのは先頭のファイルのみである。
$ ruby -c ok.rb ng.rb
Syntax OK
上記の例ではng.rbは構文エラーを含むが、ok.rbのみがチェックされてSyntax OKと表示される。2番目以降の引数はチェック対象ではなく、スクリプトに渡すARGVとして扱われるためである。
ディレクトリ配下の.rbファイルをまとめてチェックしたい場合は、findとxargsを組み合わせて1ファイルずつruby -cを実行する。
$ find . -name "*.rb" | xargs -n1 ruby -c
Syntax OK
ruby: ./ng.rb:2: syntax errors found (SyntaxError)
> 1 | def hello
| ^~~ expected an `end` to close the `def` statement
> 2 | puts "Hello, World!"
| ^ unexpected end-of-input, assuming it is closing the parent top level context
構文エラーだけでなく未使用変数などの警告も確認したい場合は【Ruby】-w/-Wオプションで警告を表示する を参照。
\第一線のプログラマーの行動原理を学べる!/
