始めに

こんにちは、enzaプラットフォーム事業本部でSREチームのエンジニアをやっている橘田です
こちらは、RubyKaigiTakeout2021 の3日目の速報記事です。

1日目の午前の速報記事はこちら
1日目の午後の速報記事はこちら
2日目の午前の速報記事はこちら
2日目の午後の速報記事はこちら

Use Macro all the time ~ マクロを使いまくろ ~

Rubyでマクロを使えるようにした話で、どのようにRubyでマクロを実装していったかの解説
Ruby の構文から抽象構文木(AST)に変換して、ASTを変換して新たなRuby構文を生成することをマクロと定義して、そのようなことを行うライブラリとしてRenseiKenmaを作成したようです。
このライブラリを使うと特定のブロックの中だけマクロ適用できて一部のみマクロでの変換をすることができそうですね
ASTからASTを変換しているので内部の黒魔術感が強くて楽しいですが、何をしているかをしっかり把握しないと怖い反面もあります。ただし楽しい
Refinements で計算が重いものを使っていたりするので、特定条件かで何かしら見たい時ぐらいに使うには良さそうでしょうか。デバッグであったり、何かしらの条件で見たいものが増える場合などですかね
Macro自体はMatzはRubyに入れる気は現在はないようですが、こういう話はやはり面白いですね
ただしライブラリ自体の変換率は現状100%ではないようなので注意は必要でした

Charty: Statistical data visualization in Ruby

データ可視化のためにデータグラフをRubyで作成するためのChartyというライブラリを作成したお話について
なぜChartyを作ったのかは既存のライブラリでは数値とそれに合わせての平均値を全て入力値として用意しなければいけないが、Chartyではグルーピング行い、Charty内部で計算をしてくれる
Chartyは統計データを整形することに力を入れていて、表示に関しては別のライブラリに移譲している。それによって表示したい内容によって表示側を切り替えることによって対応することができる
人が使いやすいように設計されていて、出したい内容は表示のバックエンドに引き渡せるのでとても良さそうでした

Dive into Encoding

文字コードで絵文字を表示しようとしたときにバグを踏んで、そこからRubyの文字コードを調べだした話
実際の文字コードを作成した話ですが、文字コードは何というところから、Rubyで文字コードを作るために必要なものはなんなのかというのを細かく説明している内容なのでスライドや実際に聞いてみると文字コードについて理解ができると思います
作成された文字コードのIROHAはこちらにあるようなので、ソースコードも見てみると良さそうです

How to develop the Standard Libraries of Ruby?

Rubyのデフォルトライブラリを開発していくにはどうすれば良いのかっというお話し
Ruby3.0でRubyの標準機能から分離できるものは Standard Libraries、Default Gemsへと追い出しが完了した
これは必要なものはプログラマ自身がインストールするようにでき、また脆弱性が発生した場合にはRubyのバージョンアップはコストが高いが、ライブラリへと移行することによってコストを下げられるためにである
この追い出しには実際にどれだけ使われているのか、どれくらい費用対効果があるのかを考えて実施しており、消したいけれどもユーザーの既存のソースコードに多大な影響があるものはそのまま残していたりする
Default GemsもRubyのリポジトリと同じ場所にあり、開発自体も変更をもらいレビューをしてマージされている。Default GemsはGithub上で管理が実施されている
Githubで管理されていて気軽に参加できるのでチェックしておくと良さそうですね

Ruby, Ractor, QUIC

WebRTCやWebSocketの後継としてWebTransportの仕様が策定中である
WebTransportはHTTP3で動く想定で、HTTP3はQUICで動くように現状は仕様が策定中である
RubyでQUICは実装できるのか、そしてどのように実装していくのか
QUICの通信でパケット仕様の内容。そしてRactorを使用するとRactor::IsoloationErrorで既存のライブラリは使えない。では既存ライブラリを使わずにQUICの通信を受信するために実装した内容が語られています
実際にできたのかどうかはリンク先を見ていただいて楽しんでいただければと思います

Red Arrow – Ruby and Apache Arrow

Apache Arrow を Rubyから使えるようにする Red Arrow の話
データ処理をRubyを使いたかったのがモチベーションで、プロジェクトはRed Data Tools Project
Apache Arrow は高速にデータをロードできて大容量データを処理することができるようです。詳しくはこちらを確認すると良さそうです
Red Arrow の使い方に関してはスライドで丁寧に解説されていますので、そちらを確認していただければ触ることができるのではないでしょうか
またデータ処理に役立ちRuby3の機能としてMemoryViewやRactorなどの紹介もされました
データ処理は重要な要素ですので試してみるのはいかがでしょうか

Beyond Ruby 3.0

Ruby 3.0 がリリースされての振り返りの話
Ruby 3.0は互換性を重視している。プログラマは新しいことが大好きだが苦しい思いをしたいわけではないので互換性は重要
ただしバグや直しておかないといけない仕様などを直さないといけないので非互換の部分は発生してしまっている
Ruby Signatures, TypeProf, Steep などのプログラマがプログラムを書くのが楽になる。拡張するための機能などを追加していった
Rubyを作った当初とは違いconcurrencyが重要になった、現在では多コアCPUが一般的でマルチコアを使わないといけない。そこでAync FiberとRactor などが追加されていった
速度は重要で、速度の改善を実施して Optcarrot のベンチマークにて3倍の速度を達成したが、Railsアプリケーションでは3倍ほど早くはなってはいない
Ruby3.1は現状のバギーなところを直していって使い勝手をよくしていき、安定させていきたいっとのことでした

最後に

三日間お送りしたRubyKaigiTakeout2021の速報記事ですが、この辺りでお別れです
三日間お付き合いいただきありがとうございました。皆様お疲れ様でした
ドリコムでは一緒に働くメンバーを募集しています!
募集一覧はコチラを御覧ください!

About the Author

橘田 隼一

Junnichi Kitta

サーバーサイドエンジニア

2017年ドリコム入社。サーバーサイドにてアプリケーションの開発をしています。
RubyとElixir界隈に出没する錬金術師