coding-kotlin について
coding-kotlin は、Kotlin コードの生成、デバッグ、最適化を AI 向けに支援するスキルで、Android とマルチプラットフォーム開発を対象とします。コルーチン、データクラス、シールドクラス、拡張関数、Gradle、KMM を扱います。
主な機能
- 01Kotlin コードの生成とデバッグ
- 02コルーチンによる非同期処理
- 03データクラスとシールドクラスでのモデル化
- 04拡張関数によるロジック再利用
- 05Gradle ビルドと KMM モジュールの管理
活用シーン
- 01Android の非同期ネットワーク呼び出し
- 02API レスポンスのモデル化と処理
- 03Gradle の依存関係とビルドの設定
- 04KMM プロジェクトでのコード共有
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill coding-kotlinインストール後、Claude Code で/coding-kotlinを入力して読み込まれたか確認します。
詳細
coding-kotlin
目的
このスキルは、非同期処理のためのコルーチン、不変データの扱いに適したデータクラス、型安全な階層構造を実現するシールドクラス、再利用可能なコードのための拡張関数、プロジェクトのビルドに使う Gradle、マルチプラットフォーム開発のための KMM に重点を置き、Kotlin コードの生成、デバッグ、最適化を AI が行えるようにします。
使用する場面
ネットワーク呼び出しなどの非同期タスクを必要とする Android アプリの開発、API のデータモデリング、共有ロジックを使うクロスプラットフォームプロジェクトで、このスキルを使用します。スレッドのブロックを避けるためにコルーチンを使う場合や、KMM で依存関係を管理するために Gradle を設定する場合など、パフォーマンスが重要な場面で適用してください。
主な機能
- コルーチン:構造化並行性を使って非同期コードを処理します。ブロッキングしない I/O には
kotlinx.coroutinesを使用します。 - データクラス:equals、hashCode、toString を自動生成します。
data class User(val name: String, val id: Int)のように定義します。 - シールドクラス:クラスの継承を制限し、すべてのケースを網羅する when 式を実現します。例:
sealed class Result { data class Success(val data: String) : Result() }。 - 拡張関数:継承せずに既存のクラスへメソッドを追加します。例:
fun String.reverse() = this.reversed()。 - Gradle:依存関係やタスクを記述する build.gradle.kts などのスクリプトを使ってビルドを管理します。
- KMM:Android/iOS 間でコードを共有します。Gradle の共有モジュールを設定して使用します。
使用パターン
タスクを実行する際は、まず必要なパッケージをすべてインポートします(例:import kotlinx.coroutines.*)。非同期処理では、runBlocking { } のようなコルーチンスコープでコードをラップし、結果を待たない処理には launch、結果を待つ処理には async を使用します。データをモデル化する際は、POJO にはデータクラス、状態機械にはシールドクラスを使用します。Gradle タスクではプロジェクトのルートからコマンドを実行し、デバッグには --info などのフラグを指定します。KMM プロジェクトでは、コードを共有モジュールとプラットフォーム固有モジュールに分け、Gradle の設定を通じて連携させます。クラッシュを防ぐため、? を使った null 許容性のチェックを必ず行ってください。
主なコマンド/API
- Gradle コマンド:コンパイルとデバッグには
gradle build --stacktraceを実行します。Android ビルドにはgradle assembleDebugを使用します。KMM では、implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")のように build.gradle.kts に依存関係を追加します。 - コルーチン API:遅延実行には
launch { delay(1000L); println("Task completed") }を使用します。または、並行タスクにはval deferred = async { someFunction() }; deferred.await()を使用します。 - データクラス:変更を加えたコピーを作成するには、
data class Person(val name: String); val p = Person("John"); println(p.copy(name = "Jane"))のように定義して使用します。 - シールドクラス:網羅性を確認するには、
when (result) { is Result.Success -> process(data); is Result.Error -> handleError() }で処理します。 - 拡張関数:組み込み型を拡張するには、
fun Int.isEven() = this % 2 == 0; val num = 4; println(num.isEven())のように実装します。 - KMM のセットアップ:マルチプラットフォーム設定には、build.gradle.kts に
kotlin { android { compilations.all { kotlinOptions.jvmTarget = "1.8" } } ios { binaries { framework() } } }を追加します。 - API エンドポイント:Kotlin で外部サービスを利用するには Ktor などのライブラリを使用します。例:
HttpClient().get("https://api.example.com/data")を呼び出し、ヘッダーには$KOTLIN_API_KEYのような環境変数を使って認証情報を渡します。
統合に関する注意
SDKMAN を使った sdk install kotlin などで Kotlin SDK が環境にインストールされていることを確認し、このスキルを統合してください。Android では、build.gradle に plugins { id("org.jetbrains.kotlin.android") } のような Kotlin プラグインを追加し、コルーチンを使用するには minSdk を 21 に設定します。KMM プロジェクトでは、共有モジュールを連携させるため、共通コードに expect fun platformFunction() を記述し、プラットフォーム固有のファイルに actual fun platformFunction() = ... を記述します。リポジトリにアクセスするための $GRADLE_API_KEY を gradle.properties に apiKey=$GRADLE_API_KEY として設定するなど、シークレットには環境変数を使用します。./gradlew test で統合をテストし、System.getProperty("os.name") で OS を確認してプラットフォーム間の違いに対処します。
エラー処理
コルーチンでは、常に構造化されたエラー処理を使用します。コードを try { launch { riskyOperation() } } catch (e: CancellationException) { log("Coroutine cancelled") } finally { cleanup() } で囲みます。データクラスでは、生成時に入力を検証します。例:data class User(val name: String) { init { require(name.isNotBlank()) { "Name cannot be blank" } } }。シールドクラスでは、when 式ですべてのサブクラスを処理し、UnreachableCode エラーを回避します。Gradle では、--stacktrace を付けて出力を解析し、gradle dependencies を実行して依存関係の競合など、よくある問題を確認します。KMM では、expect class PlatformException() { actual constructor() } を使ってプラットフォーム固有のエラーを処理し、共通コードで捕捉します。
具体的な使用例
-
例:コルーチンを使用した非同期ネットワーク呼び出し
コルーチンをインポートしてスコープを起動します:import kotlinx.coroutines.*; suspend fun fetchData() = "Data"; fun main() = runBlocking { val result = async { fetchData() }.await(); println(result) }。これにより、メインスレッドをブロックせずにデータを取得できます。 -
例:シールドクラスとデータクラスを使用した API レスポンスのモデル化
構造を定義します:sealed class ApiResult { data class Success(val data: String) : ApiResult(); data class Error(val message: String) : ApiResult() }; fun process(result: ApiResult) = when (result) { is Success -> println(result.data); is Error -> println(result.message) }。これを使うと、KMM の共有コードでレスポンスを安全に処理できます。
グラフの関係
- 関連:coding-android(「android」などのタグを共有し、Kotlin の統合に重点を置いています)。
- 接続:coding クラスター(JVM 相互運用性に関する coding-java など、ほかのコーディングスキルにリンクしています)。
- 重複:tools-kmm(KMM のマルチプラットフォーム機能を通じて)および build-gradle(Gradle の共通利用に関して)。