ラベル sorbet の投稿を表示しています。 すべての投稿を表示
ラベル sorbet の投稿を表示しています。 すべての投稿を表示

2026年6月12日金曜日

VSCode の Ruby LSP をセットアップする方法

VSCode の Ruby LSP をセットアップする方法

概要

https://marketplace.visualstudio.com/items?itemName=Shopify.ruby-lsp これをセットアップする方法を紹介します

環境

  • macOS 26.5.1
  • VSCode 1.123.1
    • Ruby LSP 0.10.4

watchman のインストール

  • brew install watchman

watchman はグローバルにあるものを使うので homebrew でインストールします

sorbet のインストール

  • vim Gemfile
group :development do
  gem 'sorbet'
  gem 'sorbet-runtime'
  gem 'tapioca'
end

sorbet を使うのでインストールします
これは開いているプロジェクト内で bundle 経由で実行するので Gemfile からインストールします

tapioca の初期化

必要な rbi ファイルを作成します

  • bundle exec tapioca init
  • bundle exec tapioca gems

これで bin/tapiocasorbet/ が生成されます

rubocop を使っている場合は

.rubocop.yaml に以下を追記しておきましょう

Style/StringLiterals:
  Exclude:
    - 'bin/tapioca'

動作確認

VSCode を開くと自動的に Ruby LSP が起動します
状態が Idle になれば OK です

Restarting を繰り返している場合は Output を確認し Sorbet や watchman が正しく動作しているか確認しましょう
起動後に自作のクラスなどで警告が出る場合は tapioca で rbi ファイルなどが生成されている確認しましょう

最後に

bundle exec tapioca gems は定期的に実行する必要があります

2022年3月31日木曜日

Sorbet 超入門

Sorbet 超入門

概要

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)}

これがいわゆるタイプアノテーションになります
メソッドチェーンで記載します
各種パラメータの型と返り値の型を指定します
プリミティブ型以外にも独自で定義したクラスも指定できます

最後に

まだまだ開発中なのでもう少し成熟するのを待ったほうがいいかもしれません

参考サイト