RubyKaigi 2026参加レポート(加納)

Posted by Network Applied Communication Laboratory Ltd. on May 08, 2026 · 3 mins read

NaCl松江本社の加納です。
2026年4月22日(水)〜24日(金)に函館で開催された RubyKaigi 2026 に参加しました。
この記事ではRubyKaigi2026で、印象に残った3件の発表についてまとめます。

RubyKaigi2026の下調べ

本題に入る前に、弊社では月に一度「まつもとさんを囲む会」と題して、Rubyをはじめとした技術についてまつもとさんと語る会を開催しています。
4月のまつもとさんを囲む会では、RubyKaigi2026の下調べを行いそこでまつもとさんからRubyKaigi2026の印象について、以下のようにお話を伺いました。

型の話が減ったなあという印象を持った。
去年はAIに関連する発表が少なかったが、今年は多く見受けられる。きっと、生成AIの発達によりエンジニアをとりまく環境が変わってきたのだろう。

私も普段の開発で生成AIを使用するのですが、ここ1年間で開発のスタイルが大きく変わったように思います。このことから、生成AIが発達し普及する中で、Rubyにおける型の考え方はどのように変わっていくのか興味をもち、RubyKaigi2026ではRubyの型と生成AIに関連した発表を聴講しようと思い以下の発表に注目しました。

  • No Types Needed, Just Callable Method Check
  • Good Enough Types: Heuristic Type Inference for Ruby

またこれらだけでなく、個人的に興味を持ったbigdecimal/mathという数学的な機能を持つRubyのライブラリに関する発表についてもまとめます。

  • Digits, Digits, and Digits

01_RubyKaigi2026.jpg

No Types Needed, Just Callable Method Check

背景として、RBS/Steep などといったRubyの型注釈は普及してきた一方で、生成AIが普段の開発に自然に入り込んできたことにより、エンジニアを取り巻く環境が近年大きく変化しています。
発表者は、生成AIを用いることでそもそも型注釈を必要とせず高いクオリティでコーディングができるようになってきたことを述べ、RBS/SteepのようにRubyの型注釈を記述する必要性が低くなってきたことを指摘していました。

そこで、生成AIが普及してきた現代において「果たして本当に型注釈の記述まで必要だろうか?」という疑問を提起していました。
そして、Rubyの型注釈の必要性について、型があることの恩恵は最終的に NoMethodError を防ぐことに集約できるのではないかと考え、型注釈なしで NoMethodError のみを防ぐ gem として開発したMethod-Ray を紹介していました。

RBS/Steep と Method-Ray の違い

今回の発表を受けて、手元で methodray を動かしてみました。
まずはRBS/Steepの例をまとめます。

# user.rb
class User
  def greeting
    "Hello!"
  end
end

user = User.new
user.greeting.abs

RBS/Steepでは型情報を記述したrbsというファイルが必要になります。

# sig/user.rbs
class User
  def greeting: () -> String
end

steep check を実行すると、Stringabs は無いと指摘されます。

# Type checking files:

.F

user.rb:8:14: [error] Type `::String` does not have method `abs`
│ Diagnostic ID: Ruby::NoMethod
│
└ user.greeting.abs
                ~~~

Detected 1 problem from 1 file

次に、Method-Rayの例をまとめます。Method-Rayでは、注釈は必要なくMethodの呼び出しができるかをチェックします。

methodray check user.rb
user.rb:9:14: error: undefined method `abs` for String
user.greeting.abs
             ^

自分としては、型注釈を書くのはやはり面倒ではあるのでできれば書きたくないのは同感です。
そして、NoMethodError を防ぐということに焦点をおいて扱うのは悪くないなと感じ、例えば生成AIにスキルとして登録しておき、適宜実行する使い方が良いなと感じました。

Good Enough Types: Heuristic Type Inference for Ruby

本発表は、LSPサーバーに既存のWebアプリケーションでの使用方法を分析させることにより、型を推測して表示してくれるよう実装することで、RBS/Steepで型注釈を書かなくても型情報を取得できるのではないか、という考えを検証したものでした。
具体的には、既存のWebアプリケーションにおいて、あるレシーバが特定のメソッドばかりを実行しているのであれば、そのレシーバは特定メソッドが定義してあるクラスのインスタンスに違いないといった考えです。
このアプローチにより、精度はまだまだ低いもののLSPサーバーによる推測によってIDEの補完やジャンプを賢くすることができるという話でした。ダックタイピングとは逆の考え方でアプローチしていた点がユニークで面白いと感じました。

Digits, Digits, and Digits

自分は大学院生だったときに、暗号技術に関する研究をしていたため、普段から数学に興味関心を持っています。その影響もありRubyKaigi2026で一番興味を持ったのがこの発表でした。

本発表では bigdecimal/mathというRubyの数学的なライブラリを題材にして、大きな桁数計算の高速化に関する話をしていました。例えば、1の正弦関数をprecで指定した精度で計算をする場合の速度について以下のようにまとめています。

BigMath.sin(1, prec)
prec: 10,000 で 2.2s
prec: 100,000 で 45min
prec: 100,0000 で 1,000h

このように桁が増えるだけで指数的に速度が遅くなることがわかります。そこで、本発表の成果として以下のように高速化に成功したとまとめられていました。大きな高速化ですね。

prec: 10,000 で 2.2s -> 0.005s
prec: 100,000 で 45min -> 0.08s
prec: 100,0000 で 1,000h -> 1.06s

具体的な高速化の手法としては、内部で用いるBigMath.expの計算に焦点を当てて、BigMath.expの計算をテイラー展開で近似します。このとき、単純にテイラー展開による式を素直に計算すると乗算による負荷が大きくなってしまいます。そこで、BigMath.expは分割して計算できるという性質に着目し、指数的に分割して計算することにより高速化を行ったそうです。例を以下にまとめます。

x=1.234567890123456789 の小数部分を1桁, 2桁, 4桁, 8桁, ... のように指数的に分割します。
1
0.2
0.03
0.0045
0.00006789

このとき、次のように計算することで効率的に計算が可能となります。
exp(1.234567890123456789) = exp(1) * exp(0.2) * exp(0.03) * exp(0.0045) * exp(0.00006789)

また、分割のテクニックとして以下を述べていました。

  • 大きい数に小さい数を順番に掛けていくと最適化の余地が小さいこと
  • 同じくらいの大きさ同士を先に掛けていくと速いこと

こういった計算ロジックの工夫みたいな話は面白く興味をくすぐられます。日夜、高速化の求められる暗号分野においても、結局ボトルネックは乗算の負荷になりがちなので、Rubyの数値計算の文脈で同じ匂いを感じられたのが良かったです。

そして発表の最後に、指数的に分割していくと速くなるという今回の考え方は、実は既に知られていた手法であり車輪の再発明だったということが述べられました。大学院で経験した研究論文の世界だと車輪の再発明はタブー扱いですが、決して悪いことではなくむしろRubyと楽しく戯れていた本発表は、会場では肯定的に受け止められ賞賛さえされているように感じました。

感想

RubyKaigi2026を通じて、生成AIが発達し普及する中で、Rubyの型に対する考え方が変わってきたように思えました。自分も普段から生成AIを開発で使う中で、型に限らず開発環境の変化には柔軟に対応していきたいと思うようになりました。
そして、Digits, Digits, and Digitsのように、例え車輪の再発明だったとしてもRubyとの戯れを楽しむことが尊重されているRubyKaigiの雰囲気がとても心地よく、一人のエンジニアとしてそういったモチベーションを持つことが大切なんだと改めて気付かされた良い機会となりました。
僕もイケてるRubyistになれるよう精進したいと思います。興味深く面白い発表をありがとうございました。

02_panel.jpg