Dev Containerを用いてCursorでRubyのコードジャンプを実現する
こんにちは!普段Ruby on Railsを使って開発をしているourly株式会社の@ourly_nobuoです。
最近、開発エディタをRubyMineからCursorに移行しました。
CursorのAI機能は非常に強力で開発体験が大きく向上したのですが、一つだけ困っていた点がありました。
それは、Rubyファイルでコードジャンプがデフォルトではできないことです。RubyMineでは当たり前のように使っていた機能なので、これが使えないのは想像以上に開発効率に影響がありました。
(毎回ファイル検索してメソッドに飛ぶ始末…)
そこで今回は、Cursor環境でRubyのコードジャンプを快適に行うための環境構築手順を紹介します。
今回使用する技術スタック
コードジャンプ環境を実現するために、今回は以下の技術を利用しました。
- Dev Container
- Ruby LSP
Dev Containerとは?
Dev Containerは、開発環境をDockerコンテナ内に構築・管理するための仕組み(仕様)です。VS CodeやCursorの拡張機能としても提供されています。
コンテナ内にCursor(VS Code)のサーバーを立ち上げ、ローカルのUIから接続してあたかもコンテナ内でエディターが機能するようなイメージです。
Dev Containerを導入することで、以下のようなメリットがあります。
- 開発環境の再現性向上:
Dockerfile
やdevcontainer.json
で環境構成をコード化できるため、誰でも同じ環境を簡単に構築できます。 - ローカル環境の汚染防止: 必要なツールやライブラリはコンテナ内に閉じ込められるため、ローカルPCの環境をクリーンに保てます。
- プロジェクトごとの環境分離: プロジェクトごとに異なるバージョンのRubyやライブラリを簡単に使い分けられます。
Dev Containerの詳細については、以下の記事が参考になりました。
Ruby LSPとは?
Shopify が中心となって開発を進めているRuby用のLanguage Serverです。
Rubyコードのためのインテリセンス(コード補完、ドキュメント表示など)やコードジャンプ機能を提供するLanguage Server Protocol(LSP)の実装の一つです。Gemとして提供されており、多くのエディタで利用できます。
今回はこのRuby LSPを利用して、Cursor上でコードジャンプ機能を実現します。
(番外編)Solargraph
RubyのLanguage Serverを構築する手段としては Solargraph もよく使われます。
Solargraphの役割はRuby LSPと似ており、以下の内容を実現できます。
- コンテキスト依存の補完
- メソッド/クラス定義へのジャンプ
- ドキュメントホバー表示
- 静的解析による軽量な型チェック
ただし私はDev Container環境でSolargraphによるコードジャンプをうまく実現できなかったので、特に指定がなければRuby LSPを使用することをお勧めします。
環境構築の手順
それでは、実際に環境を構築していきましょう。
1. Gemfileを追加
まず、プロジェクトのGemfile
にruby-lsp
を追加します。
# 開発用のグループがあれば、そこに追加する
group :development do
gem 'ruby-lsp'
# 他の開発用Gem...
end
Dev Container上でGemfileをインストールするため、ローカルでの bundle install
は不要です。
2. 必要な拡張機能のインストール
Cursorに以下の拡張機能をインストールします。
- Dev Container
- Ruby LSP
3. devcontainer.jsonの作成
プロジェクトのルートディレクトリに.devcontainer
ディレクトリを作成し、その中にdevcontainer.json
ファイルを作成します。
your-project-root/
├── .devcontainer/
│ └── devcontainer.json
├── app/
├── config/
├── Gemfile
├── Gemfile.lock
└── ...
devcontainer.json
に様々な設定を記述していきます。今回はコードジャンプを実現するための最低限の設定となっているため、必要に応じて設定を追加してください。
{
"name": "Ruby Dev Container",
"image": "ruby:3.4-bullseye",
"workspaceFolder": "/workspaces/your-project-root",
"postCreateCommand": "bundle check || bundle install",
"customizations": {
"vscode": {
"extensions": [
"Shopify.ruby-lsp"
]
}
}
}
ポイント:
-
image
:- 今回は公式のRubyイメージ
ruby:3.1.4-bullseye
を使用しました。 - リモートサーバー起動のためのライブラリ不足を防ぐため、一般的なDebianベースのimageを使用するのがオススメです。
- 今回は公式のRubyイメージ
-
postCreateCommand
:- コンテナ初回起動時に自動で実行したいコマンドを指定できます。
- インストール済みの場合にスキップできるよう、
bundle check
を事前に行なっています。
4. Dev Containerの起動
devcontainer.json
を作成したら、shift + Cmd + p
で「Reopen in Container」を選択してDev Containerを起動します。
初回起動時はイメージのプルやビルドに時間がかかる場合があります。
5. コードジャンプの実行
Dev Containerが起動し、Gemfileのインストールが完了したら準備は完了です!.rb
ファイルを開き、メソッド名などにカーソルを合わせて、Cmd
を押しながらクリック or F12を押してみてください。定義元へジャンプできれば成功です!
初回はプロジェクトファイルの読み込みで、コードジャンプまで時間がかかります。
まとめ
今回は、Cursor環境でDev ContainerとRuby LSPを利用してRubyのコードジャンプを実現する方法を紹介しました。
これにより、RubyMineほどまではいきませんが、コードジャンプをCursorでも実現できました。これでCursorの強力なAI機能と合わせて、より効率的にRuby開発を進められるはずです!
ただ、実際に使ってみると、メソッド定義へのジャンプやホバー時の情報表示に少し時間がかかるという印象です。これは、既存のDocker Compose環境との兼ね合いや設定の問題かもしれません。今後、このパフォーマンスについても調査・改善していきたいと考えています。
この記事が、CursorでRuby開発を行う方の助けになれば幸いです。
Discussion