このCFPは大阪Ruby会議02に採択されました。
発表の題目
Suppress warnings
発表の概要
Rubyを-w
オプション付きで実行したことはありますか?
このオプションをつけてRubyを実行すると、様々なRubyの警告が表示されるようになります。
このトークでは、この警告の意味や消し方、警告によって見つかったバグなどを紹介します。 このトークによって世界のRubyコードから警告が減ってくれれば幸いです。
内容の解説
まず、Rubyの警告について一般的な説明をします。
-w
オプションの使い方や、代表的な警告の例を示します。また、RuboCopといった静的解析ツールとの差分も説明します。
そのあとに警告を消す具体的なパッチを元に、その警告が得られた時の対応方法や、見つかったバグなどをいくつか解説します。 たとえば次のようなパッチを参考に解説をします。
- https://github.com/cookpad/rrrspec/pull/76
- 修正簡単初級編
- https://github.com/rouge-ruby/rouge/pull/1197
- 沢山の警告を修正し、かつバグの修正までしている結構大物PRになりました
- https://github.com/ruby/irb/pull/18
- Rubyのコアに送ったパッチの例
- https://github.com/thoughtbot/capybara-webkit/pull/1068
- 結構バグってた例
- https://github.com/whitequark/parser/pull/378
- minitestだとduplicated methodが致命的になる例
そして、警告を消すパッチを実際に送るとなった時の方法や注意点なども解説します。 警告を消すパッチは問題がわかりやすく修正もそこまで難しくないものが多いながら、放置されているものが多いのも現状です。 そのため、OSS開発に参加する足がかりとしては良いものだと思っています。 そのような人に向けて、警告を消すパッチを書く基礎を伝えたいなと思います。
また、どのタイミングで話すかは決めていませんが、警告を消すことの意味についても話します。 警告を消すことは単に静かになるだけではなく、本当に警告したいものを隠さないようにするのが一番の大きな意味だと思います。いわゆる割れ窓理論です。
下にスライドの下書きを添付します。1
https://docs.google.com/presentation/d/1baj2LEmSceqXR7fsjwT4l9leT6uMAvCcLX9olyYaOAg/edit?usp=sharing
20分枠で申し込んでいますが、枠の調整が必要であれば10分でも30分でも話す内容を調節できると思います。
技術的面白さ
警告を見るようになると色々なことに気が付きます。
たとえば、警告に目を光らせているとRubyという言語の変化を感じることができます。 flip-flop演算子への警告はRuby 2.6で追加されましたが、2.7では削除される見通しです。 https://github.com/oss-gate/feedback-points/issues/2 また、「shadowing outer local variable」の警告はRuby 2.6から削除されています。https://bugs.ruby-lang.org/issues/12490 ほかにも「instance varibale @hoge not initialized」の警告は、将来的に未初期化のインスタンス変数へのアクセスを禁止したいという思惑があると聞いたことがあります(ソースなし)
また、警告と向き合うことと、それを解消していくことも面白いです。 単に必要のないコードが警告を出しているだけならそれを消すだけですが、警告がバグを教えてくれている場合はそのバグを直す必要があります。 例えば https://github.com/rouge-ruby/rouge/pull/1197 などは、全然自明じゃない警告を沢山直す必要があって大変でしたが、その分意味のある修正ができてとてもやりがいがありました。
「Rubyの警告」というテーマは地味ですが、向き合ってみると案外技術的に面白いのではないかなと思います。
発表時間
20分
-
本番用のURLなので、URLの先はCFP時点の内容ではなく現時点で最新のスライドです。↩