ドリコムのエンジニアの品田です。

こちらの記事では、RubyKaigi2018の最終日に発表されたセッションの中から2点、紹介したいと思います。

Reirb: Reborn Irb

irb作者の石塚さんの発表です。
irbは生誕20周年とのことなのですが、pry等の類似ツールが出て来たこともあり、しばらく開発がされていませんでした。
Rubyistのためのシェルであるreishを作っている際にirbと似ていることから新たにreirbとして
更新するモチベーションが出たとのことです。

reish

コンソールで実行した文字列はrubyコードに変換されて実行され、
入力されたメソッドが存在しなかった場合、OSコマンドとして実行されます。

reirb

irbに代わる新しいREPLツールです。
reishをベースにirbとして必要な機能を付与したものです。
現在実装中とのことです。

実装

字句解析を行うためにRipperを利用されています。

・トップレベルの式の識別
・ネストの深さカウント
・継続行の識別

処理が実行される単位でスレッドが作られ、実行されます。
rubyは外部からスレッドを止める手段がないため、set_trace_funcを利用して止まるように実装されています。

課題

while-do問題とおっしゃっていましたが、REPL中でwhile-do内にブロックを埋め込むと、Ripperだとdoが同一のものとして返却されるため、endの認識をする際に非常に困るという話がありました。
内部でdoは区別して字句解析しているので、同様にdoを区別できるように返せるオプション欲しいとのことです。

reirbの今後

以下機能を実現したい、とのことでした。
・コンプリーション
・m17n対応
・irbの置き換え

面白かったもの

複数行インプットを補完する機能がデモされていたのですが、REPLではなかなか見ない機能だったので
新鮮さと便利さを感じました。

Build your own tools

Refinements作者の前田さんの発表です。
新しい発表というところではなく、プログラマとしてどうありたいか、というお話でした。

ソフトウェアを作るために必要なものとして以下が挙げられました。
・モチベーション
・時間
・スキル

この中で重要なものはモチベーションであるということ、またそれは自分が使いたいと思えるものを見つけること、という話がありました。
ただ、作りたいものを見つけるのはなかなか難しく、作りたいものと使いたいものは必ずしも一致しない、とも仰っていました。
なので、小さいところから始めよう、ということでした。

何でもよいので、とりあえず動くものを作ること大事です。
車輪の再開発は悪いことではなく、必要に駆られた時にやればよいのでは、というお話でした。

テストについても少しお話がありました。
テストを書くことは最初は何も決まっていないので、ある程度できてから変更をしやすくするために書く、というモチベーションでやっている、ということでした。

自分のためのツールであれば、リスクのある開発も比較的容易にできるとお話にありました。
但し、バックアップ等保険は容易しておかないと被害を被るので、その辺は自己責任でコードを書きましょう、ということでした。

面白かったもの

技術者らしい、ないものは自分で作ろう精神の大切さを改めて再認識しました。
気持ちよくコードを書いて、楽できるツールを作っていきたくなる発表でした。

最後に

最終日ということで、このような素晴らしいカンファレンスが終わることに寂しさを感じました。
また来年もお会いしましょう!