0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VS Code + GitHub Copilot + Java で開発環境がぶつかるポイントと回避策

0
Last updated at Posted at 2026-05-26

VS Code + GitHub Copilot + Java で開発環境がぶつかるポイントと回避策

はじめに

VS Code で Java 開発をするとき、複数の拡張機能が同時に動くため、
思わぬ場所で干渉・競合が発生することがあります。

特に以下の組み合わせでは注意が必要でした:

  • Language Support for Java (Red Hat製)
  • GitHub Copilot / GitHub Copilot Chat
  • Spring Boot Extension Pack
  • Maven Wrapper + プロジェクト内Node構成

この記事は、実際に遭遇したトラブルと回避策の記録です。


① run_in_terminal が jshell に吸われる問題

症状

VS Code のターミナルでコマンドを実行しようとすると、
jshell(Java の REPL)が起動しているセッションに誤って入力が流れる。

原因

Language Support for Java の拡張機能が起動時に jshell セッションを開くことがあり、
それがアクティブなターミナルと競合します。

回避策

VS Code のタスク(tasks.json)経由でコマンドを実行する。

// .vscode/tasks.json
{
  "tasks": [
    {
      "label": "build-skip-tests",
      "type": "shell",
      "command": ".\\mvnw.cmd",
      "args": ["-DskipTests", "package"],
      "options": {
        "cwd": "${workspaceFolder}"
      }
    }
  ]
}

タスクは独立したシェルで実行されるため、jshell の干渉を受けません。


② Java Language Server が古いJDKを掴む

症状

pom.xml で Java 21 を指定しているのに、
コードのエラーが Java 11 のルールで表示される。

原因

VS Code の Java Language Server が使用する JDK と、
プロジェクトのコンパイルターゲットが一致していない。

確認方法

コマンドパレット(Ctrl+Shift+P)→ Java: Configure Java Runtime

「Project JDK」が正しいバージョンになっているか確認

回避策

.vscode/settings.json で JDK を明示指定する。

// .vscode/settings.json
{
  "java.configuration.runtimes": [
    {
      "name": "JavaSE-21",
      "path": "C:\\Program Files\\Java\\jdk-21",
      "default": true
    },
    {
      "name": "JavaSE-25",
      "path": "C:\\Program Files\\Java\\jdk-25"
    }
  ],
  "java.jdt.ls.java.home": "C:\\Program Files\\Java\\jdk-21"
}

③ Copilot Chat の Agentモードがターミナルを占有する

症状

Copilot Agentがコマンドを実行するとき、
既に開いているターミナルのセッションに入力を送ることがある。
jshell が起動していた場合、mvn コマンドが jshell の入力として解釈される。

回避策

  • ターミナルで jshell が起動している場合は :exit で終了する
  • Copilot Agent にコマンド実行を依頼するときは、
    新しいターミナルを開いてからリクエストするか、タスクで実行してもらう

④ Lombok を使う場合のアノテーションプロセッサ設定

症状

@Getter, @Builder などのLombok アノテーションが赤波線になる。
コンパイルは通るのにエラー表示が消えない。

回避策

// .vscode/settings.json
{
  "java.compile.nullAnalysis.mode": "disabled",
  "java.configuration.updateBuildConfiguration": "automatic"
}

また、pom.xml に Lombok の dependency が正しく追加されているか確認:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

⑤ Spring Boot DevTools + Copilot の自動コンプリートが競合

症状

Spring Boot DevTools によるホットリロードが頻繁に走り、
Copilot の補完が途中でリセットされる。

対応

開発中は DevTools を有効にしつつ、
大規模な補完(クラス生成など)を行うときは一時的にアプリを停止する。

DevTools のリスタートトリガーを絞ることも有効です:

# application-local.yml
spring:
  devtools:
    restart:
      additional-exclude: "**/*.html,**/*.css,**/*.js"

⑥ マルチルートワークスペースでのJava Language Server競合

症状

複数のSpring Boot プロジェクト(admin / customer-app)を同一の VS Code ウィンドウで開くと、
Language Server がそれぞれのプロジェクトを別々に認識せず、
片方のプロジェクトのクラスが見えなかったりする。

原因

Java Language Server の Project ごとの認識に時間がかかることがある。

回避策

.code-workspace ファイルでマルチルートワークスペースを定義する。

// dvd-rental.code-workspace
{
  "folders": [
    {
      "name": "admin",
      "path": "C:\\Users\\y_104\\git\\dvd-rental-admin"
    },
    {
      "name": "customer-app",
      "path": "C:\\Users\\y_104\\git\\dvd-rental-customer-app"
    }
  ],
  "settings": {
    "java.import.maven.enabled": true
  }
}

まとめ

問題 回避策
ターミナルが jshell に吸われる tasks.json のタスクでコマンド実行
Language Server が古いJDKを使う .vscode/settings.json で JDK を明示
Copilot のターミナル実行が jshell に流れる jshell を :exit で終了してから依頼
Lombok の赤波線が消えない nullAnalysis.mode: disabled
マルチルートでのProject認識問題 .code-workspace ファイルで明示定義

VS Code での Java 開発は拡張機能が充実している反面、
複数の拡張機能が同じリソースを触ることによる干渉が起きやすいです。
「なんか動かない」と感じたら、まず Language Server の状態とアクティブなターミナルを確認するのが近道です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?