VS Code と Docker で始める!シンプルな Java 開発入門
はじめに
この記事では、Visual Studio Code (VS Code) と Docker を使って Java プログラミングを始めるための、最もシンプルで標準的な方法を解説します。ビルドツール(Maven
/Gradle
)は使わず、VS Code の拡張機能だけで完結するプロジェクトの作成、コーディング、デバッグ、テストまでの一連の流れを実践的に学びます。
なお、この記事の VS Code では Copilot の画面を閉じた状態で画面キャプチャしてあります。ご承知ください。
環境構築
本記事では、開発環境の差異をなくし、すぐに Java 開発を始められるように、Visual Studio Code の Dev Containers 拡張機能と、筆者が提供する開発コンテナーイメージ hiro345g/dvc:jdk-202507
を使用します。
前提条件
お使いの PC に VS Code がインストールされている必要があります。
また、次の VS Code
拡張機能もインストールしておいてください。
ほかにも、次のツールが必要です。
PowerShell を管理者モードで起動して、次のコマンドを実行するとインストールできます。
winget install -e --id Git.Git
wsl --install
Windows でのインストール方法についての詳細は次の記事を参考にしてください。
また、次の Docker のソフトウェアも必要です。
-
Docker
ただし、WSL Ubuntu
をインストールしてあれば、開発コンテナを使うときに自動で Docker in WSL
がインストールされます。
Docker in WSL
は WSL Ubuntu
へ Docker の公式リポジトリを登録して、docker-ce
パッケージ等をインストールするものです。
これで良い場合は自分でインストールする必要はありません。
個人なら Windows 環境で Docker を使いたい場合は Docker Desktop をインストールしても良いです。個人使用でない場合、Docker Desktop
の使用にあたって商用ライセンスが必要となる場合があるのでライセンスページの https://docs.docker.com/subscription/desktop-license/ を確認してください。
Windows で Docker Desktop
をインストールするには、PowerShell を管理者モードで起動して、次のコマンドを実行するとインストールできます。
winget install -e --id Docker.DockerDesktop
開発コンテナーのセットアップ
それでは開発コンテナーのセットアップをしてみましょう。
- PC 上にプロジェクト用のフォルダ(例:
dvc-java
)を作成します。 - VS Code でそのフォルダを開きます。
- VS Code のコマンドパレット (
Ctrl+Shift+P
) からDev Containers: Add Dev Container Configuration Files...
を実行します。 -
Java devcontainers
を選択します。 -
21-bullseye
を選択します。 - 後はデフォルトのまま、
0 個選択済み
のままで「OK」をクリックし続けます。
開発コンテナー構成ファイルを追加する時の画面
Java devcontainers を指定するときの画面
21-bullseye を指定するときの画面
Java開発コンテナーのオプションで選択0個の画面
インストールする追加機能で選択0個の画面
オプションのファイル/ディレクトリで選択0個の画面
これで、.devcontainer/devcontainer.json
ファイルが作成されて、Java 用の開発コンテナが使えるようになります。
{
"name": "Java",
"image": "mcr.microsoft.com/devcontainers/java:1-21-bullseye",
"features": {
"ghcr.io/devcontainers/features/java:1": {
"version": "none",
"installMaven": "false",
"installGradle": "false"
}
}
}
これをそのまま使っても良いのですが、筆者の場合はカスタマイズした開発コンテナを https://github.com/hiro345g/dvc で用意してあります。ここでは、その中にある hiro345g/dvc:jdk-202507
を "image":
に指定して使うことにします。
また、開発でよく使われる VS Code の拡張機能も使えるようにするため、devcontainer.json
の customizations.vscode.extensions
へ次のものを指定します。
拡張機能 | 拡張機能 ID | 説明 |
---|---|---|
Extension Pack for Java | vscjava.vscode-java-pack |
Java 開発用 |
Container Tools | ms-azuretools.vscode-containers |
Docker コンテナ管理用 |
Docker DX | docker.docker |
Docker 開発用 |
GitLens | eamodio.gitlens |
Git 操作用 |
Git History | donjayamanne.githistory |
Git 履歴表示用 |
Git Graph | mhutchie.git-graph |
Git グラフ表示用 |
以上の内容を反映するために、.devcontainer/devcontainer.json
を次のように書き換えます。
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/java
{
"name": "Java",
"image": "hiro345g/dvc:jdk-202507",
"customizations": {
"vscode": {
"extensions": [
"vscjava.vscode-java-pack",
"ms-azuretools.vscode-containers",
"docker.docker",
"eamodio.gitlens",
"donjayamanne.githistory",
"mhutchie.git-graph"
]
}
}
}
使用するイメージはサイズが大きいので、コンテナ起動前にあらかじめ docker image pull
コマンドで、ローカルマシンに Docker イメージをキャッシュしておきます。
docker image pull hiro345g/dvc:jdk-202507
準備ができたら、開発コンテナを起動するために、dvc-java
用の VS Code の画面で VS Code の左下のマークをクリックして表示されるメニューから「コンテナーで再度開く」を実行します。コマンドパレットを開いて、Dev Containers: Reopen in Container
を実行しても良いです。
コンテナーで再度開く時の画面
これにより、Java 開発に必要な環境が整った開発コンテナが起動し、VS Code が再起動します。それから、この開発コンテナにアタッチした VS Code の画面が表示されます。
開発コンテナにアタッチした VS Code の画面
VS Code の画面の左下を見ると、開発コンテナにアタッチしていることがわかる表示となっています。
このとき、devcontainer.json
で指定した Extension Pack for Java
(vscjava.vscode-java-pack
)なども自動でインストールされます。
開発コンテナが起動したら、拡張機能の画面を表示して Extension Pack for Java
が有効化されていることを確認します。もし無効化されていたら、有効化するために、Extension Pack for Java
拡張機能の欄にある歯車のアイコンをマウスクリックしてコンテキストメニューを表示します。それから、メニューにある「有効にする(ワークスペース)」をクリックします。
拡張機能を有効にする時の画面
VS Code での Java プロジェクト管理
VS Code で Java プロジェクトの管理について理解するには、Extension Pack for Java
拡張機能に含まれる Project Manager for Java
拡張機能(vscjava.vscode-java-dependency
)から使い始めるのが良いです。単純な Java のサンプルコードを動かしたい場合は、Maven
や Gradle
といったビルドツールを使ったプロジェクト管理は大袈裟です。
そのため、ここでは、Maven
や Gradle
といったビルドツールを使わない、最も基本的な Java プロジェクトを作成して使ってみることにします。
このとき、Java のプロジェクト画面を表示させることができなくて困ることがあります。よくあるパターンは次のものです。
- A: 開いているフォルダが Java プロジェクトだと認識されていない
- B: セカンダリー サイド バーに表示される設定となっている
A については、Java のソースファイルを開くと Java プロジェクトと認識されます。
B については、VS Code のメニューからセカンダリ サイド バーを表示することで解決できます。具体的には、「表示」-「外観」-「セカンダリ サイド バー」をクリックします。
Java のプロジェクト画面が表示できないときは、慌てずに、これらについて確認するようにしてください。
プロジェクトの作成
次の手順で Java プロジェクトを作成します。
- コマンドパレット (
Ctrl+Shift+P
) を開き、Java: Create Java Project...
を選択します。 -
No build tools
を選択します。 - プロジェクトの場所として
/workspaces/dvc-java
を選択します。 - プロジェクト名(例:
java-app001
)を入力して Enter を入力します。
このときの画面は次のようになります。
Java: Create Java Project...
の画面
No build tools
を選択する画面
このとき、次の通知が表示される場合があります。統計データを収集する Red Hat に協力する場合は「Accept」をクリックします。拒否する場合は「Deny」をクリックします。
統計データを収集する Red Hat に協力するか選択する通知
Select the project location
を指定する画面
Input a Java project name
を指定する画面
すると、java-app001
という名前のフォルダが次のようなフォルダ構成で作成され、src
フォルダにプログラム App.java
が作成されます。
java-app001/
├── README.md
├── lib/
└── src/
└── App.java
また、java-app001
を開いた VS Code 画面が新規に表示されます。
Java プロジェクトの画面構成
Java プロジェクトでは、VS Code のエクスプローラーに「JAVA PROJECTS」という専用のビューが追加されます。java-app001
を開いた VS Code の画面で src/App.java
を開くと次のようになります。
JAVA PROJECTSのビューが表示された時の画面
この専用ビューは Java 開発に特化したプロジェクト管理機能で、主に以下の要素で構成されています。
- プロジェクト名 (例:
java-app001
):-
src
: ソースコード (.java
ファイル) が格納されるフォルダです。App.java
やAppTest.java
はここに置きます。 -
JRE System Library [JavaSE-21]
: 実行時に使用する Java Runtime の情報が表示されます。 -
Referenced Libraries
: プロジェクトが参照するライブラリ (JAR ファイル) の一覧です。JUnit や SLF4J などを追加すると、ここに表示されます。ライブラリの追加・削除もこのビューから行えます。 -
bin
: コンパイル後のクラスファイル (.class
ファイル) が出力されるフォルダです。作成後に表示されます。通常は直接編集することはありません。
-
このビューを使うことで、ライブラリの管理やソースコードの構造を直感的に把握できます。
コーディングと実行
それでは、開いてある src/App.java
のコードを編集して実行してみましょう。
/**
* メインクラス
*/
public class App {
/**
* プログラムのエントリーポイント。
* "Hello, World from VS Code!" というメッセージを標準出力に出力します。
* @param args コマンドライン引数(未使用)
* @throws Exception 例外が発生した場合
*/
public static void main(String[] args) throws Exception {
System.out.println("Hello, World from VS Code!");
}
}
main
メソッドの上にある Run
をクリックするか、F5
キーを押すとプログラムが実行されます。
プログラムを実行する時の画面
プログラムを実行すると、ターミナルに "Hello, World from VS Code!" と表示されます。
node ➜ /workspaces/dvc-java/java-app001 $ /usr/bin/env /usr/local/sdkman/candidates/java/21.0.7-tem/bin/java -XX:+ShowCodeDetailsInExceptionMessages -cp /workspaces/dvc-java/java-app001/bin App
Hello, World from VS Code!
デバッグ
コードの動きをステップごとに追うデバッグ機能を試します。
-
System.out.println
の行の左側をクリックして、赤い丸(ブレークポイント)を設置します。 -
main
メソッドの上にあるDebug
をクリックするか、F5
キーを押します。 - プログラムがブレークポイントで一時停止し、画面左の「実行とデバッグ」ビューで変数の中身を確認したり、画面上部に表示されるツールバーのアイコンを使ってステップ実行(ステップオーバー/イン/アウト)したりできます。
ブレークポイントを指定してデバッグ実行する時の画面
プログラムがブレークポイントで一時停止した画面
テスト
作成したプログラムの動作確認をするには自動テストができるようにしておくことが重要です。ここでは自動テストができるようにしましょう。
テスト用ライブラリの準備をしてから、テストコードを作成して、テスト実行をしてみます。その際、意味のある単体テストを作成するために、App.java
のコードを少し変更(リファクタリング)します。
現在のコードでは、main
メソッドが表示メッセージの作成と出力を両方行っており、このままではテストが困難です。そこで、メッセージを生成するロジックを独立したメソッドに切り出し、そのメソッドをテストの対象とします。
テスト用ライブラリの準備
テストを作成する前に、テスト用ライブラリの準備をします。クラスパスにライブラリ用の JAR ファイルを設定する必要があります。
エクスプローラーの「JAVA PROJECTS」ビューにある「Referenced Libraries」にライブラリ用の JAR ファイルが表示されるようにします。
まず、次のライブラリを Maven Central Repository からダウンロードします。Maven Central Repository は Java 用のライブラリを公開しているサイトです。
次の画面は、VS Code をアタッチした開発コンテナのターミナルを使って作業をするときのものになります。
ターミナルでテスト用ライブラリの準備をするときの画面
VS Code のメニューで「ターミナル」-「新しいターミナル」をクリックすると、VS Code の画面右下側にターミナルのパネルが表示されます。そこで、次の curl
コマンドを使って、必要なファイルを入手することができます。
curl -L -O https://repo1.maven.org/maven2/junit/junit/4.13.2/junit-4.13.2.jar
curl -L -O https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar
入手したファイルはプロジェクトフォルダ内の lib
フォルダに置きます。ファイルの移動には mv
コマンドを使います。
mv junit-4.13.2.jar lib/
mv hamcrest-core-1.3.jar lib/
これで Java プロジェクトの画面でライブラリ(Referenced Libraries)に junit と hamcrest-core の JAR ファイルが追加されます。
ファイル移動後に、VS Code に反映されない場合は、次の図のように「エクスプローラー」の画面にある「JAVA-APP001」のあたりにマウスポインタを近づけると「エクスプローラーを最新表示する」というメッセージを表示するアイコンがあるので、これをクリックします。すると、ファイルの移動が反映されます。
ターミナルでテスト用ライブラリの準備をするときの画面
「Referenced Libraries」の表示についても、マウスポインタを近づけると「Refresh」というメッセージを表示するアイコンをクリックすることで、反映されます。
なお、JAR ファイルを別のパスに置きたい場合は、手動で設定が必要です。そのときの手順は次のようになります。
- VS Code のエクスプローラーで「JAVA PROJECTS」ビューを開きます。
-
java-app001
プロジェクト内のReferenced Libraries
にカーソルを合わせると表示される+
アイコンをクリックします。 - 使用する JAR ファイルのパスを選択し、「Select Jar Libraries」をクリックします。
App クラスへメソッド追加
ここでは、src/App.java
を変更し、挨拶メッセージを返す getGreeting()
メソッドを追加することにします。メソッドの仕様としては次のような型を満たすとします。
/**
* 挨拶用の固定メッセージ "Hello, World from VS Code!" を返却します。
*
* @return 固定メッセージ
*/
String getGreeting();
テストコードの作成
まず、この getGreeting()
メソッドをテストするコードを記述します。src
フォルダを右クリックし表示されるメニューにある「新しいファイル」をクリックします。エクスプローラー内で新しいファイル名を入力する欄が表示されるので、AppTest.java
と入力して、このファイルを作成します。
src/AppTest.java 作成時の画面
src/AppTest.java
には次のテストコードを記述します。getGreeting()
メソッドが期待通りの文字列を返すかを assertEquals
を使って検証します。
import static org.junit.Assert.assertEquals;
import org.junit.Test;
/**
* App クラスのテストクラス
*/
public class AppTest {
/**
* getGreeting メソッドのテスト。
* 戻り値が期待通りのメッセージであることを検証します。
*/
@Test
public void testGetGreeting() {
// App.getGreeting()を呼び出し、戻り値が期待通りか検証
assertEquals("Hello, World from VS Code!", App.getGreeting());
}
}
テスト用のライブラリが正しくプロジェクトへ追加されていると、testGetGreeting
メソッドやクラス定義の左側に実行用のアイコンボタンが表示されます。
テスト実行時の画面
ここでテスト実行をクリックすると、ここでは、App クラスには、まだ getGreeting()
メソッドは実装されていないため、ビルドが失敗します。ビルドが失敗すると、テスト実行を続けるかどうかの通知が VS Code の画面右下側に表示されます。
続けると当然テストが失敗して、画面左の「テスト」ビューの結果に赤いマークがつきます。
テスト失敗時の画面
もしテストが実行されて成功した場合は、画面左の「テスト」ビューの結果に緑のチェックマークが付きます。
テストが通るようにコード修正
次に、テストが通るように src/App.java
を変更します。App
クラスに getGreeting()
メソッドを追加しています。
/**
* メインクラス
*/
public class App {
/**
* 挨拶用の固定メッセージを返します。
* @return "Hello, World from VS Code!" という文字列
*/
public static String getGreeting() {
return "Hello, World from VS Code!";
}
/**
* プログラムのエントリーポイント。
* getGreeting() メソッドで取得したメッセージを標準出力に出力します。
* @param args コマンドライン引数(未使用)
* @throws Exception 例外が発生した場合
*/
public static void main(String[] args) throws Exception {
System.out.println(getGreeting());
}
}
テストが成功することを確認
src/App.java
を修正したら、src/AppTest.java
のテストを実行します。今度は用意してあるテストがグリーンとなるはずです。
テスト成功時の画面
これにより、getGreeting()
メソッドが正しく動作していることが保証されます。
応用: ログ出力ライブラリの導入
次に、より実践的なアプリケーション開発で必須となる「ログ出力」を試してみましょう。ここでは、広く使われているロギングライブラリである SLF4J を手動でプロジェクトに追加し、利用する手順を解説します。
ログ出力用ライブラリのダウンロード
Maven Central Repository から必要なライブラリ(JAR ファイル)をダウンロードします。
- SLF4J API: slf4j-api-2.0.17.jar
- SLF4J Simple Binding: slf4j-simple-2.0.17.jar
curl
コマンドを使って入手する場合は次のようにします。
curl -L -O https://repo1.maven.org/maven2/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar
curl -L -O https://repo1.maven.org/maven2/org/slf4j/slf4j-simple/2.0.17/slf4j-simple-2.0.17.jar
ダウンロードした 2 つの JAR ファイルを、java-app001/lib
フォルダへ移動します。
mv slf4j-api-2.0.17.jar lib/
mv slf4j-simple-2.0.17.jar lib/
これで Java プロジェクトの画面でライブラリ(Referenced Libraries)に slf4j-api と slf4j-simple の JAR ファイルが追加され、プロジェクトで SLF4J の機能が使えるようになります。
ログ出力コードの記述
src/App.java
を、テストの節で作成した getGreeting()
メソッドにログ出力処理を追加する形で、以下のように書き換えます。ロジックの実行とログ記録を同じメソッド内で行います。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* メインクラス
*/
public class App {
/** ロガー */
private static final Logger logger = LoggerFactory.getLogger(App.class);
/**
* 挨拶用の固定メッセージを返し、その過程でログを出力します。
* @return "Hello, World from VS Code!" という文字列
*/
public static String getGreeting() {
logger.info("This is an info message.");
logger.warn("This is a warning message.");
logger.error("This is an error message.");
return "Hello, World from VS Code!";
}
/**
* プログラムのエントリーポイント。
* getGreeting() メソッドで取得したメッセージを標準出力に出力します。
* @param args コマンドライン引数(未使用)
* @throws Exception 例外が発生した場合
*/
public static void main(String[] args) throws Exception {
System.out.println(getGreeting());
}
}
F5
キーを入力するなどして、src/App.java
のプログラムを実行すると、ターミナルに指定したログと、getGreeting()
が返した Hello, World from VS Code!
というメッセージの両方が出力されるはずです。
node ➜ /workspaces/dvc-java/java-app001 $ /usr/bin/env /usr/local/sdkman/candidates/java/21.0.7-tem/bin/java @/tmp/cp_3abpth1v0yse1o3qj01g78dhc.argfile App
[main] INFO App - This is an info message.
[main] WARN App - This is a warning message.
[main] ERROR App - This is an error message.
Hello, World from VS Code!
ビルドと実行のスクリプト化
毎回 VS Code の実行ボタンを押す代わりに、コマンドラインからビルド、テスト実行、プログラム実行ができるようにスクリプトを用意しておくと便利です。java-app001
フォルダに script
フォルダを用意して、これから紹介する 3 つのファイルを作成します。
ターミナルでフォルダを作るには mkdir
コマンドを使います。今回使っている開発コンテナの場合は、カレントフォルダを /workspace/java-app001
として次のようにします。
cd /workspace/java-app001
mkdir script
ビルドスクリプト (build.sh)
Java のソースコードをコンパイルして java-app001/bin
フォルダにクラスファイルを生成します。
#!/bin/bash
SCRIPT_DIRNAME=$(dirname "$0")
PROJECT_DIR=$(cd "${SCRIPT_DIRNAME}/.." || exit 1;pwd)
# bin, lib フォルダがなければ作成
if [ ! -e "${PROJECT_DIR}/bin" ]; then mkdir -p "${PROJECT_DIR}/bin"; fi
if [ ! -e "${PROJECT_DIR}/lib" ]; then mkdir -p "${PROJECT_DIR}/lib"; fi
# 必要なライブラリを確認し、なければダウンロード
if [ ! -e "${PROJECT_DIR}/lib/slf4j-api-2.0.17.jar" ]; then
curl -L -O https://repo1.maven.org/maven2/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar
mv slf4j-api-2.0.17.jar "${PROJECT_DIR}/lib/slf4j-api-2.0.17.jar"
fi
if [ ! -e "${PROJECT_DIR}/lib/slf4j-simple-2.0.17.jar" ]; then
curl -L -O https://repo1.maven.org/maven2/org/slf4j/slf4j-simple/2.0.17/slf4j-simple-2.0.17.jar
mv slf4j-simple-2.0.17.jar "${PROJECT_DIR}/lib/slf4j-simple-2.0.17.jar"
fi
# コンパイル
javac -d "${PROJECT_DIR}/bin" -cp "${PROJECT_DIR}/lib/*:${PROJECT_DIR}/src" "${PROJECT_DIR}/src/App.java"
echo "Build successful!"
テストスクリプト (test.sh)
src/AppTest.java
のテストを実行します。
#!/bin/bash
SCRIPT_DIRNAME=$(dirname "$0")
PROJECT_DIR=$(cd "${SCRIPT_DIRNAME}/.." || exit 1;pwd)
# bin, lib フォルダがなければ作成
if [ ! -e "${PROJECT_DIR}/bin" ]; then mkdir -p "${PROJECT_DIR}/bin"; fi
if [ ! -e "${PROJECT_DIR}/lib" ]; then mkdir -p "${PROJECT_DIR}/lib"; fi
# 必要なライブラリを確認し、なければダウンロード
if [ ! -e "${PROJECT_DIR}/lib/junit-4.13.2.jar" ]; then
curl -L -O https://repo1.maven.org/maven2/junit/junit/4.13.2/junit-4.13.2.jar
mv junit-4.13.2.jar "${PROJECT_DIR}/lib/junit-4.13.2.jar"
fi
if [ ! -e "${PROJECT_DIR}/lib/hamcrest-core-1.3.jar" ]; then
curl -L -O https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar
mv hamcrest-core-1.3.jar "${PROJECT_DIR}/lib/hamcrest-core-1.3.jar"
fi
# コンパイル
javac -d "${PROJECT_DIR}/bin" -cp "${PROJECT_DIR}/lib/*:${PROJECT_DIR}/src" "${PROJECT_DIR}/src/AppTest.java"
# テスト実行
java -cp "${PROJECT_DIR}/lib/*:${PROJECT_DIR}/bin" org.junit.runner.JUnitCore AppTest
実行スクリプト (run.sh)
コンパイルされたクラスファイルを実行します。
#!/bin/bash
SCRIPT_DIRNAME=$(dirname "$0")
PROJECT_DIR=$(cd "${SCRIPT_DIRNAME}/.." || exit 1;pwd)
# ビルド時とテスト実行時に必要な準備はしてあるため、ここでは実行するのみ
java -cp "${PROJECT_DIR}/lib/*:${PROJECT_DIR}/bin" App
実行
これらのファイルに実行権限を与えます。
chmod +x script/*.sh
ターミナルからビルドを実行してクラスファイルを生成します。
./script/build.sh
ビルドが成功したら、テスト実行します。
./script/test.sh
テスト実行が成功したら、プログラムを実行します。
./script/run.sh
実行例は次のようになります。
node ➜ /workspaces/dvc-java/java-app001 $ ./script/build.sh
Build successful!
node ➜ /workspaces/dvc-java/java-app001 $ ./script/test.sh
JUnit version 4.13.2
.[main] INFO App - This is an info message.
[main] WARN App - This is a warning message.
[main] ERROR App - This is an error message.
Time: 0.017
OK (1 test)
node ➜ /workspaces/dvc-java/java-app001 $ ./script/run.sh
[main] INFO App - This is an info message.
[main] WARN App - This is a warning message.
[main] ERROR App - This is an error message.
Hello, World from VS Code!
ワークスペースと設定の活用
複数のプロジェクトを管理したり、プロジェクト固有の設定を共有したりするために、VS Code の「ワークスペース」機能が役立ちます。また、Java 開発をより快適にするための設定も見ていきましょう。
.vscode/settings.json
設定ファイル java-app001
フォルダ作成時に、設定ファイル .vscode/settings.json
が自動で作成されています。このファイルの内容は次のようになっています。
{
"java.project.sourcePaths": ["src"],
"java.project.outputPath": "bin",
"java.project.referencedLibraries": ["lib/**/*.jar"]
}
このファイルを編集することで、プロジェクトの設定をカスタマイズすることができます。
設定画面 (Settings)
VS Code の設定は、UI から変更することもできます。
-
Ctrl+,
(カンマ) を押すか、VS Code のメニューで「ファイル」-「ユーザー設定」-「設定」から設定画面を開きます。 - 検索ボックスに
java
と入力すると、Java 関連の設定項目を一覧で確認・変更できます。
例えば、フォーマットの設定や、Java のバージョン、デバッグ時の設定などが細かく調整可能です。
なお、UI で行った設定は、settings.json
というファイルに保存されます。設定画面のタブ毎に別のパスにある settings.json
ファイルが用意されています。対応する settings.json
を直接編集することで、設定することもできます。
ワークスペースごとに設定を分けたい場合は、.code-workspace
ファイル内の settings
ブロックに記述することで、そのワークスペースを開いているときだけ有効な設定を定義できます。これにより、プロジェクトの規約などをチームで共有しやすくなります。
ワークスペースファイルの作成 (.code-workspace)
ワークスペース固有の設定は、.code-workspace
ファイルを作成して保存しておくとカスタマイズや共有がしやすくなります。ここではワークスペースファイルを用意して、Java 開発に便利な設定を追加してみましょう。
java-app001
フォルダ直下に次の内容のファイルを java-app001.code-workspace
という名前で作成します。
{
"folders": [
{
"path": "."
}
]
}
このファイルを VS Code のエディタ画面で開くと「ワークスペースを開く」というボタンが表示されます。
「ワークスペースを開く」ボタンが表示された画面
ワークスペースを使う場合は、このボタンをクリックするか、VS Code のメニューから「ファイル」-「ファイルでワークスペースを開く」をクリックして、ワークスペース用のファイルを開きます。
ここでは、まだワークスペースは開かずにファイルの編集を続けます。
以下に、Java 開発でよく使われる設定のサンプルを示します。コメントに簡単ですが説明をしてあります。
{
// ワークスペースに含めるフォルダを指定
"folders": [
{
"path": "."
}
],
// ワークスペース全体に適用する設定
"settings": {
// Javaのバージョン設定
// Dev Container を使っている場合は不要なことが多いですが、明示的に指定する例です
"java.configuration.runtimes": [
{
"name": "JavaSE-21",
"path": "/usr/local/sdkman/candidates/java/21.0.7-tem", // Dev Container内のJDKパス
"default": true
}
],
// ファイル保存時に自動でフォーマットする
"editor.formatOnSave": true,
// .vscode/settings.json にあった設定の反映。
// こちらを使う場合、`.vscode/setting.json` は削除して良い。
"java.project.sourcePaths": [
"src"
],
"java.project.outputPath": "bin",
"java.project.referencedLibraries": [
// 参照ライブラリのパスを指定 (globパターンが使えます)
"lib/**/*.jar"
],
// Lombok などの Java エージェントを使う場合の設定例(必要ならコメント解除)
// "java.jdt.ls.vmargs": "-noverify -Xmx1G -jar /path/to/lombok.jar -Djava.awt.headless=true",
// エクスプローラーから直接操作することのないファイル/フォルダを非表示
"files.exclude": {
"**/.git": true,
"**/.svn": true,
"**/.hg": true,
"**/CVS": true,
"**/.DS_Store": true,
"**/Thumbs.db": true,
"**/bin": true, // コンパイル後のクラスファイル
"**/.settings": true, // Eclipse 固有の設定ファイル
"**/.classpath": true,
"**/.project": true
}
},
// ワークスペースで推奨する拡張機能
"extensions": {
"recommendations": [
"vscjava.vscode-java-pack",
"ms-azuretools.vscode-containers",
"docker.docker",
"eamodio.gitlens",
"donjayamanne.githistory",
"mhutchie.git-graph"
]
}
}
このワークスペースファイルを開いて開発を進めることで、チーム内で設定を統一したり、個人の開発効率を向上させたりすることができます。
編集ができたら、ワークスペースを開いてみましょう。「エクスプローラー」のフォルダ名が表示されていた部分が少し変わってワークスペースの表示になります。
開発コンテナの終了
開発作業が終了したら、開発コンテナを終了します。
今回使用した開発コンテナは WSL Ubuntu の Docker で起動しています。VS Code を終了させてから、WSL Ubuntu のコンソールを使って終了します。
docker container ls
コマンドでコンテナの一覧が表示されます。ここで、イメージ名が vsc-dvc-java
で始まるものが、今回使用した開発コンテナになります。実行例は次のようになります。
$ docker container ls -a
CONTAINER ID IMAGE (略) NAMES
1163c3280882 vsc-dvc-java-9f(略)-uid (略) stupefied_mclean
docker container stop
コマンドで停止します。
$ docker container stop stupefied_mclean
stupefied_mclean
開発を再開する場合は、VS Code から「コンテナーで再度開く」を実行します。もし、停止したものが使われず、新しい開発コンテナが起動してしまう場合は、この後説明する方法で開発コンテナを終了してください。
開発コンテナを終了したい場合は docker container rm
コマンドを実行します。実行例は次のようになります。
$ docker container rm stupefied_mclean
stupefied_mclean
まとめ
本記事では、VS Code と Dev Containers を使い、ビルドツールに頼らないシンプルな Java 開発フローを一通り解説しました。環境構築から始まり、プロジェクト作成、コーディング、デバッグ、テスト、さらに応用として外部ライブラリの導入とスクリプトによる自動化、そしてワークスペースの活用まで、基本的ながらも実践的な内容を網羅しました。
こういった基本をマスターしておけば、複雑なフレームワークやライブラリを使った開発でトラブルにあったときの問題解決に役立ちます。たとえば、使用したいライブラリーが意図した通りに動かない場合に、複雑なフレームワークの構成の中で動かすのではなく、こういった基本的な構成のプロジェクトで動作確認することができるようになります。
Discussion