Dev Containerで開発環境構築
ローカルの開発環境って様々なソフトウェアや言語、ミドルウェア等をインストールしていくとごちゃごちゃして、自分でも何を入れたのか分からなくなってきます。最近新しくノートPCを買ったので、これを機にWindowsのローカル環境を綺麗に保ちながら、再現性のある開発環境を構築する、ということを目標にやっていきたいと思います。
やること
- 開発環境をWindowsのDocker上で動くDev Containerとする。
- ローカル環境からVS Codeの拡張機能(Remote Development)を利用して開発環境へアクセスする。
ローカル環境を構築
Windows側に最低限入れるもの
- VS Code
- VS Code Remote Development拡張機能
- Docker Desktop for Windows
- WSL2
上記以外のものは極力ローカルではなく、Dev Container側にインストールします。
Docker Desktop for Windows
事前設定(WSL2)
WSL2がセットアップされていない場合、インストールしてアップデート
wsl --install
wsl --update
Docker Desktop for Windowsをインストール
Docker Desktop for Windowsをインストール
VS Code
VS Codeをインストール
VS Codeをダウンロードしてインストール
VS Code拡張機能をインストール
VS CodeにRemote Development 拡張機能パックをインストール
Dev Containerを構築
この辺を参考に進めました。
Dev Containerの初期化
- VS Codeを開く
-
Ctrl + P
でコマンドパレットを開く -
>Dev Containers Open Folder in Container
を選択しプロジェクトを作りたいフォルダを選択
作りたい環境を選択していきます。
今回はJava17で設定しますが、ここでPythonでも何でも自分が構築したい環境のベースを選択出来ます。
-
Java devcontainers
を選択 -
17
を選択 -
Install Gradle ...
にチェック
初めに選択したフォルダに.devcontainer
フォルダが作成され、フォルダ内に.devcontainer.json
ファイルが作成されます。
VS Code左下の緑のマークがDev Container:XXXXとなっていれば、作成されたコンテナにローカルからリモート接続した状態となっています。
この状態としては、devcontainer.json
に書かれた内容でコンテナが作成され、作成されたコンテナにVS Codeからリモート接続した状態になっています。
逆に、ホストマシンから普通にフォルダを開きたい場合には、緑のマークを押下>Reopen Folder Lolaclly
を押せば、ホストマシンの環境で開きなおしてくれます。
Dev Containerの拡張設定
これだけでも開発は進められますが、ある程度の環境構築は自動でやってくれるように、
Dev Container側にVS Codeの拡張機能をインストールします。
-
devcontainer.json
に追記
"extensions": [
"vmware.vscode-boot-dev-pack",
"vscjava.vscode-spring-initializr",
"vscjava.vscode-gradle"
],
"forwardPorts": [8080],
"remoteUser": "root"
以下の設定を追加しています。
- Spring Bootの拡張機能を追加
- Gradleの拡張機能を追加
- コンテナからホストへPort8080をフォワード
- コンテナをrootユーザで実行
編集したら保存して、左下のメニューからRebuild Container
を選択して実行します。
これで、Javaで開発する基盤が整いました。
Spring Bootプロジェクトの作成+実行テスト
以前の記事と同じことを今度はDev Containerで行います。
Spring Bootプロジェクト作成の作成
Dev ContainerでSpring Initializrを利用して、Spring Bootプロジェクトを作成し、実際に動くか確認します。
プロジェクト作成後にGradleの拡張機能が認識されない場合は、Dev Containerのsettings.jsonに以下を追記します。
"gradle.nestedProjects": true
Webアプリケーション実行
GradleタスクからbootRun
を実行します。
Spring Bootのウェブアプリケーションはデフォルトでポート8080で公開されます。
ホストマシンからアクセス
ポート8080をコンテナからWindowsへフォワードしてるので、以下URLでアクセスが出来ます。
http://localhost:8080
以上を行うことで、作成したDev Containerを利用してローカルから隔離された開発環境を構築することが出来るようになりました。また、devcontainer.jsonはIaC的にどこでも同じ開発環境が構築できるので、Docker・VS Codeが動作する環境であれば、すぐに同じ環境が再現できるようになりました。
また、開発環境には初めからGitも入ってるので、既存のGitリポジトリからソースを取得したり、新たにPushしたりすることも簡単に出来ます。
私は普段、VS CodeではGit Graph等を利用させて貰っています。
以下もdevcontainer.json
のextensions
に追加しておくとGitも見やすいかなと思います。
"vscjava.vscode-gradle"`
Discussion