【VS Code】Kotlinで「定義ジャンプ」ができない!を解決した話(原因はJavaのバージョンでした)
読了時間: 約 3分
- 読者メリット: VSCodeでKotlin開発環境を構築する際、定義ジャンプや補完が効かない問題を3つの観点(Javaバージョン・拡張機能設定・環境変数)から解決できる。
はじめに
最近「Claude Code for VSCode」を使う機会が増え、開発エディタとして VSCode を使う頻度が増えてきました。
普段はiOS開発をやっているのですが、最近Androidの開発にもチャレンジしており、「Android StudioではなくVSCodeで開発したい」思って、マーケットプレイスから「Kotlin IDE for Visual Studio Code(fwcd.kotlin)」をインストールして書き始めたのですが、早速壁にぶつかりました。
「あれ……定義ジャンプ(Go to Definition)が動かない?」
コードは書けるのに、Command + Click してもシーン……。補完も効かない。
色々と試行錯誤した結果、3つの原因が複合して起きていました。今回はその解決ログを共有します。
🔴 対応前の状況
- 定義ジャンプ不可: クラスや関数をクリックしても移動できない。
- 謎のエラー: 拡張機能が裏でクラッシュしている様子。
🔍 原因1:Javaバージョンの「新しすぎ」問題
結論から言うと、一番の原因は 「PCに入っていたJavaが新しすぎたこと」 でした。
何が起きていたか?
VS CodeでKotlinの機能(定義ジャンプや補完)を提供してくれる「Kotlin Language Server」という裏方さんがいるのですが、この人は Java 17 または 21 で動くように作られています。
しかし、私のPC環境はこうなっていました。
- システムに入っているJava: Java 25 (最新版)
- Kotlin Language Serverの要求: Java 17 〜 21
VS Codeを起動すると、Language ServerはPCのデフォルトである「Java 25」を使おうとします。しかし、Java 25はまだ対応していないため、起動直後にクラッシュしていたのです。
Android Studioが最初からよしなにやってくれていたので、Javaのバージョンを意識する機会が減っていましたが、VS Codeでは自分で指定する必要がありました。
✅ 解決策:Android StudioのJavaを借りる
わざわざ古いJavaをインストールし直すのは面倒です。そこで、「すでにインストールされているAndroid Studioの中にあるJava (Ver 21)」 をVS Codeに使わせることにしました。
プロジェクト直下の .vscode/settings.json を作成し、以下の設定を書き込みます。
1. Language Serverに正しいJavaを使わせる
これで、システムのJava 25ではなく、Android Studio内の安定したJava 21が使われるようになります。
※パスはmacOSの例です。
// .vscode/settings.json (ワークスペース設定)
{
// Android Studioに内蔵されているJava(JBR)のパスを指定
"java.jdt.ls.java.home": "/Applications/Android Studio.app/Contents/jbr/Contents/Home",
"java.configuration.runtimes": [
{
"name": "JavaSE-21",
"path": "/Applications/Android Studio.app/Contents/jbr/Contents/Home",
"default": true
}
],
// ついでにLanguage Serverを明示的に有効化
"kotlin.languageServer.enabled": true,
// 何かあったときにログが出るようにしておく
"kotlin.trace.server": "verbose"
}
2. ターミナルの環境変数も合わせる
VS Code内のターミナルで ./gradlew build などを実行した際にもエラーが出ないよう、ターミナル上の JAVA_HOME も揃えておきます。
// .vscode/settings.json (ワークスペース設定)
// VS Code内ターミナルの環境変数設定
"terminal.integrated.env.osx": {
"JAVA_HOME": "/Applications/Android Studio.app/Contents/jbr/Contents/Home"
}
✨ 問題解決できました
設定前と設定後の比較です。
| 項目 | 解決前 | 解決後 |
|---|---|---|
| 使用Java | システムのJava 25 (非対応) | Android StudioのJava 21 (安定) |
| 定義ジャンプ | ❌ 動作せず | ✅ サクサク動く! |
| エラー検知 | ❌ 無反応 | ✅ 赤線が出る! |
これでようやく、Android Studioに近い快適な開発体験がVS Codeでも手に入りました。
💡 学び:Language Server Protocol (LSP) とは?
今回、「拡張機能を入れたのに動かない」という現象を通して、Language Server Protocol (LSP) という仕組みを学びました。
VS Code自体はKotlinの文法を知りません。
- VS Codeが「ここクリックされたよ!」と裏方の Language Server に伝える。
- Language Server(Javaで動作)がコードを解析して「それはこのファイルのこの行だよ」と返す。
- VS Codeがそこにジャンプする。
という連携プレーをしています。
今回はこの「裏方さん(Server)」が、Javaのバージョン違いでそもそも立ち上がっていなかった、というのが真相でした。
まとめ
- VS CodeでKotlin/Android開発をするなら、Kotlin拡張機能を入れるだけでは不十分な時がある。
- 裏側では Gradle (Java) が動いているため、正しいJavaバージョンの指定が必須。
- PCにJavaを乱立させず、Android Studio内蔵のJava (JBR) へのパスを通すのが一番手っ取り早くて安全。
「VS Codeで定義ジャンプができない!」という方は、拡張機能の設定だけでなく、**「裏で動いているJavaのバージョン」**を疑ってみてください。
Discussion