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 へフィードバックください!