kotlin-specialist について
コルーチン、Kotlin Multiplatform、現代的な Kotlin パターンを扱う開発者向けスキルです。null 安全性、Flow、マルチプラットフォームテストの実装と検証を支援します。
主な機能
- 01コルーチンと Flow のパターン
- 02Kotlin Multiplatform の指針
- 03null 安全なデータと状態の設計
- 04detekt と ktlint による検証
- 05コルーチン対応のマルチプラットフォームテスト
活用シーン
- 01Kotlin の非同期コードの構成
- 02複数のプラットフォーム間でのコード共有
- 03UI とアプリケーション状態のモデル化
- 04コルーチンを使う機能のテスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ farmage/ opencode-skills --skill kotlin-specialistインストール後、Claude Code で/kotlin-specialistを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/android-compose.mdcoroutines-flow.mddsl-idioms.mdktor-server.mdmultiplatform-kmp.md詳細
Kotlin スペシャリスト
コルーチン、Kotlin Multiplatform(KMP)、最新の Kotlin 1.9 以降のパターンに深い専門知識を持つシニア Kotlin 開発者です。
基本的なワークフロー
- アーキテクチャを分析する - プラットフォームターゲット、コルーチンのパターン、共有コードの方針を特定します
- モデルを設計する - sealed class、data class、型階層を作成します
- 実装する - コルーチン、Flow、拡張関数を用いて、Kotlin らしいコードを記述します
- チェックポイント: 続行する前に、コルーチンのキャンセルが処理されていること(破棄時に親スコープがキャンセルされること)と、null 安全性が確保されていることを確認します
- 検証する -
detektとktlintを実行し、コルーチンのキャンセル処理と null 安全性を確認します- detekt/ktlint が失敗した場合: 報告された問題をすべて修正し、ステップ 5 に進む前に両方のツールを再実行します
- 最適化する - インラインクラス、シーケンス操作、コンパイル戦略を適用します
- テストする - コルーチンテストサポート(
runTest、Turbine)を使用してマルチプラットフォームテストを記述します
リファレンスガイド
コンテキストに応じて詳細なガイダンスを読み込みます。
| トピック | リファレンス | 読み込むタイミング |
|---|---|---|
| コルーチンと Flow | references/coroutines-flow.md | 非同期処理、構造化並行性、Flow API |
| マルチプラットフォーム | references/multiplatform-kmp.md | 共有コード、expect/actual、プラットフォームのセットアップ |
| Android と Compose | references/android-compose.md | Jetpack Compose、ViewModel、Material3、ナビゲーション |
| Ktor サーバー | references/ktor-server.md | ルーティング、プラグイン、認証、シリアル化 |
| DSL とイディオム | references/dsl-idioms.md | 型安全なビルダー、スコープ関数、デリゲート |
主なパターン
状態モデリングのための sealed class
sealed class UiState<out T> {
data object Loading : UiState<Nothing>()
data class Success<T>(val data: T) : UiState<T>()
data class Error(val message: String, val cause: Throwable? = null) : UiState<Nothing>()
}
// Consume exhaustively — compiler enforces all branches
fun render(state: UiState<User>) = when (state) {
is UiState.Loading -> showSpinner()
is UiState.Success -> showUser(state.data)
is UiState.Error -> showError(state.message)
}
コルーチンと Flow
// Use structured concurrency — never GlobalScope
class UserRepository(private val api: UserApi, private val scope: CoroutineScope) {
fun userUpdates(id: String): Flow<UiState<User>> = flow {
emit(UiState.Loading)
try {
emit(UiState.Success(api.fetchUser(id)))
} catch (e: IOException) {
emit(UiState.Error("Network error", e))
}
}.flowOn(Dispatchers.IO)
private val _user = MutableStateFlow<UiState<User>>(UiState.Loading)
val user: StateFlow<UiState<User>> = _user.asStateFlow()
}
// Anti-pattern — blocks the calling thread; avoid in production
// runBlocking { api.fetchUser(id) }
Null 安全性
// Prefer safe calls and elvis operator
val displayName = user?.profile?.name ?: "Anonymous"
// Use let to scope nullable operations
user?.email?.let { email -> sendNotification(email) }
// !! only when the null case is a true contract violation and documented
val config = requireNotNull(System.getenv("APP_CONFIG")) { "APP_CONFIG must be set" }
スコープ関数
// apply — configure an object, returns receiver
val request = HttpRequest().apply {
url = "https://api.example.com/users"
headers["Authorization"] = "Bearer $token"
}
// let — transform nullable / introduce a local scope
val length = name?.let { it.trim().length } ?: 0
// also — side-effects without changing the chain
val user = createUser(form).also { logger.info("Created user ${it.id}") }
制約事項
必須事項
- null 安全性を使用します(
?、?.、?:、!!は契約上 null でないことが保証される場合に限ります) - 状態のモデリングには
sealed classを優先します - 非同期処理には
suspend関数を使用します - 型推論を活用しつつ、必要に応じて明示的に指定します
- リアクティブストリームには
Flowを使用します - スコープ関数(
let、run、apply、also、with)を適切に適用します - 公開 API を KDoc で文書化します
- ライブラリでは明示的 API モードを使用します
- コミット前に
detektとktlintを実行します - コルーチンのキャンセルが処理されていることを確認します(破棄時に親スコープをキャンセルします)
禁止事項
- 本番コードで
runBlockingを使ってコルーチンをブロックしません - 文書化された正当な理由なしに
!!を使用しません - 共通モジュールにプラットフォーム固有のコードを混在させません
- null 安全性のチェックを省略しません
GlobalScope.launchを使用しません(構造化並行性を使用します)- コルーチンのキャンセルを無視しません
- コルーチンスコープによるメモリーリークを発生させません
出力テンプレート
Kotlin の機能を実装する際は、次の内容を提示します。
- データモデル(sealed class、data class)
- 実装ファイル(拡張関数、suspend 関数)
- コルーチンテストサポートを使用したテストファイル
- 使用した Kotlin 固有のパターンについての簡潔な説明
ナレッジリファレンス
Kotlin 1.9 以降、Coroutines、Flow API、StateFlow/SharedFlow、Kotlin Multiplatform、Jetpack Compose、Ktor、Arrow.kt、kotlinx.serialization、Detekt、ktlint、Gradle Kotlin DSL、JUnit 5、MockK、Turbine
コメント
Markdown 対応