mcpField
K
kotlin-springboot

kotlin-springboot

github.com/github開発40.5k9.8k 回インストール1 日前に更新
リポジトリ

kotlin-springboot について

kotlin-springbootは、Kotlinで慣用的なSpring Bootアプリケーションを構築するためのガイドスキルです。プロジェクト構成、依存性注入、設定、Web・データ層、テスト、ログ、コルーチンを扱います。

主な機能

  1. 01機能単位のパッケージ構成
  2. 02主コンストラクターによる依存性注入
  3. 03型安全な外部設定
  4. 04RESTコントローラーとDTO検証
  5. 05JPAリポジトリーとトランザクション
  6. 06テスト、ログ、コルーチン

活用シーン

  1. 01Kotlin Spring Bootプロジェクトの構成
  2. 02REST APIとDTOの設計
  3. 03JPAエンティティとリポジトリーの設定
  4. 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 を使用します。

コメント