Skip to content

なぜ新しい型チェッカーを書きはじめたのか

公開日:

東京都港区株式会社IVRyで開催された『RubyKaigi 2026 follow up』でレギュラーセッション(15分)として発表しました。

Download PDFPDF

スライドテキスト

Page 1

なぜ新しい型チェッカーを

書きはじめたのか

How I Ended Up Writing a New Type Checker for Ruby

pixiv Inc.

USAMI Kenta

2026-09-05 #rubykaigi_followup

RubyKaigi 2026 follow up

Page 2

お前誰よ

  • うさみけんた (@tadsan) / Zonu.EXE / にゃんだーすわん
  • ピクシブ株式会社 Platform Div > WebTechnology Team PHPer
  • 2012年末から現職、APIとかCIとかいろいろなところを見つめてきました
  • 最近チームが再編されてインフラっぽい仕事もしてます
  • Emacs PHP Modeを開発しています (2017年-)
  • プログラミング言語にちょっとこだわりのある素人 (spcamp2010)

Page 3

はじめましての方ははじめまして

Page 4

2014年くらいまでRuby界隈にも出入りしていました

Page 5

日本Ruby会議2011

初めて参加

Page 6

札幌Ruby会議2012

レポート班

Page 7

RubyKaigi 2013

レポート班

Page 8

RubyKaigi 2014を最後にRubyと疎遠に

Page 9

趣味でいろんな動的言語をやってます(Lisp, shell, ...)

Page 10

特に動的言語/スクリプト言語が好き

Page 11

動的言語には無限の可能性()があります

Page 12

みなさん型は書きたいですか!

Page 13

「素晴らしい」言語は世の中にいっぱいある

Page 14

動的言語でフリーダムに書かれたプロジェクトは熱的死を迎えて崩壊する

Page 15

業務で動的言語を正当化したい

Page 16

Page 17

Page 18

PHP界隈で型の話を始めて10年くらい

Page 19

Page 20

10年前は遅くてCIで使うのも非実用

Page 21

PHPでは10年くらいで型を書くのが当たり前に

Page 22

Page 23

PHPStanは動的解析とハイブリッドで現実的速度

Page 24

Page 25

Page 26

PHPStan extensions

PHPDoc

Page 27

型レベルでかなりのことができるように

Page 28

PHPDocと拡張を書きまくれば

Page 29

エージェントでPHPDocを増やしまくればいいのでは

Page 30

RBSが普及してないのは実装と宣言が分離しているからでは

Page 31

Page 32

素晴らしいRubyでも型を書きましょう

Page 33

Page 34

時を遡って…

Page 35

Page 36

RubyKaigi 2025でほぼ10年ぶりに参加

Page 37

Page 38

Page 39

楽しかったですね!

Page 40

RubyKaigiはエコシステムを作っている人たちの成果発表会

Page 41

個人的におもしろかったこと

Page 42

Page 43

Page 44

Page 45

その前に

Page 46

Page 47

Page 48

もしかして…型って

Page 49

シンプル

型なし

Page 50

書かない方がいいのでは…?

Page 51

Page 52

Page 53

今年の年初までRBSは良くないと思ってた

Page 54

RBS::Inlineの方が実装と分離しにくい

Page 55

Page 56

長年の経験則でどこから「型なし」が湧いてくるのか理解できていた

Page 57

既存のアプローチより良いやりかたがあるのでは?

Page 58

Page 59

Page 60

Page 61

Page 62

Page 63

型絞り込みになるヒントをかきあつめる

Page 64

具体的な型情報を保ち続ける

Page 65

a = 1 b = 2 c = a + b

Page 66

Rubyで任意の型推論ロジックを注入できる

Page 67

ActiveRecord ActiveSupport

Page 68

プラグインでひたすら型をつける

Page 69

100% Claude Code

Page 70

80% Claude Code

10% Gemini

10% Grok

Page 71

リアルワールドのRailsアプリでテストしまくる

Page 72

Fableのお蔭で最適化がめちゃ進んだ

Page 73

設計思想

Page 74

AIエージェントにSKILLで判断させる

Page 75

PHPStanで学んだ経験則

Page 76

ユーザーは適切な設定を選べない

Page 77

無理してmaxレベルを目指そうとする

Page 78

PHPStan自体も発展途上なのでコードを曲げることになりかねない

Page 79

偽陽性に対して過剰なコードを書かされる

Page 80

Page 81

Page 82

Page 83

プロジェクトの段階によって無視していいエラーも存在する

Page 84

型とはつまりなんなのか

Page 85

Page 86

実行時にとりうる予測可能な状態

Page 87

Rubyには構文上要求される型宣言はないのだからどう書いてもいいはず

Page 88

RailsのCoCも人間が期待する型

Page 89

型チェッカーが人間の期待に応えられないのが悪い

Page 90

Page 91

理屈上は任意の項に型をつけられる

Page 92

Page 93

プラグインの書き方は覚えなくていい

Page 94

プログラムがとりうる作用は戻り値だけではない

Page 95

Effect system

(実装済み)

Page 96

Rigor最大の問題

Page 97

tadsanはRuby開発者でもRails開発者でもない

Page 98

圧倒的当事者意識の欠如

Page 99

実際に使っている人のフィードバックが欲しい!

Page 100

もっというとマジレスが欲しい!

Page 101

Page 102

この記事でいちばん強調したかったこと

Page 103

Page 104

構造上メンテが高コスト

Page 105

Page 106

Claude Max 20x

トークン消費を抑えながら作ってもちょっと足りない

Page 107

今月のClaude契約は今朝切れました!

Page 108

それはさておき

Page 109

Rigorステッカー持ってきています

Page 110

Page 111

Page 112

rigor.typedduck.fail

Page 113

動的言語の未来にご期待ください