Java + Spring Boot開発支援。 NullAway設定、テスト戦略、DIコンテナ設計をガイド。
/plugin marketplace add sk8metalme/ai-agent-setup/plugin install lang-java-spring@ai-agent-setupThis skill is limited to using the following tools:
このファイルはJava + Spring Boot開発に特化した設定を定義します。
最新の安定版バージョンは以下の公式ドキュメントを参照してください:
| 技術 | 公式ドキュメント | 用途 |
|---|---|---|
| Java SE | Oracle Java SE Support Roadmap | LTSバージョン確認 |
| Adoptium (OpenJDK) | Temurin Releases | OpenJDKダウンロード |
| Spring Boot | Spring Boot (English) | 公式ドキュメント(英語) |
| Spring Boot (日本語) | Spring Boot (日本語) | 公式ドキュメント(日本語) |
| Gradle | Gradle Releases | バージョン確認・ダウンロード |
| MapStruct | MapStruct | 公式サイト |
| Error Prone | Error Prone | 公式サイト |
| Spotless | Spotless GitHub | 公式リポジトリ |
最新の安定版バージョンは上記の公式ドキュメントリファレンスで確認してください。
src/
├── main/
│ ├── java/
│ │ └── com/company/project/
│ │ ├── config/ # 設定クラス
│ │ ├── controller/ # RESTコントローラー
│ │ ├── service/ # ビジネスロジック
│ │ ├── repository/ # データアクセス層
│ │ ├── entity/ # JPAエンティティ
│ │ ├── dto/ # データ転送オブジェクト
│ │ ├── mapper/ # DTO-Entityマッパー
│ │ ├── exception/ # カスタム例外
│ │ ├── util/ # ユーティリティ
│ │ └── Application.java # メインクラス
│ └── resources/
│ ├── application.yml # アプリケーション設定
│ ├── application-dev.yml # 開発環境設定
│ └── db/migration/ # Flywayマイグレーション
└── test/
└── java/ # テストコード
build.gradle # Gradleビルド設定
settings.gradle # Gradle設定
gradle.properties # Gradleプロパティ
// 最新の安定版バージョンは公式ドキュメントリファレンスで確認してください
plugins {
id 'java'
id 'org.springframework.boot' version '4.0.1' // https://spring.io/projects/spring-boot#learn
id 'io.spring.dependency-management' version '1.1.4'
id 'com.diffplug.spotless' version '6.23.3' // https://github.com/diffplug/spotless
id 'net.ltgt.errorprone' version '3.1.0' // https://errorprone.info/
}
dependencies {
// Spring Boot
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
// Database
runtimeOnly 'org.postgresql:postgresql'
implementation 'org.flywaydb:flyway-core'
// Lombok & MapStruct
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
// 最新版は https://mapstruct.org/ で確認
implementation 'org.mapstruct:mapstruct:1.5.5.Final' // 参考値(2025年12月時点)
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'
// Null安全性チェック
// 最新版は https://errorprone.info/ で確認
errorprone 'com.google.errorprone:error_prone_core:2.44.0' // 参考値(2025年12月時点)
errorprone 'com.uber.nullaway:nullaway:0.12.15' // 参考値(2025年12月時点)
// Test
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
}
// NullAway設定
import net.ltgt.gradle.errorprone.CheckSeverity
tasks.withType(JavaCompile).configureEach {
options.errorprone {
check("NullAway", CheckSeverity.ERROR)
option("NullAway:AnnotatedPackages", "com.company.project")
option("NullAway:TreatGeneratedAsUnannotated", "true")
option("NullAway:ExcludedFieldAnnotations", "org.springframework.beans.factory.annotation.Autowired")
}
}
@Nullable と @NonNull アノテーションを活用import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;
@Service
public class UserService {
private final UserRepository repository;
public UserService(UserRepository repository) {
this.repository = Objects.requireNonNull(repository);
}
@NonNull
public Optional<UserDto> findById(@NonNull Long id) {
return repository.findById(id)
.map(this::toDto);
}
@Nullable
public String getNickname(@NonNull Long userId) {
return repository.findNicknameById(userId);
}
}
# マルチステージビルド for Rocky Linux
FROM gradle:8-jdk17 AS builder
WORKDIR /app
COPY build.gradle settings.gradle ./
COPY gradle ./gradle
COPY src ./src
RUN gradle bootJar --no-daemon
# 実行環境 (Rocky Linux)
FROM rockylinux:9-minimal
RUN microdnf install -y java-17-openjdk-headless && \
microdnf clean all
WORKDIR /app
COPY --from=builder /app/build/libs/*.jar app.jar
# セキュリティ: 非rootユーザーで実行
RUN groupadd -r spring && useradd -r -g spring spring
USER spring:spring
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
グローバルセキュリティポリシーを参照してください。
@SpringBootTestで統合テスト@MockBeanでSpringコンテキストテスト@ExtendWith(MockitoExtension.class)
class UserServiceTest {
@Mock
private UserRepository userRepository;
@InjectMocks
private UserService userService;
@Test
void testFindById() {
when(userRepository.findById(1L))
.thenReturn(Optional.of(new User()));
Optional<UserDto> result = userService.findById(1L);
assertTrue(result.isPresent());
}
}
@EntityGraph, JOIN FETCH)@Cacheable, @CacheEvict)@Async, CompletableFuture)# アプリケーション起動
./gradlew bootRun
# テスト実行
./gradlew test
./gradlew test --tests '*IntegrationTest'
# JAR作成
./gradlew clean bootJar
# 依存関係更新チェック
./gradlew dependencyUpdates
# コード整形
./gradlew spotlessApply
# 並列ビルド
./gradlew build --parallel
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.