2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RubyAdvent Calendar 2024

Day 22

Ruby プロジェクトを Steep で型チェックできるようにするために必要なこと

Last updated at Posted at 2024-12-23

はじめに

先日、Ruby のプロジェクトを Steep で型チェックできるようにしたのですが、必要な知識や手順がそこそこあったので、それらをまとめました。

全体像が知りたい方向けの記事です。手順の詳細などはかなり省いています。

この記事を読んでほしい人:

  • 過去の自分
  • 型チェックできるようにしたいけど、何からやればいいかわからない人

知識

RBS, gem_rbs_collection, steep のそれぞれについてある程度知識があると、スムーズに型チェックを導入できます。それぞれ簡単に説明します。

RBS

RBS は Ruby 3.0 で追加された Ruby で型を扱うための機能です。

少しややこしいですが、Ruby の型を記述するための記法としての「RBS言語」があり、その記法で書かれた型情報のファイルが「RBSファイル」(拡張子は .rbs)、そして、それらを処理する rbs gem や rbs コマンドがあります。

gem_rbs_collection

様々な gem の RBSファイル(型情報)がまとまっている以下のリポジトリです。

TypeScript における DefinitelyTyped のようなものです。
プロジェクトで使用している gem の型が欲しいときに使用します。

Steep

RBSファイルに書かれた型情報を使って型チェックを行うツールです。

手順

上記で説明した通り、Steep で型チェックを行うためには、型情報が書かれたRBSファイルが必要です。

そのため、型チェックできるようにするためには「必要なRBSファイルの準備」と「Steepが RBS ファイルを認識するように設定」が必要です。それぞれ説明していきます。

必要なRBSファイルの準備

型の情報が書かれたRBSファイルは、「標準ライブラリの型」「プロジェクトで使用している gem の型」「自分が書いたプログラムの型」それぞれ異なる場所にあります。

  • 標準ライブラリの型
  • プロジェクトで使用している gem の型
    • gem 側で定義されている場合は bundle install のときに一緒にインストールされます。
    • gem 側で定義されていない場合でも gem_rbs_collection にあれば、それを使うことができます。
    • 自分でRBSファイルを作成することも可能です。
  • 自分が書いたコードの型
    • 自分で生成する必要があります。
    • 生成の方法は rbs prototype コマンド、TypeProfrbs-inline など、様々です。
      • RubyKaigi 2024 で話題になった rbs-inline は個人的におすすめです。

Steep が RBS ファイルを認識するように設定

steep gem をインストールしたのち、steep init を実行すると、 Steepfile というファイルが生成されます。このファイルに設定を書いていきます。

target :lib do
  signature 'sig'

  check 'app'

  library 'time'
  library 'uri'
end

主に以下を設定します。

  • signature
    • 生成したRBSファイルが置いてあるディレクトリを指定します。
  • check
    • Steepで型チェックしたいRubyのコードが含まれるディレクトリを指定します。
  • library
    • 組み込みライブラリ以外の標準ライブラリを使う場合、そのライブラリの型を使ってチェックするために必要です。
      • 例: Time.now は組み込みライブラリなので library の指定は不要。 require 'time' することで使えるようになる Time#iso8601library 'time' を書かないと、型を使用できない。
    • (プロジェクトで使用している gem を library に指定する方法もあるっぽいです)
      • gem_rbs_collection を使っている場合は不要かも?
      • 使い方がわかったら追記します。

Steepfile が適切に設定できていれば、steep check で型をチェックできます。

おわりに

自分が開発していた Ruby プロジェクトでようやく steep check コマンドが動くようになったので、現時点で理解した内容をまとめました。追加でわかったことがあったら追記します。

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?