概要
Stripe が作成した型チェックツール Sorbet (しゃーべっと)を使ってみました
過去に紹介した記事では typeprof + rbs + steep を使っていますが Sorbet はこれだけで使えます
環境
- macOS 11.6.5
- Ruby 2.6.5
- Sorbet 0.5.9798
事前準備
Ruby3 でやるといろいろとエラーになるので Ruby2.6.5 で試しました
rbenv などを使って今回用にインストールしてあげましょう
- rbenv install 2.6.5
- cd /path/to/try_sorbet
- rbenv local 2.6.6
インストール
- bundle init
- vim Gemfile
gem "sorbet"
gem "sorbet-runtime"
- bundle install --path vendor/bundle
一応ポイントですが空の状態からやったほうがいいです既存の gem がある状態でやるといろいろとエラーが出ました
とりあえず使ってみる
srb tc
コマンドで型チェックできます
-
bundle exec srb tc -e 'puts "Hello, world!"'`
プロジェクト初期化
- bundle exec srb init
とりあえず Yes で初期化します
いろいろとログが流れますが待ちましょう
sorbet/ ディレクトリが作成されれば OK です
テスト用スクリプト作成
公式のサンプルをそのまま持ってきます
- vim app.rb
# typed: true
require 'sorbet-runtime'
class A
extend T::Sig
sig {params(x: Integer).returns(String)}
def bar(x)
x.to_s
end
end
def main
A.new.barr(91) # error: Typo!
A.new.bar("91") # error: Type mismatch!
end
型チェック実行
srb tc
で実行できます
- bundle exec srb tc
app.rb:14: Method barr does not exist on A https://srb.help/7003
14 | A.new.barr(91) # error: Typo!
^^^^
Got A originating from:
app.rb:14:
14 | A.new.barr(91) # error: Typo!
^^^^^
Autocorrect: Use `-a` to autocorrect
app.rb:14: Replace with bar
14 | A.new.barr(91) # error: Typo!
^^^^
app.rb:15: Expected Integer but found String("91") for argument x https://srb.help/7002
15 | A.new.bar("91") # error: Type mismatch!
^^^^
Expected Integer for argument x of method A#bar:
app.rb:7:
7 | sig {params(x: Integer).returns(String)}
^
Got String("91") originating from:
app.rb:15:
15 | A.new.bar("91") # error: Type mismatch!
^^^^
Errors: 2
タイポと型エラーが表示できるのが確認できます
書き方の説明
# typed: true
require の前に必須になります
もし既存の Ruby スクリプトがあれば init 時に自動で挿入してくれます
extend T::Sig
クラス内で使う場合には必須になります
これで sig 構文が使えるようになります
sig {params(x: Integer).returns(String)}
これがいわゆるタイプアノテーションになります
メソッドチェーンで記載します
各種パラメータの型と返り値の型を指定します
プリミティブ型以外にも独自で定義したクラスも指定できます
最後に
まだまだ開発中なのでもう少し成熟するのを待ったほうがいいかもしれません
0 件のコメント:
コメントを投稿