Skip to content

Instantly share code, notes, and snippets.

@mame

mame/ja.md Secret

Created September 8, 2021 01:54
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save mame/86234de6a58352b9f994e0f8a6d6fbc2 to your computer and use it in GitHub Desktop.
Save mame/86234de6a58352b9f994e0f8a6d6fbc2 to your computer and use it in GitHub Desktop.
How to use TypeProf for IDE

TypeProf for IDE セットアップ手順(2021年9月時点)

注意:開発途中なので、何かと荒削りで面倒です。書いてあるとおりに動かないなど、気付きがあったらぜひご報告ください。

1. ruby masterをビルドする

TypeProf for IDEを動かすには、開発最新版のrubyが必要です。次のようにしてビルドしてください。

$ git clone https://github.com/ruby/ruby.git
$ cd ruby
$ ./autogen.sh
$ ./configure --prefix=$PWD/local
$ make
$ make install

ビルドができたら、パスを通してください。

$ export PATH=$PWD/local/bin:$PATH

ruby -vで 3.1.0dev と出ていたら OK です。

$ ruby -v
ruby 3.1.0dev (2021-07-16T07:10:54Z master eee709595c) [x86_64-linux]

rbenv等を使ってもいいと思いますが試してません。 rubyのビルドについて興味がある人は、Ruby開発の指南書を読んでみてください。

2. TypeProfを手元で動かす

TypeProfの最新版をcloneしてください。

$ git clone https://github.com/ruby/typeprof.git
$ cd typeprof

TypeProf for IDEは lsp-test というブランチで開発しています。

$ git checkout lsp-test

bundlerを使って必要な依存gem(Rubyではライブラリのパッケージをgemといいます)をインストールした上で、テストを動かしてみてください。

$ bundle install
$ bundle exec rake

エラーなく終了したらOKです。

3. TypeProfのvscode拡張を有効にしたvscodeを立ち上げる

ruby/typeprofリポジトリの vscode/ というフォルダの中にvscode拡張のソースコードがあります。 vscodeで vscode/ フォルダを開いて、F5を押したら、TypeProfの拡張が有効になったvscodeが別途立ち上がるはずです。新しいvscodeのタイトルバーが [Extension Development Host] - ... となっていたら成功です。

他の方法として、コマンドラインで直接vscodeを立ち上げる(sshfsなど使わずローカルで立ち上げるならできるはず)、または、npm run package && npx vsce publish して vsix を作ってインストールする方法があります。 vscode/README.md を参考にしてください(あまり情報ないですが)。

4. gem_rbs_collectionをクローンする

gem_rbs_collectionは、有名ライブラリ(gem)のRBS定義を集めたリポジトリです。TypeScriptで言うDefinitelyTypedみたいなものです。

これを手元にクローンしてください。typeprofと同じフォルダにcloneしてください。

$ git clone https://github.com/ruby/gem_rbs_collection.git

gem_rbs_collectionは、いまのところ、まるごとクローンする使い方しかありません。つまり npm install @types/xxx のように特定のgemの型定義だけインストールする方法はまだありません(pockeさんが現在開発中です)。

5. RBSWikiをクローンする

いまのところ、RBSWikiという小さなWebアプリを、TypeProf for IDE開発の題材にしています。

次のリポジトリをクローンしてください。

$ git clone https://github.com/mame/rbswiki.git
$ cd rbswiki

これは、TypeProf for IDEの実験用に少しいじったRBSWikiです。ちなみにオリジナルは https://github.com/soutaro/rbswiki です。

rbswikiも、TypeProfをクローンしたフォルダと同じところにcloneしてください。 もしくは、rbswiki/Gemfileにかかれている次のパスをいい感じに書き換えてください。

gem "typeprof", path: "../typeprof"

それから、bundlerで依存gemをインストールしてください。

$ bundle install

もしRBSWiki動かしてみたかったら、次のように実行し、https://localhost:9292 を開いてください(動かさなくてもいいです)。

$ bundle exec rackup -Ilib bin/server.ru

なお、RBSWikiは、Rubyの型定義記述言語であるRBSのデモとして作られたものです。sig/ 以下に、(RBSの設計者でSteepの開発者であるsoutaroさんが)手書きをしたRBSの例が置かれています。

6. TypeProfでRBSWikiを解析してみる

TypeProf for IDEを動かす前に、TypeProfでRBSWikiの型推論をしてみます。次のように実行してみてください。

$ bundle exec typeprof --repo ../gem_rbs_collection/gems -Ilib bin/server.ru

--repo というオプションで、gem_rbs_collection/gems のパスを教えてあげてください。また、TypeProfにロードパスを教えるために -Ilib をわたしてください。さらに、TypeProfは解析を始めるエントリポイントが必要なので、bin/server.ru もわたす必要があります。

これにより、数秒程度で推論されたRBSが出てくるはずです。この推論では、rbswikiのsig/フォルダにある手書きされたRBSは使っていません。自動推論されたRBSと、手書きされたRBSを見比べてみると面白いかもしれません。なお、TypeProfにRBSを考慮した解析をさせるには、(いまのところ)引数に.rbsを渡す必要があります。

7. TypeProf for IDEを動かす

【重要】rbswikiのフォルダのトップに有るtypeprof-lspというファイルを開いて、bundleコマンドのフルパスを調整してください。TypeProf for IDEのvscode拡張に、開発最新版のrubyを使わせる良い方法がないので、とりあえずこうなってます。本ドキュメント最後のタスク案も参照ください。

[Extension Development Host] - ... のvscodeで、rbswikiのフォルダを開いてください。それから、lib/rbswiki/wiki.rbのようなファイルを開いてみてください。

うまく行けば、TypeProf for IDEが立ち上がるはずです。各メソッドの前に小さい文字でRBSが表示されていれば、TypeProf for IDEで推論された結果が挿入されて表示されていることになります。

また、メソッド呼び出しの"Go to definition"も動くはずです。たとえばupdate_pageメソッド内のfind_pageのところでGo to definitionをすると、すぐ上のdef find_page...に飛ぶはずです。

これでようやくTypeProf for IDEの動作確認終了です。気づきやご感想をお気軽に Twitter @mametter へフィードバックください!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment