AI コーディングというやつをやってみたかったのです。
前提
- OS: Windows 11 Pro 23H2 ビルド 22631.5039
- Docker Desktop: Version 4.37.1 (178610)
- WSL2 の Ubuntu 24.04 から WSL Integration で Docker Desktop を利用
- Java プロジェクトを作って、 Hello,World! するのが目標
- Claude Code のアカウントを作って $5 入金済み
devcontainer 用のファイル作成
.devcontainer/devcontainer.json
- Maven の Java プロジェクトを作りたいので、 devcontainer の features を利用してインストール
- Claude Code に Node が必要なので、 devcontainer の features を利用してインストール
{
"name": "app",
"image": "mcr.microsoft.com/devcontainers/base",
"features": {
"ghcr.io/devcontainers/features/node:1": {},
"ghcr.io/devcontainers/features/java:1": {
"version": "21",
"installGradle": "false",
"installMaven": "true"
}
}
}
.devcontainer/devcontainer.vim.json
devcontainer.vim config -g > .devcontainer/devcontainer.vim.json
で生成したものそのまま使う
{
"remoteEnv": {
"EDITOR": "~/squashfs-root/AppRun",
"PAGER": "sed -r 's/\\x1B\\[[0-9;]*[mGKH]//g' | ~/squashfs-root/AppRun -R -",
"LESSCHARSET": "utf-8",
"SHELL": "bash",
"TERM": "xterm-256color",
"HISTCONTROL": "erasedups",
// If use WSLG
// "DISPLAY": "${localEnv:DISPLAY}",
// "WAYLAND_DISPLAY": "${localEnv:WAYLAND_DISPLAY}",
// "XDG_RUNTIME_DIR": "${localEnv:XDG_RUNTIME_DIR}",
// "PULSE_SERVER": "${localEnv:PULSE_SERVER}",
},
// devcontainer/cli はまだ forwardPorts に対応していないため、
// 必要に応じて forwardPorts の定義を appPort に転記する。
// ※ コンテナ側で Listen する際は、 `127.0.0.1` **ではなく** `0.0.0.0` で Listen すること。
// "appPort": [
// ],
// Linux で実行する場合には、 runArgs をコメントアウトし、コンテナからホストへの接続ができるようにしてください
//"runArgs": [
// "--add-host=host.docker.internal:host-gateway"
//],
"mounts": [
{
"type": "bind",
"source": "${localEnv:HOME}/.vim",
"target": "/home/vscode/.vim"
},
{
"type": "bind",
"source": "${localEnv:HOME}/.gitconfig",
"target": "/home/vscode/.gitconfig"
},
{
"type": "bind",
"source": "${localEnv:HOME}/.ssh",
"target": "/home/vscode/.ssh"
},
// If use host's bashrc
//{
// "type": "bind",
// "source": "${localEnv:HOME}/.bashrc",
// "target": "/home/vscode/.bashrc"
//},
// If use WSLG
//{
// "type": "bind",
// "source": "/tmp/.X11-unix",
// "target": "/tmp/.X11-unix"
//},
//{
// "type": "bind",
// "source": "/mnt/wslg",
// "target": "/mnt/wslg"
//},
],
// denops など、別の実行環境が必要な場合や、
// 後乗せで追加したいツールがある場合には以下の対象行をコメントアウトするか
// https://containers.dev/features から必要な feature を探して追加してください。
//"features": {
// "ghcr.io/devcontainers-community/features/deno:1": {}
// "ghcr.io/devcontainers/features/node:1": {}
// "ghcr.io/devcontainers/features/python:1": {}
// "ghcr.io/devcontainers/features/ruby:1": {}
// "ghcr.io/devcontainers-extra/features/fzf:1": {}
// "ghcr.io/jungaretti/features/ripgrep:1": {}
// "ghcr.io/devcontainers/features/docker-outside-of-docker:1": {},
// "ghcr.io/devcontainers/features/docker-in-docker:2": {}
//}
}
開発環境の起動
devcontainer.vim start .
Claude Code のインストール・初期設定
インストール
Vim でターミナルを開き、以下コマンドを実行。
npm install -g @anthropic-ai/claude-code
初期設定
Vim でターミナルを開き、以下コマンドを実行。
cloude
- 表示のカラースタイルを聞かれるので答える(僕は
Light text
にした) - ログイン処理 2.1 Enter 押下で表示される URL にアクセスし、ログインを行う 2.2 ログイン完了後に表示されるコードをターミナルにペーストし、 Enter
Yes, proceed
まで Enter を押し続ける- プロンプト入力画面が表示される
あとはここにやって欲しいことを入力していくだけ。
実装
プロジェクトの作成
claude へ次の命令を入力する。
Maven の Java プロジェクトを作り、 Hello, World! を表示したい。 Java のバージョンは 21 とすること。
今回は、以下のような処理を行ってくれた。
mkdir -p src/main/java/com/example
pom.xml
の作成<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>hello-world</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <configuration> <archive> <manifest> <mainClass>com.example.App</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build> </project>
App.java
の作成package com.example; public class App { public static void main(String[] args) { System.out.println("Hello, World!"); } }
コンパイル(
mvn compile
)実行(
mvn exec:java -Dexec.mainClass="com.example.App"
)完了報告(
Maven プロジェクトが正常に作成され、「Hello, World!」が表示されました。Java 21 を使用する Maven プロジェクトの基本構造を作成しました。
)
良い感じ。
…devcontainer.vim
特有のことが無かった気がするけれど、
Claude Code が使えたのでヨシ!
以上。