📝

【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の文法を知りません。

  1. VS Codeが「ここクリックされたよ!」と裏方の Language Server に伝える。
  2. Language Server(Javaで動作)がコードを解析して「それはこのファイルのこの行だよ」と返す。
  3. VS Codeがそこにジャンプする。

という連携プレーをしています。
今回はこの「裏方さん(Server)」が、Javaのバージョン違いでそもそも立ち上がっていなかった、というのが真相でした。

まとめ

  • VS CodeでKotlin/Android開発をするなら、Kotlin拡張機能を入れるだけでは不十分な時がある。
  • 裏側では Gradle (Java) が動いているため、正しいJavaバージョンの指定が必須。
  • PCにJavaを乱立させず、Android Studio内蔵のJava (JBR) へのパスを通すのが一番手っ取り早くて安全。

「VS Codeで定義ジャンプができない!」という方は、拡張機能の設定だけでなく、**「裏で動いているJavaのバージョン」**を疑ってみてください。

Discussion