Slide 1

Slide 1 text

2024/06/18 RubyKaigi 2024 Wrap Party 株式会社タイミー 新谷哲平 Ruby の型に関する活動をやっている話 @euglena1215

Slide 2

Slide 2 text

自己紹介 Shintani Teppei(@euglena1215) ● 株式会社タイミー ● バックエンド テックリード ○ 2024/04/01~ New! ● 日傘を使うようになってから 直射日光で疲れてたんだと気付きました

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

自慢をします RubyKaigi から Ruby の型に関する活動をちょこちょことやっています。 この発表では拍手 👏 を要求するタイミングが何回かあります。空気を読んで拍 手してください! 時間の都合上かなり端折った説明になると思います。ご了承ください 🙏

Slide 6

Slide 6 text

RubyKaigi おつかれさまでした!

Slide 7

Slide 7 text

RubyKaigi 楽しかったですね

Slide 8

Slide 8 text

全世界で開催されるカンファレンス・イベントが対象 通常業務を気にせず集中して「本気で学んで来て欲しい」ため、参加時間は業務扱い(今回だと沖縄出張) 補助範囲 ● チケット費 ● 交通費 ● 宿泊費 支援条件 社内や技術コミュニティへ学びを還元することを目的として 参加後、社外に対するレポート(TechBlog or 登壇等)の発信 【宣伝】KaigiPass(カンファレンス参加支援) タイミー、世界中で開催されているすべての技術カンファレンスに無制限で参加できる「Kaigi Pass」を提供開始。 https://productpr.timee.co.jp/n/nab1445b25f92

Slide 9

Slide 9 text

RubyKaigi から持ち帰ったもの

Slide 10

Slide 10 text

RubyKaigi に参加された方は色々と持ち帰った ものがあるんじゃないかと思います

Slide 11

Slide 11 text

自分が RubyKaigi から持ち帰ったのは 型による開発体験向上へのワクワク感

Slide 12

Slide 12 text

型周りについて何かしてみよう!

Slide 13

Slide 13 text

まず興味を持ったのは TypeProf

Slide 14

Slide 14 text

まず興味を持ったのは TypeProf

Slide 15

Slide 15 text

まず興味を持ったのは TypeProf

Slide 16

Slide 16 text

自慢① mame さんの発表があった当日に TypeProf にパッチを投げる 👏

Slide 17

Slide 17 text

● Initial support lambda node #173 ● Add singleton class to known-issues #181 ● Support keyword arguments support partially #182 合計3つのPRを出して取り込んでもらえた

Slide 18

Slide 18 text

が、正直これ以上コード読んでも全体像を 理解できるイメージが持てずこの辺で離脱...

Slide 19

Slide 19 text

【余談】個人的な TypeProf 名所は ScenarioCompiler クラス https://github.com/ruby/typeprof/blob/master/test/sc enario_compiler.rb

Slide 20

Slide 20 text

【余談】個人的な TypeProf 名所は ScenarioCompiler クラス https://github.com/ruby/typeprof/blob/master/test/sc enario_compiler.rb

Slide 21

Slide 21 text

【寄り道】個人的な TypeProf 名所は ScenarioCompiler クラス https://github.com/ruby/typeprof/blob/master/test/sc enario_compiler.rb

Slide 22

Slide 22 text

というわけで別のことをすることに

Slide 23

Slide 23 text

次に興味を持ったのは ISUCON

Slide 24

Slide 24 text

ISUCON?

Slide 25

Slide 25 text

制限時間がシビア / テストがない / 慣れないライブラリを使う という特殊な環境である ISUCON では 型による開発生産性の恩恵を受けることが できるのでは? ref. Ruby の静的型チェック × ISUCON という夢 - カレーの恩返し

Slide 26

Slide 26 text

ISUCON13 Ruby 初期実装に対して rbs-inline を使って型を書いていくことに

Slide 27

Slide 27 text

自慢② rbs-inline の利用例を インターネットに公開した 👏 ISUCON13 で rbs-inline 使ってみた - カレーの恩返し https://github.com/euglena1215/isucon13-rbs/compar e/3bb0e7c..main?diff=unified&w=

Slide 28

Slide 28 text

まだまだ gem_rbs_collection は黎明期... ライブラリの型がないことが多い...

Slide 29

Slide 29 text

自慢③ ISUCON13 で必要な gem に型をつけた 👏 sinatra / sinatra-contrib /mysql2 / mysql2-cs-bind / bcrypt sinatra / sinatra-contrib gem はそんな詳しくないけど 重要な gem なので reviewer になってみた

Slide 30

Slide 30 text

ISUCON13 は一通り型がつけられるように

Slide 31

Slide 31 text

次に ISUCON12 予選の型付けをしてみる

Slide 32

Slide 32 text

型をつけていて思うこと

Slide 33

Slide 33 text

Data.define / Struct.new の 型付け面倒すぎないか...?

Slide 34

Slide 34 text

Data.define / Struct.new の 型付け面倒すぎないか...?

Slide 35

Slide 35 text

rbs-inline はメタプロをサポートしていないので これらは守備範囲外。 だが毎回手書きするのは結構しんどい...

Slide 36

Slide 36 text

自慢④ Data.define から RBS を自動生成する ツールを自作した 👏 https://github.com/euglena1215/rbs_inline_data

Slide 37

Slide 37 text

自慢④ Data.define から RBS を自動生成する ツールを自作する https://github.com/euglena1215/rbs_inline_ data

Slide 38

Slide 38 text

● かなり荒削りなので色々と改善の余地がある ● Struct.new の型の自動生成も欲しいので しれっと追加したい

Slide 39

Slide 39 text

2024/06/18 RubyKaigi 2024 Wrap Party 株式会社タイミー 新谷哲平 Ruby の型に関する活動をやっている話 @euglena1215