本セッションの登壇者
セッション動画(YouTubeチャンネル登録もお願いします。)
それではRuby最新動向という話をさせていただきます。
僕はうなすけといって、フリーランスでRubyを7年くらい書いてます。あと、Kaigi on Railsというイベントのオーガナイザーをやったりもしています。
Rubyの最新動向を追っかけていく前に、まずいったん、これまでにRubyに入った新しめの変更についておさらいしようと思います。
Ruby 2.7からRuby 3.0にかけての変更
まず2.7から3.0で入った変更ですが、2.0に比べてRuby 3x3というスローガンが掲げられたうえで、Ruby 3.0では実行速度が当時のおよそ3倍になりました。あと、Ractorという新しい並列処理の仕組みが導入されました。また、型注釈の導入であったり、破壊的な変更としては、キーワード引数の分離などがありました。
詳しくはRuby公式のリリース情報をご参照ください。
Ruby 3.0からRuby 3.1にかけての変更
3.0から3.1でどのような変更が入ったかというと、まずYJITというものが導入されました。Ruby 2.6で導入されたJITなんですが、これはRailsなどのでっかいものにはあまり効きづらかったのですが、ShopifyがRailsによく効くようなJITであるYJITを開発して、これがRuby本体にマージされました。
次に、debug.gemというまったく新しく書き直されたデバッガが導入されました。これによって、IDEサポートであったりとか、そもそもデバッグの速度が向上したりとか、あと将来的にRactorのサポートとかもされることになっています。
あと、IRBのオートコンプリートとJavaScriptっぽいHashの省略記法については、この次で画像で見せたいと思います。
詳しくはRuby公式のリリース情報をご参照ください。
IRBのオートコンプリートなんですけど、今ここで"TechFeed"という文字列に対してTabキーを押すと、このstringのインスタンスに対して呼び出せるメソッドの一覧が出てきて、かつ、ドキュメントがあれば、そのドキュメントも横にいっしょに出してくれる、というめちゃくちゃ便利な機能が入っております。
JavaScriptっぽいHashの省略記法なんですけど、これはHashのkeyとvalueが同じ名前の場合にvalueの方を省略できる記法が入りました。JavaScriptを書いている方は、よく書きなれている記法なんじゃないかなと思います。
Rubyの最新動向
というわけで最新動向に入っていきますが、ここで話すのは主に3つ - Rustとの関係性、Web Assembly、型についてです。
○Rustとの関係性
まず、Rustとの関係性なんですが、3.1で導入されたYJITは最初C言語で書かれていたのですが、3カ月かけてRustにすべて書き直されました。Rustで書き直すにあたって、どういう目的でRustにしたのか、(書き直すうえで)困難だったことなどはShopifyさんがtech blogを出しているのでそちらをご参照ください。
あと、Rubyの拡張ライブラリですが、これまではC言語やC++で書くことが多かったのですが、公式にRustで書けるようなツールがマージされたので、おそらくRuby 3.2ではRustを使った拡張ライブラリが書けるようになるかと思います。
○WebAssembly
WebAssemblyについてですが、CRubyのプラットフォームとしてWASIを対象にすることができるようになりました。これによって、ブラウザ上でCRubyのコードが動くようになりました。これが今年(2022年)の1月のことです。
どういったコードが導入されたかというのかここから確認できますし、実際にRuby公式ホームページから試せるTryRuby playgroundであったりとか、Ruby on BrowserというWebアプリを開発している方がいるので、ここで実際に試すことができるようになっています。
○型
そして型なんですけど、これは絶賛開発中というステータスになると思います。
以前、銀座RailsでPockeさんが発表してくださった資料を引用するんですけど、PlainなPOROなら、小さなRubyコードならうまくいくのですが、Railsくらい大きくなるとまだまだエラーが多くてみんなの力が必要だなっていうところで、課題が多いというステータスになっています。
まとめ
まとめますと、RustとRubyとの関係性ができはじめてきました。WebAssemblyによってRubyの活躍の場がこれから広がっていくんじゃないかなと思います。
型については、型による快適な開発環境を獲得していくために、みんなでがんばって型注釈を整備していきましょうね、というステータスになっています。
僕の発表は以上です。ありがとうございました。