kotlin-springboot について
kotlin-springbootは、Kotlinで慣用的なSpring Bootアプリケーションを構築するためのガイドスキルです。プロジェクト構成、依存性注入、設定、Web・データ層、テスト、ログ、コルーチンを扱います。
主な機能
- 01機能単位のパッケージ構成
- 02主コンストラクターによる依存性注入
- 03型安全な外部設定
- 04RESTコントローラーとDTO検証
- 05JPAリポジトリーとトランザクション
- 06テスト、ログ、コルーチン
活用シーン
- 01Kotlin Spring Bootプロジェクトの構成
- 02REST APIとDTOの設計
- 03JPAエンティティとリポジトリーの設定
- 04テストと非同期サービスの計画
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ github/ awesome-copilot --skill kotlin-springbootインストール後、Claude Code で/kotlin-springbootを入力して読み込まれたか確認します。
詳細
Kotlin を使用した Spring Boot のベストプラクティス
あなたの目標は、Kotlin を使用して高品質で慣用的な Spring Boot アプリケーションを書く手助けをすることです。
プロジェクトのセットアップと構成
- ビルドツール: Kotlin プラグイン(
kotlin-maven-pluginまたはorg.jetbrains.kotlin.jvm)を備えた Maven(pom.xml)または Gradle(build.gradle)を使用してください。 - Kotlin プラグイン: JPA の場合、
kotlin-jpaプラグインを有効にして、ボイラープレートなしでエンティティクラスを自動的にopenにしてください。 - スターター: 通常どおり Spring Boot スターター(例:
spring-boot-starter-web、spring-boot-starter-data-jpa)を使用してください。 - パッケージ構成: コードはレイヤーごとではなく、機能/ドメインごとに整理してください(例:
com.example.app.order、com.example.app.user)。
依存性注入とコンポーネント
- プライマリコンストラクタ: 必須の依存性注入には常にプライマリコンストラクタを使用してください。これは Kotlin で最も慣用的かつ簡潔なアプローチです。
- 不変性: 依存性はプライマリコンストラクタで
private valとして宣言してください。不変性を促進するため、どこでもvarよりもvalを優先してください。 - コンポーネントのステレオタイプ: Java の場合と同様に
@Service、@Repository、@RestControllerアノテーションを使用してください。
設定
- 外部化された設定: 可読性と階層構造のため、
application.ymlを使用してください。 - 型安全なプロパティ:
@ConfigurationPropertiesとdata classを組み合わせて、不変で型安全な設定オブジェクトを作成してください。 - プロファイル: 環境固有の設定を管理するには、Spring プロファイル(
application-dev.yml、application-prod.yml)を使用してください。 - シークレット管理: シークレットをハードコードしないでください。環境変数、または HashiCorp Vault や AWS Secrets Manager のような専用のシークレット管理ツールを使用してください。
Web レイヤー(コントローラー)
- RESTful API: 明確で一貫性のある RESTful エンドポイントを設計してください。
- DTO に data class を使用: すべての DTO に Kotlin の
data classを使用してください。これによりequals()、hashCode()、toString()、copy()が自動的に提供され、不変性を促進できます。 - バリデーション: DTO の data class に対して、アノテーション(
@Valid、@NotNull、@Size)を付けた Java Bean Validation(JSR 380)を使用してください。 - エラーハンドリング: 一貫性のあるエラーレスポンスのために、
@ControllerAdviceと@ExceptionHandlerを使用したグローバル例外ハンドラーを実装してください。
サービスレイヤー
- ビジネスロジック: ビジネスロジックは
@Serviceクラス内にカプセル化してください。 - ステートレス性: サービスはステートレスであるべきです。
- トランザクション管理: サービスのメソッドに
@Transactionalを使用してください。Kotlin では、これをクラスレベルまたは関数レベルに適用できます。
データレイヤー(リポジトリ)
- JPA エンティティ: エンティティはクラスとして定義してください。それらが
openでなければならないことを覚えておいてください。これを自動的に処理するためにkotlin-jpaコンパイラプラグインを使用することを強くおすすめします。 - Null 安全性: Kotlin の Null 安全性(
?)を活用して、どのエンティティフィールドが任意か必須かを型レベルで明確に定義してください。 - Spring Data JPA:
JpaRepositoryまたはCrudRepositoryを継承して、Spring Data JPA リポジトリを使用してください。 - コルーチン: リアクティブアプリケーションの場合、データレイヤーで Spring Boot の Kotlin コルーチンのサポートを活用してください。
ログ
- コンパニオンオブジェクトのロガー: ロガーを宣言する慣用的な方法は、コンパニオンオブジェクト内です。
companion object { private val logger = LoggerFactory.getLogger(MyClass::class.java) } - パラメータ化されたログ: パフォーマンスと明確さのために、パラメータ化されたメッセージ(
logger.info("Processing user {}...", userId))を使用してください。
テスト
- JUnit 5: JUnit 5 がデフォルトであり、Kotlin とシームレスに動作します。
- 慣用的なテストライブラリ: より流暢で慣用的なテストには、アサーションに Kotest、モックに MockK の使用を検討してください。これらは Kotlin 向けに設計されており、より表現力豊かな構文を提供します。
- テストスライス: アプリケーションの特定の部分をテストするには、
@WebMvcTestや@DataJpaTestのようなテストスライスアノテーションを使用してください。 - Testcontainers: 実際のデータベースやメッセージブローカーなどを用いた信頼性の高い統合テストには、Testcontainers を使用してください。
コルーチンと非同期プログラミング
suspend関数: ノンブロッキングな非同期コードには、コントローラーとサービスでsuspend関数を使用します。Spring Boot はコルーチンを優れた形でサポートしています。- 構造化並行性: コルーチンのライフサイクルを管理するには、
coroutineScopeまたはsupervisorScopeを使用します。
コメント
Markdown 対応