5
0

More than 1 year has passed since last update.

社内Ruby3新機能勉強会資料 ~RBSとは~

Posted at
1 / 9

この記事は何

Qiita株式会社では技術的な勉強会を定期的に開催しています。
この記事はRuby3から導入されたRBSについて発表をしたときの社内の資料をQiita用に修正したものです。


RBSとは

RBSというと大体二つの意味で話す。

  • ruby3.0から導入されたRubyの型定義を記述するための言語。(RBS=Ruby Signeture) →この記事では便宜上RBSと書く
  • RBSファイルを扱うためのgem (https://github.com/ruby/rbs) →この記事では便宜上rbsと書く
    • 標準ライブラリ/組み込みクラスの型ドキュメント
      • 特定の型に対しての親情報やメソッドの型情報を逆引きできる
    • RBSの解析

https://github.com/ruby/rbs より

RBS is a language to describe the structure of Ruby programs. You can write down the definition of a class or module: methods defined in the class, instance variables and their types, and inheritance/mix-in relations. It also allows declaring constants and global variables.


RBS自体は言語の定義でしかないので、これ自体に意味はない。
実際の業務では以下の二つのライブラリを用いることで、Rubyのプログラミングに型の恩恵を受けられるようになる

  • TypeProf
    • 型注釈のない Ruby コードを解析する静的型解析ライブラリ
  • Steep
    • Ruby の静的型検査ライブラリ
    • LSPも含む

RBSではなく、RBIというStripeが独自に開発した型定義言語もある(Sorbetで利用)


ちなみにRBSとSorbetのプロジェクトは密接にコミュニケーションをとっているらしく、相互変換を行えるようにしていく模様

ここを読むとTapiocaというプロジェクトでRBS→RBIを実現できそう。

元々はRubyの標準もRBI想定していた模様。(SorbetのRBIとは別のものを指している可能性もあり)


背景とコンセプト

  • Ruby3の3本の柱
    • パフォーマンスの改善
    • Concurrency
    • 静的解析→この中で生まれたのがRBS

  • 2010年代に入ってから静的型付け言語の人気が高まっており、動的型付け言語でも型注釈を提供する流れが出てきた


RBSの現状

GitHubでの*.rbsの検索結果→19,000ファイルほど

rbs_collectionを使うことで、gemにrbsファイルがあればその情報を取り込むことができる。

また、gems_rbs_collectionにgemのRBSが定義されている→npmの@typesと同じようなイメージ

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0