spring-boot-project-creator について
Spring Initializrを使ってSpring Bootプロジェクトを作成するスキルです。設定やアーキテクチャ、ローカルサービスを選び、DDDまたはレイヤード構成のビルド可能なプロジェクトを生成します。
主な機能
- 01Spring Initializrによるプロジェクト生成
- 02DDDまたはレイヤード構成の設定
- 03PostgreSQL、Redis、MongoDBの追加
- 04Docker Composeのローカルサービス設定
- 05Mavenによるビルド検証
活用シーン
- 01新しいSpring Bootバックエンドの開始
- 02PostgreSQLを使うREST APIの作成
- 03Redisを含むDDDマイクロサービスの作成
- 04ローカル開発サービスの設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ giuseppe-trisciuoglio/ developer-kit --skill spring-boot-project-creatorインストール後、Claude Code で/spring-boot-project-creatorを入力して読み込まれたか確認します。
詳細
Spring Boot プロジェクト作成ツール
概要
Spring Initializr API を使用して、設定済みの Spring Boot プロジェクトをゼロから生成します。このスキルでは、プロジェクトのパラメーター選択、アーキテクチャスタイル(DDD または Layered)の選択、データストアの設定、ローカル開発用の Docker Compose のセットアップをユーザーに案内します。標準化された構造、依存関係管理、設定を備えた、ビルド可能なプロジェクトが作成されます。
使用する場面
- 標準的な構造で Spring Boot 3.x または 4.x の新規プロジェクトを立ち上げる場合。
- JPA、SpringDoc OpenAPI、Docker Compose を備えたバックエンドマイクロサービスを初期化する場合。
- DDD(ドメイン駆動設計)または Layered(Controller/Service/Repository/Model)アーキテクチャに沿ってプロジェクトをスキャフォールドする場合。
- Docker Compose を使用して PostgreSQL、Redis、MongoDB によるローカル開発インフラストラクチャをセットアップする場合。
- トリガーフレーズ:"create spring boot project"、"new spring boot app"、"bootstrap java project"、"scaffold spring boot microservice"、"initialize spring boot backend"、"generate spring boot project"。
前提条件
開始する前に、以下のツールがインストールされていることを確認してください。
- Java Development Kit (JDK):バージョン 17 以降(Spring Boot 3.x/4.x では Java 21 を推奨)
- Apache Maven:ビルドツール(Spring Initializr はデフォルトで Maven プロジェクトを生成します)
- Docker および Docker Compose:ローカルインフラストラクチャサービスの実行用
- curl および unzip:Spring Initializr からのプロジェクトのダウンロードと展開用
手順
以下の手順に従って、新しい Spring Boot プロジェクトを作成します。
1. プロジェクト設定の収集
AskUserQuestion を使用して、以下のプロジェクトパラメーターをユーザーに尋ねます。適切なデフォルト値を提示してください。
| パラメーター | デフォルト | 選択肢 |
|---|---|---|
| Group ID | com.example | 有効な Java パッケージ名 |
| Artifact ID | demo | ケバブケースの識別子 |
| Package Name | Group ID と同じ | 有効な Java パッケージ |
| Spring Boot Version | 3.4.5 | 3.4.x、4.0.x(最新バージョンは start.spring.io で確認) |
| Java Version | 21 | 17、21 |
| Architecture | ユーザーが選択 | DDD または Layered |
| Docker Services | ユーザーが選択 | PostgreSQL、Redis、MongoDB(複数選択可) |
| Build Tool | maven | maven、gradle |
2. Spring Initializr でプロジェクトを生成
curl を使用して、start.spring.io からプロジェクトのスキャフォールドをダウンロードします。
基本依存関係(常に含める):
web— Spring Web MVCvalidation— Jakarta Bean Validationdata-jpa— Spring Data JPAtestcontainers— Testcontainers サポート
条件付き依存関係(Docker Services の選択に基づく):
- PostgreSQL を選択 →
postgresqlを追加 - Redis を選択 →
data-redisを追加 - MongoDB を選択 →
data-mongodbを追加
# Example for Spring Boot 3.4.5 with PostgreSQL only
curl -s https://start.spring.io/starter.zip \
-d type=maven-project \
-d language=java \
-d bootVersion=3.4.5 \
-d groupId=com.example \
-d artifactId=demo \
-d packageName=com.example \
-d javaVersion=21 \
-d packaging=jar \
-d dependencies=web,data-jpa,postgresql,validation,testcontainers \
-o starter.zip
unzip -o starter.zip -d ./demo
rm starter.zip
cd demo
3. 追加の依存関係を追加
pom.xml を編集して、SpringDoc OpenAPI とアーキテクチャテスト用の ArchUnit を追加します。
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.8.15</version>
</dependency>
<dependency>
<groupId>com.tngtech.archunit</groupId>
<artifactId>archunit-junit5</artifactId>
<version>1.4.1</version>
<scope>test</scope>
</dependency>
4. アーキテクチャ構造の作成
ユーザーの選択に基づいて、src/main/java/<packagePath>/ の下にパッケージ構造を作成します。
オプション A:Layered アーキテクチャ
src/main/java/com/example/
├── controller/ # REST controllers (@RestController)
├── service/ # Business logic (@Service)
├── repository/ # Data access (@Repository, Spring Data interfaces)
├── model/ # JPA entities (@Entity)
│ └── dto/ # Request/Response DTOs (Java records)
├── config/ # Configuration classes (@Configuration)
└── exception/ # Custom exceptions and @ControllerAdvice
各レイヤーのプレースホルダークラスを作成します。
- config/OpenApiConfig.java — SpringDoc OpenAPI の設定 Bean
- exception/GlobalExceptionHandler.java — 標準的なエラー処理を備えた
@RestControllerAdvice - model/dto/ErrorResponse.java — 標準エラーレスポンスの record
オプション B:DDD(ドメイン駆動設計)アーキテクチャ
src/main/java/com/example/
├── domain/ # Core domain (framework-free)
│ ├── model/ # Entities, Value Objects, Aggregates
│ ├── repository/ # Repository interfaces (ports)
│ └── exception/ # Domain exceptions
├── application/ # Use cases / Application services
│ ├── service/ # @Service orchestration
│ └── dto/ # Input/Output DTOs (records)
├── infrastructure/ # External adapters
│ ├── persistence/ # JPA entities, Spring Data repos
│ └── config/ # Spring @Configuration
└── presentation/ # REST API layer
├── controller/ # @RestController
└── exception/ # @RestControllerAdvice
各レイヤーのプレースホルダークラスを作成します。
- infrastructure/config/OpenApiConfig.java — SpringDoc OpenAPI の設定 Bean
- presentation/exception/GlobalExceptionHandler.java — 標準的なエラー処理を備えた
@RestControllerAdvice - application/dto/ErrorResponse.java — 標準エラーレスポンスの record
5. アプリケーションプロパティを設定する
選択したサービスを含む src/main/resources/application.properties を作成します。
必ず含めてください:
# Application
spring.application.name=${artifactId}
# SpringDoc OpenAPI
springdoc.swagger-ui.doc-expansion=none
springdoc.swagger-ui.operations-sorter=alpha
springdoc.swagger-ui.tags-sorter=alpha
PostgreSQL を選択した場合:
# PostgreSQL / JPA
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/${POSTGRES_DB:postgres}
spring.datasource.username=${POSTGRES_USER:postgres}
spring.datasource.password=${POSTGRES_PASSWORD:changeme}
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
Redis を選択した場合:
# Redis
spring.data.redis.host=localhost
spring.data.redis.port=6379
spring.data.redis.password=${REDIS_PASSWORD:changeme}
MongoDB を選択した場合:
# MongoDB
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.authentication-database=admin
spring.data.mongodb.username=${MONGO_USER:root}
spring.data.mongodb.password=${MONGO_PASSWORD:changeme}
spring.data.mongodb.database=${MONGO_DB:test}
6. Docker Compose をセットアップする
プロジェクトのルートに、ユーザーが選択したサービスのみを含む docker-compose.yaml を作成します。
services:
# Include if PostgreSQL selected
postgresql:
image: postgres:17
ports:
- "5432:5432"
environment:
POSTGRES_USER: ${POSTGRES_USER:-postgres}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
POSTGRES_DB: ${POSTGRES_DB:-postgres}
volumes:
- ./postgres_data:/var/lib/postgresql/data
# Include if Redis selected
redis:
image: redis:7
ports:
- "6379:6379"
command: redis-server --requirepass ${REDIS_PASSWORD:-changeme}
volumes:
- ./redis_data:/data
# Include if MongoDB selected
mongodb:
image: mongo:8
ports:
- "27017:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_USER:-root}
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD:-changeme}
volumes:
- ./mongo_data:/data/db
7. Docker Compose 用の .env ファイルを作成する
ローカル開発用のデフォルト認証情報を含む .env ファイルをプロジェクトのルートに作成します。
# PostgreSQL
POSTGRES_USER=postgres
POSTGRES_PASSWORD=changeme
POSTGRES_DB=postgres
# Redis
REDIS_PASSWORD=changeme
# MongoDB
MONGO_USER=root
MONGO_PASSWORD=changeme
MONGO_DB=test
ユーザーが選択したサービスの変数のみを含めます。Docker Compose はこのファイルを自動的に読み込みます。
8. .gitignore を更新する
Docker Compose のボリュームディレクトリと .env ファイルを .gitignore に追加します。
# Docker Compose
.env
postgres_data/
redis_data/
mongo_data/
9. ビルドを検証する
Maven ビルドを実行して、プロジェクトがコンパイルされ、テストに合格することを確認します。
./mvnw clean verify
ビルドが成功した場合は、ユーザーに知らせます。失敗した場合は、続行する前に原因を特定して修正します。
10. ユーザーに概要を提示する
作成したプロジェクトの概要を表示します。
Project Created Successfully
Artifact: <artifactId>
Spring Boot: <version>
Java: <javaVersion>
Architecture: <DDD | Layered>
Build Tool: Maven
Docker: <services list>
Directory: ./<artifactId>/
Next Steps:
1. cd <artifactId>
2. docker compose up -d
3. ./mvnw spring-boot:run
4. Open http://localhost:8080/swagger-ui.html
アーキテクチャパターン
レイヤードアーキテクチャ
関心事を明確に分離した、従来型の3層アーキテクチャです。
| レイヤー | パッケージ | 責務 |
|---|---|---|
| プレゼンテーション | controller/ | HTTP エンドポイント、リクエスト/レスポンスのマッピング |
| ビジネス | service/ | ビジネスロジック、トランザクション管理 |
| データアクセス | repository/ | Spring Data によるデータベース操作 |
| ドメイン | model/ | JPA エンティティと DTO |
適している用途: シンプルな CRUD アプリケーション、小規模から中規模のサービス、Spring Boot を初めて使用するチーム。
DDD アーキテクチャ
ヘキサゴナルな境界を持つドメイン駆動設計です。
| レイヤー | パッケージ | 責務 |
|---|---|---|
| ドメイン | domain/ | エンティティ、値オブジェクト、ドメインサービス(フレームワークに依存しない) |
| アプリケーション | application/ | ユースケース、オーケストレーション、DTO マッピング |
| インフラストラクチャ | infrastructure/ | JPA アダプター、外部連携、設定 |
| プレゼンテーション | presentation/ | REST コントローラー、エラー処理 |
適している用途: 複雑なビジネスドメイン、豊富なロジックを持つマイクロサービス、長期間運用するプロジェクト。
例
例 1:PostgreSQL を使用したシンプルな REST API(レイヤード)
ユーザーのリクエスト:「PostgreSQL を使った REST API 用の Spring Boot プロジェクトを作成してください」
curl -s https://start.spring.io/starter.zip \
-d type=maven-project \
-d bootVersion=3.4.5 \
-d groupId=com.example \
-d artifactId=my-api \
-d packageName=com.example.myapi \
-d javaVersion=21 \
-d dependencies=web,data-jpa,postgresql,validation,testcontainers \
-o starter.zip
結果:controller/、service/、repository/、model/ パッケージを含むレイヤードプロジェクト、PostgreSQL 用の Docker Compose、SpringDoc OpenAPI。
例 2:DDD と複数のストアを使用するマイクロサービス
ユーザーのリクエスト:「DDD、PostgreSQL、Redis を使用する Spring Boot 3 マイクロサービスをブートストラップしてください」
curl -s https://start.spring.io/starter.zip \
-d type=maven-project \
-d bootVersion=3.4.5 \
-d groupId=com.acme \
-d artifactId=order-service \
-d packageName=com.acme.order \
-d javaVersion=21 \
-d dependencies=web,data-jpa,postgresql,data-redis,validation,testcontainers \
-o starter.zip
結果:domain/、application/、infrastructure/、presentation/ パッケージを含む DDD プロジェクト、PostgreSQL と Redis 用の Docker Compose、SpringDoc OpenAPI。
ベストプラクティス
- プロジェクトの生成には必ず Spring Initializr を使用します。 正しい依存関係管理と親 POM を利用できます。
- DTO には Java のレコードを使用します。 不変で簡潔です。
- DDD アーキテクチャでは、ドメインレイヤーをフレームワークに依存させないようにします。
domain/に Spring アノテーションを使用しないでください。 - 本番環境の機密設定(データベースのパスワードなど)には、環境変数を使用します。
- 予期しない破壊的変更を避けるため、
docker-compose.yamlの Docker イメージのバージョンを固定します。 - すべてがコンパイルされ、テストに合格することを確認するため、セットアップ後に
./mvnw clean verifyを実行します。 - Docker Compose に依存するのではなく、統合テストには Testcontainers を追加します。
制約と警告
- Spring Initializr を使用するにはインターネット接続が必要です。このスキルはオフラインでは動作しません。
- Spring Boot 4.x の提供状況は現在のリリースサイクルによって異なります。最新バージョンは start.spring.io で確認してください。
- Docker Compose の認証情報は
.envファイル(Git の追跡対象外)から読み込まれます。シークレットをバージョン管理にコミットしないでください。 spring.jpa.hibernate.ddl-auto=updateの設定は開発専用です。本番環境では Flyway または Liquibase を使用してください。- ArchUnit のバージョンは、Spring Boot にバンドルされている JUnit 5 のバージョンと互換性がある必要があります。