Techouse Developers Blog

テックハウス開発者ブログ|マルチプロダクト型スタートアップ|エンジニアによる技術情報を発信|SaaS、求人プラットフォーム、DX推進

RubyKaigi 2024 - Good first issues of TypeProf (Day2)

ogp

Good first issues of TypeProf

こんにちは、2024 年に新卒で入社し、ジョブハウスで主にフロントエンドを担当している Kaffff です。

本記事では RubyKaigi 2024 2 日目に発表された遠藤さん(@mametter)のセッション「Good first issues of TypeProf」をまとめさせていただきました。 セッションの内容としては、 mametter さんが Typeprof の開発を手伝ってみたいという方のために、開発の仕方や内部の実装を解説するという内容でした。

Typeprof とは

Ruby の エディタサポートを目的とした静的型解析ツールです。 Typeprof は型注釈なしでの型推論を目指していることが特徴です。

github.com

下の画像は Typeprof の VSCode 拡張機能により型推論された様子です。メソッドの上部に表示された灰色の文字が Typeprof により推論された型注釈です。 vscode で Typeprof によりメソッドが型推論される

Typeprof には以下の機能があります。

  • 型推論
  • 型エラー表示
  • 定義ジャンプ
  • 補完機能 など

また本セッションで、新たな機能としてメソッドや定数のリネーム機能や参照先を表示する機能が紹介されていました。

Typeprof の開発手法

Typeprof の開発はほとんど mametter さん 1 人で行われており、以下の流れで開発を進めているそうです。

  1. テストシナリオを書く
  2. 実装する
  3. シナリオテストをパスさせる

テストシナリオのコード例は以下になります。 このテストを走らせるには Typeprof リポジトリ内の tool/scenario_runner.rb を実行します。

## update: test.rb
def foo = "symbol#{ 42 }"

## assert: test.rb
class Object
  def foo: -> String
end

## update: test.rb
def foo = :"symbol#{ 42 }"

## assert: test.rb
class Object
  def foo: -> Symbol
end

Typeprof の内部実装

Typeprof の内部では Ruby で書かれたコードを以下のようなデータフローの Graph に変換しています。

dataflow https://speakerdeck.com/mame/good-first-issues-of-typeprof?slide=30

この Graph は、以下の流れで生成されます。

Code -> AST -> ChangeSet -> Graph

まず Ruby のコードを Prism により AST にパースします。 次に差分解析を行うために AST から ChangeSet を作成します。 差分解析とは、コードの一部に変更があったとき、変更のあった箇所のみ ChangeSet の再生成することで処理を効率化する仕組みです。

Typeprof への貢献を考えている方向け (Good first issue)

セッションの最後では Typeprof への貢献を考えている人向けに、貢献ができる部分をレベル別で紹介されていました。 本記事でも、いくつか抜粋して紹介します。

Level 1

  • 不足しているテストシナリオの追加
  • 足りていない Ruby/RBS の仕様のサポート
  • 型推論の CLI ツールの作成

Level 2

  • エラーメッセージの改善
  • 変数の定義ジャンプを可能にする

Level 3

  • 補完をより賢くする
  • フロー解析の改善
  • ruby-lsp のサポート
  • rbs inline のサポート

感想

今回初めて RubyKaigi に参加してみて、Ruby に関わる方々の技術レベルに圧倒されるとともに、コミュニティの方々が心の底からプログラミングを楽しんでいるのが伝わってきて素晴らしいと思いました。

自分は今回聴いているだけでしたが、いずれは Ruby のコミュニティ側で参加したいですね。 時間があるときに、Typeprof への貢献にも挑戦してみようと思います。

最後になりますが、Ruby Official Party で mametter さんと ツーショット写真を撮らせて頂いたので掲載します(ありがとうございました!!)。 kinen

Techouse では、社会課題の解決に一緒に取り組むエンジニアを募集しております。 ご応募お待ちしております。 jp.techouse.com