pockestrap

Programmer's memo

RubyKaigi 2017 で Lint について話します。

RubyKaigi 2017 で Lint について話します。

rubykaigi.org

Lint とは

Lint というのは、バグになりうるコードを自動で検出プログラムです。

なにを話すのか

Ruby のための Lint を、どう実装するかについて話します。

Lint が検出するコードの例を一つ紹介します。

if 'str'
  do_something
else
  do_something2
end

上記のコードでは、ifの条件文内にstring literalが存在します。 そのため、この条件文は常に真に評価されるため、do_something2が実行されることは絶対にありません。

Lint はこのような間違いを検出することが出来ます。

今回の talk では、Lint はどのように「このコードに警告を出すべきか」を判断しているのか、簡単な Lint の実装と共に話します。

また、現実的に RuboCop などの Lint をどのように実装しているのかについても話します。

何故話すのか

Lint を使うことで、プログラムに含まれたバグを自動で見つけ出すことが可能になります。 そのため、Lint がより多くのバグを検出出来るようになると、Rubyプログラムに含まれたバグをより多く自動的に見つけることが出来るようになります。

今回の talk によって Lint を書く人が増えて、Lint がより便利になり Ruby プログラムを楽しく書けるようになってほしいと思っています。

どのような人のために話すのか

今回の talk は、Lint を書いたことがない人が対象です。Ruby でアプリケーションを書いているけど、Lint の実装は読んだこともないという人を想定しています。

スライド

docs.google.com

まだまだ作成途中ですが、公開しておきます。 先読みして当日の発表時により理解を深めたい方、私のトークを聞くか決めるために内容を知りたい方、同じ時間帯の他のトークを聞きたいからスライドだけ眺めたい方など、ご覧いただけたらと思います。

github.com

また、当日のデモで使う予定のコードを集めたレポジトリも公開しておきます。 ただ、この記事を書いている時点では、まだなにも push されていません。

前提知識

Lint に関する前提知識は問いません。 なにそれ? 使ったことない! といった方でも理解できる内容になっていると思います(なっていると信じています…)。

また、木構造を知っていることを一応前提知識として求めます。木構造はノードが繋がって出来ている、ぐらいの理解があれば問題ありません。
木構造 (データ構造) - Wikipedia


もし内容に興味がありましたら、9/20 の 14:40 から、Dahlia 会場までお越しください。