Claude Media
Claude CodeでSpring Bootアプリを作る — REST API開発の実装フロー

Claude CodeでSpring Bootアプリを作る — REST API開発の実装フロー

Spring Initializrで生成したSpring Bootの雛形に、Claude CodeでREST APIを実装・実行・テストする手順を、権限設定の勘所とあわせて解説します。

Claude CodeでSpring Bootアプリを作るとは

Claude CodeでSpring Bootアプリを作るとは、Spring Initializrで生成した最小構成の雛形をClaude Codeのセッションに読み込ませ、REST APIのエンドポイント実装・ビルド実行・テスト追加を対話的に進める開発スタイルを指します。Spring Boot自体の雛形生成は公式のstart.spring.ioが担い、Claude Codeはその上のコード実装とビルドコマンドの実行を担当する、という役割分担になります。

この分担が重要な理由は、Spring Bootの雛形にはビルドツール・依存関係・パッケージ構成といった「型」があり、そこを自己流で崩さずに保つほうが後続の実装がスムーズになるからです。雛形は公式ツールに任せ、その内側のコード生成とビルド・実行の反復をClaude Codeに任せる形が、迷いなく進められます。

前提条件を揃える

Spring Bootの開発にはJDK(Javaの開発キット)とIDE(統合開発環境)が必要です。公式のQuickstartガイドはBellSoft Liberica JDKのバージョン17または21を推奨し、IDEの選択肢としてIntelliJ IDEA、Spring Boot Extension Pack付きのVisual Studio Code、Spring Tools付きのEclipseを挙げています。

Claude Code側の前提は、ターミナルとClaude Codeのインストール、そしてClaude Pro・Max・Team・Enterpriseのいずれかのサブスクリプション、またはClaude Console(API)アカウントです。macOS・Linux・WSLでは次のコマンドでネイティブインストールできます。

curl -fsSL https://claude.ai/install.sh | bash

インストール後はclaude --versionでバージョン番号と(Claude Code)の表示を確認します。初回起動時はログインを求められ、Claudeサブスクリプションまたはコンソールアカウントのいずれかでブラウザ認証を完了します。

ステップ1: Spring Boot雛形の準備

雛形の生成はstart.spring.ioで行います。「web」の依存関係を検索して追加し、Generateボタンでzipをダウンロード、任意のフォルダに展開します。この操作で生成されるのが、Spring Bootをすぐに使える状態にした最小プロジェクトです。

展開したフォルダをIDEで開くと、src/main/java/com/example/demo配下にDemoApplication.javaが見つかります。ここまではSpring公式のQuickstartが案内する手順そのもので、Claude Codeはまだ登場しません。雛形が用意できたら、そのフォルダでClaude Codeを起動します。

cd /path/to/demo
claude

起動直後にプロジェクトの内容を尋ねると、Claude Codeは必要なファイルを自分で読みに行きます。手動でコンテキストを渡す必要はありません。

このプロジェクトの構成を教えて

ステップ2: CLAUDE.mdとエンドポイント実装

複数セッションにまたがってビルドコマンドやパッケージ構成を毎回説明し直すのは非効率です。プロジェクトルートにCLAUDE.mdを置いておくと、Claude Codeはこのファイルを自動的に読み込み、そこに書いた規約に従うようになります。ビルドコマンドが./gradlew./mvnwか、パッケージのルートがどこかといった情報を書いておくと、セッションをまたいでも説明が要りません。

CLAUDE.mdを用意したら、エンドポイントの実装をプロンプトで指示します。

GETメソッドの/helloエンドポイントを追加して。nameというクエリパラメータを受け取り、
デフォルト値はWorldにして、"Hello {name}!"という文字列を返して

これに対応する実装は、DemoApplication.javaへの次のような追加になります。

package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
 
@SpringBootApplication
@RestController
public class DemoApplication {
    public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
    }
    @GetMapping("/hello")
    public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
      return String.format("Hello %s!", name);
    }
}

@RestControllerがこのクラスをWeb経由で公開するエンドポイントとして扱うようSpringに伝え、@GetMapping("/hello")/hello宛てのリクエストをhello()メソッドに割り当てます。@RequestParamnameという値をリクエストから受け取り、無ければ既定値のWorldを使う指定です。Claude Codeがコードを提示した際は、差分を確認してから承認します。

ステップ3: 権限を設定してビルド・実行する

Claude Codeは、読み取り専用コマンドの一部を除いてBashコマンドの実行前に承認を求めます。これは公式ドキュメントが明記するデフォルトの挙動です。./gradlew bootRunのような起動コマンドを毎回のセッションで承認し直すのは手間なので、リポジトリ単位で許可ルールを保存しておきます。

承認プロンプトで「Yes, and don't ask again」を選ぶと、そのルールはリポジトリのルートにある.claude/settings.local.jsonに永続保存され、以後のセッションやワークツリーでも有効になります。同じ内容を先に手動で書いておくことも可能です。

{
  "permissions": {
    "allow": [
      "Bash(./gradlew bootRun)",
      "Bash(./gradlew test)"
    ]
  }
}

許可ルールを設定したら、実際にビルドと起動を行います。macOS・Linuxでは./gradlew bootRun、Windowsでは.\gradlew.bat bootRunです。

./gradlew bootRun

Spring Bootの組み込みApache Tomcatサーバーがローカルのポート8080でリクエストを待ち受け始めます。ブラウザまたはcurlでhttp://localhost:8080/hello?name=Claudeにアクセスすると、Hello Claude!という応答が返ってきます。

ステップ4: テストとリファクタ

エンドポイントが動いたら、次はテストの追加です。Claude Codeは自然言語の指示だけでテストコードの生成にも対応しています。

helloエンドポイントのユニットテストを書いて。nameを指定した場合と省略した場合の両方をカバーして

生成されたテストは./gradlew testで実行します。許可ルールにBash(./gradlew test)を含めておけば、この実行も承認なしで進みます。テストが通った後にロジックを変更したいときは、リファクタの指示も同じ流れで出せます。

hello()メソッドの引数チェックをBean Validationのアノテーションに置き換えて

Claude Codeは該当コードの位置を特定し、変更内容を提示してから適用します。テストが用意されていれば、変更後に自動でテストを再実行するよう指示することもできます。

開発フェーズ別のパーミッションモード使い分け

Claude Codeには複数のパーミッションモードがあり、開発フェーズに応じて切り替えると承認の手間と安全性のバランスが取れます。モードの切り替えはセッション中にShift+Tabで行えます。

フェーズ向くモード理由
雛形の読解・設計検討向くモードPlan理由ファイルを編集せず読み取りに留めた探索ができる
エンドポイントの実装向くモードManual(default)理由生成コードを1件ずつ確認しながら進められる
gradlew実行の繰り返し向くモード許可ルール付きのDefault/AcceptEdits理由承認の手間を減らしつつ変更内容は目視できる
CI上での自動実行向くモード--permission-modeで固定指定理由対話なしでビルド・テストを完走させられる

Pro・Max・Teamプランの対話型セッションでは、既定の開始モードがAuto(分類器が操作を審査するモード)になっている点にも触れておきます。それ以外のプランではManualモードが既定です。どちらのモードで始めても、Shift+Tabでいつでも切り替えられます。

表の最後の行にあるCI上での自動実行は、claude -pで対話なしのセッションを起動し、--permission-modeでモードを固定する形です。承認待ちで処理が止まらないため、パイプラインの中に組み込みやすくなります。

claude -p --permission-mode acceptEdits "./gradlew testを実行して結果を要約して"

このコマンドは--print(-p)で応答を出力したら即終了する非対話モードに入り、acceptEditsモードでファイル編集やmkdircpのような基本的なファイル操作コマンドを自動承認します。ビルドやテストの実行コマンド自体は許可ルールで別途カバーしておく必要がある点は、対話モードと変わりません。

よくあるつまずき

gradlewの実行のたびに承認を求められる

許可ルールを設定する前は、./gradlew bootRunを実行するたびに承認プロンプトが出ます。ステップ3のpermissions.allow設定を.claude/settings.local.jsonに保存すれば、以降は同じコマンドで止まりません。ルールはリポジトリ単位で保存されるため、同じプロジェクトの別ワークツリーでも有効です。

ポート8080が使用中でbootRunが失敗する

Spring Bootの組み込みTomcatは既定でポート8080を使います。別のプロセスが同じポートを使っていると起動に失敗するため、先に該当プロセスを終了するか、起動オプションでポート番号を変更する必要があります。

CLAUDE.mdを置かないと毎回の説明がぶれる

CLAUDE.mdを用意していないプロジェクトでは、ビルドコマンドやパッケージ構成をセッションごとに説明し直すことになり、指示の粒度がぶれがちです。プロンプトやCLAUDE.mdの指示内容はClaude Codeが何を試みるかを左右しますが、実際に何が許可されるかは許可ルールやパーミッションモードが決めるという点も、設定時に区別しておくと迷いません。

まとめ

Claude CodeでSpring Bootアプリを作る流れは、雛形の生成をstart.spring.ioに任せ、エンドポイントの実装・ビルド実行・テスト追加をClaude Codeとの対話で進める分担が軸になります。./gradlew系のコマンドを許可ルールに登録しておくことが、承認プロンプトに中断されない開発ループを作る近道です。

Spring BootアプリをMCPサーバーとして公開したい場合は、Spring AIのBoot Starterを使う経路が近道になります。実装手順はJavaでMCPサーバーを書く手順とSpring AIとの関係にまとめています。実装したアプリをコンテナ化してKubernetesへ載せる判断軸はDocker/Podman/Kubernetes MCPの選び方、本番環境へのデプロイまで進めたい場合はHeroku MCPサーバーでClaude Codeからアプリをデプロイ・スケーリングするが参考になります。

この記事を共有:XはてブLinkedIn