Rubyはコンパイルすることなく、即座に実行できる言語ですが、実際は構文解析などコンパイラ的な処理を行ってから実行されます。
コンパイラフェーズで出される警告は特に重要で、その大多数が曖昧な書き方ゆえ、さまざまな解釈の中から一つを選択したときに出されます。
例えば、次のような例はコンパイル時に警告が出ます
"808".split /0/
後ろの/0/
は正規表現をsplitメソッドの引数に渡したつもりですが、/
が割り算演算子に見えなくもありません。
スポンサーリンク
rubyでは引数をかっこで囲む必要はありませんが、あいまいさを避けるために、かっこで括るといいです。
"808".split(/0/)
同じような例ですが、あと二つ示しておきます。いずれもかっこで括るとあいまいさを避けることができます。
dirs = ['usr', 'local', 'bin'] File.join *dirs # --> File.join(*dirs) dirs.map &:length #--> dirs.map(&:length)
いずれも掛け算演算子、and演算子に見えなくもないですね。
このほか、よくある警告として、定義されているが使われない変数が存在しているとき、ループ内のローカル変数をループ外でも使っているときなどがあります。
これらの警告はRubyが僕たちのコードを意図したとおりに実行してくれるために解消しなくてはなりません。
最後に、これらの警告を実行時に表示する方法を以下に示します。
- コンパイラ時警告
コンパイラ時警告を出すには、rubyスクリプトの実行時に-wオプションを渡すことで可能になります。
ruby -w script.rb
しかし、webサーバやタスク実行時にはこのオプションを渡すことができないので、代わりに、RUBYOPT環境変数に-wを渡すことで可能になります。
- 実行時警告
実行時警告を表示するにはグローバル変数$VERBOSE(別名$-w)にtrueをセットすることで可能になります。
falseをセットすると警告の数が減り、nilをセットすると警告は表示されなくなります。

- 作者: Peter J. Jones,arton,長尾高弘
- 出版社/メーカー: 翔泳社
- 発売日: 2015/01/09
- メディア: 大型本
- この商品を含むブログ (13件) を見る

- 作者: 高橋征義,後藤裕蔵,まつもとゆきひろ
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2016/02/26
- メディア: 単行本
- この商品を含むブログ (2件) を見る

Ruby on Rails 5アプリケーションプログラミング
- 作者: 山田祥寛
- 出版社/メーカー: 技術評論社
- 発売日: 2017/04/14
- メディア: 大型本
- この商品を含むブログを見る