こんにちは、テクマトリックスの米田です。
今回はVisual Studio Code(以下、VS Code)の拡張機能であるDev Containersを利用して開発環境のコンテナを作成し、弊社取扱製品のJavaの静的解析ツールJtestを使用してみたので、ご紹介します。
目次
Dev Containersとは
Dev ContainersはVS Codeの拡張機能の一つで、Dockerコンテナ内でVS Codeを利用できる開発環境を提供します。Dev Containersを用いた開発コンテナの構築には以下のようなメリットがあります。
- 開発環境の一貫性:開発コンテナの設定や拡張機能は、devcontainer.jsonに記述します。これにより複数人でも一貫性のある環境を共有することができます。
- 柔軟性と拡張性:公式に提供されているイメージや、自身で作成したDockerfileやdocker-compose.ymlを使用して開発コンテナを構築することができます。また、開発コンテナを構築した後でもdevcontainer.jsonに記述した設定を変更することができるため、プロジェクトの要件に合わせて開発環境を柔軟にカスタマイズできます。
- ローカルマシンと同様の開発体験:開発コンテナ内でVS Codeを利用できるため、ローカル環境と同様にVS Codeの様々な機能を開発コンテナ内で活用することができます。
(本記事ではVS Codeの拡張機能を”Dev Containers”、拡張機能Dev Containersにより構築されたコンテナを”開発コンテナ”と呼びます。)
出典:Dev Containers公式サイト
最終目標
今回の最終目標は、Dev Containersを使用してJavaを利用できる開発コンテナを構築し、mavenによりビルドを行い、さらにJtestを利用して静的解析を実施することです。
- 言語:Java (Openjdk 11.0.19)
- ビルドツール:Apache Maven 3.6.3
- テストツール:Jtest 2023.1.2
開発コンテナの構築・Jtestの利用
前提条件
以下、インストールとセットアップを事前にしておきます。今回は括弧内のバージョンを使用しました。
- Visual Studio Code (1.89.1)
- Docker Desktop (4.30.0)
手順
1. 拡張機能Dev Containersをインストール
VS Codeに、開発コンテナの構築に必要な拡張機能Dev Containersをインストールします。今回はバージョン0.362.0をインストールしました。
2. 各ファイルの配置
以下の構成で各ファイルを用意します。
- jtestcli.properties:Jtestの設定ファイルです。ライセンスを設定します。詳細はこちら。
- pom.xml:mavenプロジェクトの設定ファイルです。
- settings.xml:JtestとMavenの連携ファイルです。詳細はこちら。
- devcontainer.json:Dev Containersで開発コンテナを構築する際に必要な設定ファイルです。
- Dockerfile:ビルドイメージに指定する日本語版JtestのDockerfileです。openjdk11やmavenのインストールも設定しています。詳細はこちら。
- src:Javaのソースコードが格納されているフォルダです。
ここでは”jtestcli.properties” “pom.xml” “settings.xml” “Dockerfile”の設定に関する手順は省略します。
3. devcontainer.jsonの記述
開発コンテナの構築に関する設定は.devcontainerフォルダ内のdevcontainer.jsonに記述します。まずは以下のように記述します。
{
"name": "DevContainers_Jtest_Demo", //開発コンテナの名前
"build": {
"dockerfile": "Dockerfile" //ビルドイメージを相対パスで指定
}
}
4. 開発コンテナの起動
VS Code画面左下の><マークをクリックし、”コンテナーで再度開く”を選択することで、devcontainer.jsonを基に開発コンテナを構築します。左下の><マークに、”開発コンテナー:<自身で設定した開発コンテナの名前>”が表示されれば開発コンテナにアクセスできており、ターミナルタブのディレクトリ表示も変わります。各ファイルは開発コンテナへマウントされます。
構築した開発コンテナにはJavaやmavenがインストールされています。ターミナルタブで以下のコマンドを入力すると、開発コンテナにJavaやmavenがインストールされていることが分かります。
$ java -version
openjdk version "11.0.19" 2023-04-18 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.19.0.7-2) (build 11.0.19+7-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.19.0.7-2) (build 11.0.19+7-LTS, mixed mode, sharing)
$ mvn -version
Apache Maven 3.6.3
Maven home: /opt/apache-maven-3.6.3
Java version: 11.0.19, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-11-openjdk-11.0.19.0.7-4.el8.x86_64
Default locale: ja_JP, platform encoding: UTF-8
OS name: "linux", version: "5.10.16.3-microsoft-standard-wsl2", arch: "amd64", family: "unix"
5. 拡張機能Jtestのインストール
サイドバーの拡張機能タブでJtestを入力し、選択します。歯車マークから”devcontainer.jsonに追加”を選択します。これにより開発コンテナ起動時に拡張機能Jtestがインストールされるようにdevcontainer.jsonに反映されます。今回はブログ執筆時点で最新のバージョン2023.2.1をインストールします。devcontainer.jsonに変更が加わると開発コンテナを再度ビルドする必要があります。devcontainer.jsonに変更が加わったことにより右下に表示される”Rebuild”、もしくは><マークをクリックして表示される”コンテナーのリビルド”を選択し、開発コンテナを再度ビルドして開発コンテナへ拡張機能をインストールします。
また、こちらの手順5は開発コンテナ構築前の手順3で実施してもよいです。
{
"name": "DevContainers_Jtest_Demo", //開発コンテナの名前
"build": {
"dockerfile": "Dockerfile" //ビルドイメージを相対パスで指定
},
"customizations": {
"vscode": {
"extensions": [
"parasoft.vscode-jtest" //拡張機能Jtestのインストール
]
}
}
}
6. 拡張機能Jtestの設定
インストールした拡張機能Jtestを選択し、歯車マークから”拡張機能の設定”を選択します。ここでは実行するコマンドやテストコンフィギュレーション、レポートの出力ディレクトリなどを設定することができます。今回は以下のように設定します。
7. Jtestによる解析の実行
解析したいソースコードフォルダで右クリックして、”jtest: Analyze Selected Files”を選択することでJtestによる解析が実行されます。解析コマンドは手順6で設定した内容を基にしたコマンドになります。
解析完了後は問題タブに解析された問題が出力され、選択すると該当箇所のソースコードを確認することができます。また、手順6で指定したReport Locationにreportsフォルダが出力され、解析結果に関するファイルが生成されます。その他VS Codeを使ったJtestによる解析についてはこちらをご覧ください。
まとめ
今回はVS Codeの拡張機能であるDev Containersを利用してJavaを利用できる開発コンテナを作成し、その中でJtestを利用してみました。Dev Containersを利用することで所望の開発環境を容易に構築でき、複数のコンテナを立ち上げることなく同じ開発コンテナ内でテストを実行することができるので、非常に便利でした。Dev Containersの学習にあたっては、Microsoftから公式に提供されているビルドイメージやサンプルプロジェクトもあるので、手を付けやすい機能だと感じました。ぜひこの機会にDev ContainersやJtestのご利用を検討してみてはいかがでしょうか。