自分の開発しているJetBrains IDEのプラグインRailroadsについて、いくつかissueが寄せられました。
- Does not work for repositories where the rails app is in a subdirectory · Issue #93 · thinkAmi/railroads
- Stalls on loading · Issue #94 · thinkAmi/railroads
5月に入り、色々メンテナンスしたことから、内容をメモしておきます。
目次
- プラグインの機能開発・保守の効率化を実施
- IDE 2026.1への対応とrails routes実行の安定化
- サブディレクトリにあるRailsプロジェクトにも対応
- 動作バージョンの絞り込み
- プラグインの動作確認におけるTips
- ソースコード
プラグインの機能開発・保守の効率化を実施
今まで、機能開発や保守については、人間メインで行ってきました。
ただ、最近は
- IntelliJ Platform への追随が大変になってきた
- 例
- IDE 2025.1以降、スレッドモデルの変更(改善)が複数回発生している
- バンドルされるKotlin Standard Library (
stdlib) がIDEのバージョン毎に異なるため、どのバージョンを利用するか考えていく必要がある - IntelliJ Platform Gradleプラグインの変更もよくある
- GradleとKotlinのバージョン互換性にも注意を向ける必要がある
- 例
- Railroadsプラグインのベースである、JetBrainsのIntelliJ Platform Plugin Templateも定期的にリリースされるため、こちらも追随していくのが大変
- 今のところ、Kotlinを使う機会がRailroadsプラグイン開発しかないため、Kotlin界隈の話題に追随していくのも大変
- サポート対象のIDEバージョンが増え、動作確認をする手間が増えている
という状況になっていました。
このままでは継続的に機能開発・保守するのが難しくなる未来が見えたため、まずはここから改善していくことにしました。
AIエージェント向けの環境を整備
これまでもAIによるプラグインの修正は行っていました。
JetBrains AIとともに、IntelliJ Platform PluginのRailroadsをIDEバージョン 2025.1 へ対応してみた - メモ的な思考的な
ただ、当時はAIの性能がそこまで高くなかったため、結局は自分で実装することもありました。
一方、最近ではAIの性能が上がり、ある程度仕様に詳しくなっています。そのため、対応する範囲が決まっているのであれば、ほぼAI(AIエージェント)に任せることができそうです。
そこで、AIエージェント向けの環境を整えることにしました。
Linearでのタスク管理
RailroadsプラグインはOSSのため、GitHubのIssueやPull Requestは英語で記載しています。
しかし、自分の英語力の問題や、外部に公開できないようなタスクはGitHub Issueで管理しづらい問題があります。そこで、別途タスク管理ツールを用意し、そこで管理することにしました。
AIエージェントと相性の良さそうなタスク管理ツールを探したところ、Linearがありました。
https://linear.app/
Railroadsのタスクを管理する程度なので、Freeプランで試してみることにしました。
Linearには公式CLIはありませんが、MCPサーバがありました。
MCP server – Linear Docs
そこで、AIエージェント向けにMCPサーバをセットアップし、AIエージェントがissueを管理できるようにしました。
AIエージェント向けのスキルを作成
必要になったら追加するという感じで、次のようなスキルを用意しました。
- 別のAIエージェントを呼び出してレビューするスキル
- IntelliJ Platform Plugin Templateリポジトリの差分を確認し、Railroadsリポジトリに取り込むものがあるかをチェック・提案するスキル
- 特定の形式でGitHubのプルリクを作成するスキル
ちなみに、スキルの内容を把握しやすいようSKILL.mdは日本語で書いていることもあり、Railroadsリポジトリには入れていません。
また、 gh skill install などでスキルをメンテナンスできるよう、今のところはスキルに関するディレクトリはgitignoreしてあります。
AIエージェント向けのフックを作成
Linearでissueを管理していることもあり、ソースコードやコミットメッセージにLinearのissue IDが紛れ込んでしまうことがありました。
それを防ぐため、Linearのissue IDが紛れ込んでいる場合にAIエージェントが気づけるよう、フックを作成しました。
Linearに関する情報が含まれているため、これもリポジトリには入れていないです。
IntelliJ Platform Plugin Templateリポジトリへ追随
次は、IntelliJ Platform Plugin Templateリポジトリへ追随し、最新のものでAIエージェントが実装できるようにしました。
できる限り最新のTemplateに寄せる形で不要な設定を削除しました。一方で、動作確認に必要なローカルIDEの設定は残すなど、細かいところはRailroads向けに調整しています。
具体的な内容はこちらです。
Migrate Gradle and CI configuration by thinkAmi · Pull Request #95 · thinkAmi/railroads
IDE 2026.1への対応とrails routes実行の安定化
冒頭に挙げた通り、IntelliJ Platformのスレッドモデルには変更が入っています。
そこで、AIエージェントが古いスレッドモデルで実装を行わないよう、スレッドモデル変更に追随しました。
また、IDE 2026.1系で発生したPSIアクセスやSwing更新スレッドの問題、 rails routes 実行前の設定不備、ルート読み込み時の例外、未保存ファイルが反映されない問題にも対応しました。
なお、対応が必要な箇所について、一度ではすべて挙げることができなかったため、複数回に分けて対応しています。
- Raise minimum IDE to 2025.3 and fix PSI read assertion in 2026.1.1 by thinkAmi · Pull Request #96 · thinkAmi/railroads
- fix: show configuration errors before running Rails Routes by thinkAmi · Pull Request #97 · thinkAmi/railroads
- fix: stop Rails Routes from stalling on cast errors and unsaved files by thinkAmi · Pull Request #98 · thinkAmi/railroads
- Enforce IntelliJ Platform threading contracts in routes view and mounted engine navigation by thinkAmi · Pull Request #99 · thinkAmi/railroads
- Move copy route action updates onto the EDT by thinkAmi · Pull Request #100 · thinkAmi/railroads
サブディレクトリにあるRailsプロジェクトにも対応
自分のユースケースではなかったこともあり、RailroadsではサブディレクトリにあるRailsプロジェクトへの対応は特に行っていませんでした。
そんな中、次のissueが寄せられました。
Does not work for repositories where the rails app is in a subdirectory · Issue #93 · thinkAmi/railroads
そこでCodex (GPT 5.5 high) と壁打ちし、「JetBrains IDEがRailsプロジェクトとして認識済」の前提で対応するのが良さそうとなりました。
JetBrains IDEではサブディレクトリにあるプロジェクトも、
In the Project view, right-click the
rails_backenddirectory, then selectMark Directory As>Ruby Module Root
という手順で認識させることができるためです。
この設定の詳細は、動作確認用アプリのREADMEにスクリーンショット付きで記載しました。
https://github.com/thinkAmi-sandbox/rails_subdirectory_app
実際の対応内容の次のプルリクになります。
Support Rails apps in project subdirectories by thinkAmi · Pull Request #105 · thinkAmi/railroads
動作バージョンの絞り込み
Railroadsプラグインの元となったRailwaysプラグインがIDE 2023.3以降で動作しなくなったこともあり、今までは「Railroadsプラグインの最新版が動作するIDEのバージョンはなるべく広くする」ことを目標にしてきました。
しかし、
- 動作確認用IDEは2つ
- IntelliJ IDEA + Rubyプラグイン
- RubyMine
- 動作確認用IDEの動作確認バージョンは複数
- これからも増える
- 動作確認用アプリは、今のところ2つ
- 種類
- ルートにあるプロジェクト
- サブディレクトリにあるプロジェクト
- 状況によっては、今後増えるかもしれない
- 種類
という状況から、最近では動作確認の時間がだいぶ時間がかかるようになっていました。
そして、実装はAIエージェントに任せられたとしても、この動作確認は人間の作業として残り続けます。
ここで、Railroadsプラグインの機能はある意味枯れており、今後大きな機能追加はあまり考えていません。
これより、最新IDEバージョンで動作すれば問題なさそうと考え、このタイミングで動作バージョンを絞り込むことにしました。具体的には次の通りです。
- Railroads 0.6.0
- IDE 2025.3 以降
- IDE 2026.1 対応と Rails Routes の安定化を入れた
- Railroads 0.7.0
- IDE 2026.1 以降
- IDE が Ruby Module Root として認識したサブディレクトリ内の Rails アプリにも実験的に対応した
おそらく、今後も似たような動作バージョンになると思います。
なお、過去バージョンのプラグインはJetBrains Marketplaceからダウンロードできるため、そこまで大きな影響はなさそうと考えています。
プラグインの動作確認におけるTips
ここでは、プラグインの動作確認を行う時のTipsを記載します。
mise利用時のRubyインタープリターの設定方法
IntelliJ IDEAやRubyMineでは、Rubyのインタープリターは以下のようにして設定できます(IDEやバージョンによっては多少異なるかも)。
- Project Structure → Project Settings Modules →
+→interpreterでmiseのRubyを指定
miseのRubyはどこにあるかについては、IDEのターミナルで which ruby するとパスが分かります。
% which ruby ~/.local/share/mise/installs/ruby/3.4.8/bin/ruby
このパスにあるファイルをIDEで指定すればよいです。
なお、 .local は隠しディレクトリのため、 Cmd + Shift + . で表示できます。
ちなみに、routes.rbに多くのルートを持つアプリで動作確認する場合、インタープリターを設定するのは full_app と rails_large_routes_app だけで十分でした。
逆に mountable_** を選択してしまうと、見えないところでエラーになってしまうようです。その結果、Cancel ボタンしか押せなくなることに注意します。
動作確認で起動したIDEの閉じ方について
動作確認が終わりIDEを閉じるときは、起動したIDEの x ボタンで閉じていくのが良いです。
次回 Run Plugin したときも、同じ設定が残るためです。
一方、開発用IDEで Run Plugin を止めると、それらの設定が消えてしまい、毎回設定する手間が増えてしまいます。
ソースコード
RailroadsのソースコードはGitHubで公開しています。
https://github.com/thinkAmi/railroads
また、動作確認用アプリのリポジトリは次の通りです。
- routes.rbに多くのルートを持つアプリ
- サブディレクトリにプロジェクトがあるアプリ