irb の TypeCompletor を Windows で試してみる

RubyKaigi 2024 のWriting Weird Code @tompngExploring Reline @ima1zumi で紹介されている新しい irb の補完機能がよさそうなので手元でもインストールしてみた。

Ruby 3.3 のインストール

3.2 でも gem update irb とかすれば動くらしいけどせっかくなので Ruby 3.3 を入れる。

https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.1-1/rubyinstaller-devkit-3.3.1-1-x64.exe をダウンロード&インストール。 Ruby 本体は普通のインストーラが起動するので普通に C:\Ruby33-x64 に入れる。

次に MSYS2 と DevKit も入れる。

Image from Gyazo

Which components be shall be installed? If unsure press ENTER [1,3] が出たら 1, 3 を入力してインストール。

Image from Gyazo

まで来たら成功なので ENTER を押して終了。

ReplTypeCompletor gem のインストール

Windows版だと? Ruby 3.3 でも ReplTypeCompletor は標準でインストールされていないようなので事前にインストールしておく。

PS> gem install repl_type_completor

.irbrc の設定

.irbrc に以下の設定を追加。(設定しない場合は irb --type-completor で起動すれば OK)

IRB.conf[:COMPLETOR] = :type

irb を起動&設定の確認

irb を起動する。

PS> irb

irb_info を入力して設定が Completion が ReplTypeCompletor になっていることを確認する。

irb(main):025> irb_info
Ruby version: 3.3.1
IRB version: irb 1.11.0 (2023-12-19)
InputMethod: RelineInputMethod with Reline 0.4.1
Completion: Autocomplete, ReplTypeCompletor: 0.1.6, Prism: 0.19.0, RBS: 3.4.0
.irbrc path: C:/Users/ongaeshi/.irbrc
RUBY_PLATFORM: x64-mingw-ucrt
East Asian Ambiguous Width: 1
Code page: 932
=> nil

ReplTypeCompletor による補完を試す

配列の中身が String であることを認識して、ブロック引数の型も理解してくれるのが便利。(l を入力すると Sting のメソッド群がちゃんと出てくる)

Image from Gyazo

配列内に数値と文字列を混合すると Integet と String のメソッド群が両方表示される。(つまり Array<Integer|String> が解析できている?すごい!)

Image from Gyazo

もう一度 TAB を押すとドキュメントも閲覧できる。TAB を押す度に次の候補に移動する。Shift + TAB で前の候補に戻る。

Image from Gyazo

バグ

WindowsPowerShellコマンドプロンプト環境だと Alt+d でドキュメントを拡大したときに操作ができなくなるバグがあるようなのでそこは押さないように注意。

自分が書いたライブラリを読み込む

require のパスも補完される。

Image from Gyazo

ドキュメントや RBS が無くてもメソッド一覧は表示してくれる。

Image from Gyazo

生成したオブジェクトの型もちゃんと追跡できている。

Image from Gyazo

jc.nodes の戻り値は Array<JsonCanvas::Node> なんだけどさすがにここまでは追跡できない模様。(pu を入力したのに push が候補に出ない。) これも RBS 書けば取得できるようになりそう。(rbs-inline)を使って書くのがいいかしら。

Image from Gyazo

まとめ

ReplTypeCompletor による補完を使うと割といいところまで補完してくれることが分かりました。

TAB 押したときに閲覧できるミニドキュメントは閲覧できるし、他の操作はサクサク動いて快適です。irb 内で require したライブラリのメソッド一覧やドキュメントがさっとみられるのも便利。

Image from Gyazo

自分が書いている gem もちゃんと型を記述すれば irb でサクサク補完できるようになりそうなので RBS を書くメリットが分かりやすくなるのがよかったです。(特に各メソッドの戻り値の型だけでも明示しておくとメソッドチェインが途切れなくなってよさそう)。

次は rbs-inline を試してみようと思います。