Slide 1

Slide 1 text

STORES 株式会社 ruby/irbへのコントリビュートと愉快な仲間たち (またはRuby 3.3リリースを少し平和にしたかもしれない貢献のアピール) @hogelog (Sunao Komuro) [WED | STORES | マイベスト] RubyKaigi 2024 Wrap Party STORES, Inc.

Slide 2

Slide 2 text

だれ? 2 - @hogelog (GitHub, Twitter, …) - 小室 直 (Sunao Komuro) - Software Engineer at STORES, Inc. - I like Ruby and programming - RubyKaigi 2024ではLTで話してきました

Slide 3

Slide 3 text

今日はなすこと 3 私にとってのRubyKaigi 2023 Kaigi Effectで発生したrubyへのコン トリビュートをアピールしたい、今更ながら紹介させてください!

Slide 4

Slide 4 text

今日はなすこと 4 - ruby/irbへのコントリビュート - ruby/ruby, ruby/readline, rubygems/rubygemsへの コントリビュート

Slide 5

Slide 5 text

ruby/irbへのコントリビュート

Slide 6

Slide 6 text

RubyKaigi 2023 (5/11 - 5/13) 6 - RubyKaigiが開催される 🔜 Kaigi Effectが発生する

Slide 7

Slide 7 text

Kaigi Effectとは 7 - RubyKaigiの熱気にあてられ発生する人間の行動・情動(hogelog解釈) - https://x.com/kakutani/status/1452993581996728328

Slide 8

Slide 8 text

@hogelogのRubyKaigi 2023 Kaigi Effect 8 - master ruby生活 - rbenv global ruby-dev - Docker開発環境もmaster ruby - master ruby生活をしていると最新のruby、ライブラリが使える - 最新の機能・不具合をいち早く体験できる!

Slide 9

Slide 9 text

Fix failure of more command with -R option 9 - https://github.com/ruby/irb/pull/781 - moreコマンドしかない環境でのirbページャ起動エラーの修正

Slide 10

Slide 10 text

irb開発中に出会った不具合 10 - https://github.com/ruby/irb/issues/474 - irb履歴読み込み時のエンコーディング不一致エラー不具合 - 育ったirb履歴が消し飛んでしまい悲しい

Slide 11

Slide 11 text

Scrub past history input before split 11 - https://github.com/ruby/irb/pull/795 - irb履歴読み込み時の無効な文字の扱いの改善

Slide 12

Slide 12 text

ruby/irb開発中に気付いたruby/relineの挙動 12 - https://github.com/ruby/reline/issues/615 - relineに不正な文字列を渡すとエラーがおきる挙動 - 不具合? 仕様? - readlineでは許容されていたが、relineだとエラーになる

Slide 13

Slide 13 text

reline, readlineの挙動の違いを色々試していると 13 - reline, readlineの挙動の違いを試していると、ruby 3.3リリース に関わりそうな不具合にふと気づき……

Slide 14

Slide 14 text

ruby/readline, ruby/ruby, rubygems/rubygemsへの コントリビュート

Slide 15

Slide 15 text

ruby 3.3からのext/readlineの削除 15 - Ruby 3.3では添付ライブラリext/readlineが削除されるので、 readlineを使いたい人はgem install readline-extして readline-ext gemが使うようアナウンス

Slide 16

Slide 16 text

reline、readline、readline-ext、ext/readlineの関係 16 - reline gem - Pure Rubyで実装されたモダンなReadline互換ライブラリ - readline-ext gem - GNU Readline、Editlineのバインディングライブラリ - Ruby 3.2以前は標準添付ライブラリとして添付されていた - readline gem - readline-extがあればreadline-extを、readline-extがなければreline を読み込む抽象化ライブラリ - Ruby 3.3以降も標準添付され続ける - ext/readline - Ruby 2.6以前の標準添付ライブラリ - Ruby 2.7以降におけるreadline-ext gemとほぼ同一

Slide 17

Slide 17 text

2023年12月頃に気づいた不具合 17 - gem install readline-extしてもreadline-ext gemが使えない! - Ruby 3.3では添付ライブラリext/readlineが削除されるので、 readline-ext gemが使えないと (relineではない) readlineを使え なくなってしまう $ rbenv shell 3.3.0-rc1 $ gem install readline-ext ... 1 gem installed $ ruby -rreadline -e 'p Readline' Reline

Slide 18

Slide 18 text

抽象化ライブラリreadlineはどのようにreadline-ext, relineをラップしているか 18 - require ‘readline’ で呼ばれるreadlineのコードは実質以下のみ begin require 'readline.so' rescue LoadError require 'reline' Readline = Reline end ?

Slide 19

Slide 19 text

require ‘readline.so’ とは 19 - require ‘readline.so’ or require ‘readline.o’ でパスに含まれたダイナミッ クライブラリreadline.[so, dll, bundle, …] をロードする - この仕様は ruby/ruby load.c を読み把握 - コメントが仕様を正しく説明していなかったので修正 - [DOC] Fix RDoc to match actual Kenrel.require behavior https://github.com/ruby/ruby/pull/9180

Slide 20

Slide 20 text

なぜrequire ‘readline.so’ に失敗していたか 20 - 通常のRubyプログラムに出てくるrequireは(Rubyコアに実装さ れたrequireではなく)rubygemsで上書きしているrequire - rubygemsはrequire ‘readline.so’を正しく解釈できていなかった - Rubyコアの挙動に合わせるなら環境に合わせダイナミックラ イブラリreadline.dll, readline.bundle, …を探さなければい けない

Slide 21

Slide 21 text

Fix readline-ext gem loading in non Unix-like environments 21 - https://github.com/ruby/readline/pull/6 - RubyGemsの挙動をふまえダイナミックライブラリの拡張子 をreadline gem側で指定するワークアラウンド

Slide 22

Slide 22 text

Support dynamic library loading with extension .so or .o 22 - https://github.com/rubygems/rubygems/pull/7241 - RubyGemsのrequireで環境ごとのダイナミックライブラリを 正しく探せるように修正

Slide 23

Slide 23 text

gem install readline-ext works fine with ruby 3.3.0 🎉 23 - ruby 3.3.0 (2023/12/25) - readlineのワークアラウンド、rubygemsの修正 - gem install readline-extでreadlineが呼べるように🎉 $ rbenv shell 3.3.0 $ gem install readline-ext ... 1 gem installed $ ruby -rreadline -e 'p Readline' Readline

Slide 24

Slide 24 text

まとめ

Slide 25

Slide 25 text

まとめ 25 - RubyKaigi 2023 Kaigi Effectでmaster ruby生活 - ふと気づいたruby/irbの不具合修正 - そこから派生しruby, rubygems, readlineなどへ多数のコントリ ビュート - Ruby 3.3でreadline-extを使いたい人が困る前に修正できました

Slide 26

Slide 26 text

RubyKaigi 2024 Kaigi Effect? 26 - irbはコントリビュートしがいがあるのでもっとやっていきたい - RubyInstaller for Windows環境のirb体験を改善したい - 他 - metrics_monitor gemもLT感想などももらい、やらねばの気持ち - https://x.com/hogelog/status/1791621352568520941

Slide 27

Slide 27 text

余 27 - RubyKaigi 2023は…… - https://x.com/hogelog/status /1656589285485842432 😢 - RubyKaigi 2024は行けてよかった!