coroutines-patterns
KotlinのコルーチンとFlowパターンを活用し、構造化された並行処理、エラー処理、非同期処理を効率的に行うための、ビジネスアプリケーション開発に役立つSkill。
📜 元の英語説明(参考)
Kotlin Coroutines and Flow patterns for structured concurrency, error handling, and async operations.
🇯🇵 日本人クリエイター向け解説
KotlinのコルーチンとFlowパターンを活用し、構造化された並行処理、エラー処理、非同期処理を効率的に行うための、ビジネスアプリケーション開発に役立つSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o coroutines-patterns.zip https://jpskill.com/download/16408.zip && unzip -o coroutines-patterns.zip && rm coroutines-patterns.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/16408.zip -OutFile "$d\coroutines-patterns.zip"; Expand-Archive "$d\coroutines-patterns.zip" -DestinationPath $d -Force; ri "$d\coroutines-patterns.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
coroutines-patterns.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
coroutines-patternsフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
コルーチンパターン
Kotlin のための構造化された並行処理。
コルーチンスコープ
// ✅ ViewModel スコープ (自動的にキャンセルされます)
class HomeViewModel : ViewModel() {
fun loadData() {
viewModelScope.launch {
// ViewModel がクリアされるとキャンセルされます
}
}
}
// ✅ Lifecycle スコープ
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
lifecycleScope.launch {
// lifecycle が破棄されるとキャンセルされます
}
}
}
// ❌ 回避: GlobalScope
GlobalScope.launch { } // キャンセルされず、メモリリークが発生します
Dispatcher
// Main - UI 操作
withContext(Dispatchers.Main) {
textView.text = "Updated"
}
// IO - ネットワーク、ディスク
withContext(Dispatchers.IO) {
api.fetchData()
database.query()
}
// Default - CPU 負荷が高い処理
withContext(Dispatchers.Default) {
list.sortedBy { it.score }
}
Flow パターン
// UI 状態のための StateFlow
private val _state = MutableStateFlow(HomeState())
val state: StateFlow<HomeState> = _state.asStateFlow()
// イベントのための SharedFlow
private val _events = MutableSharedFlow<Event>()
val events: SharedFlow<Event> = _events.asSharedFlow()
// lifecycle で collect
@Composable
fun HomeScreen(viewModel: HomeViewModel) {
val state by viewModel.state.collectAsStateWithLifecycle()
}
Flow 演算子
flow
.filter { it.isActive }
.map { transform(it) }
.distinctUntilChanged()
.debounce(300)
.catch { emit(fallback) }
.collect { process(it) }
エラー処理
// コルーチン内の Try-catch
viewModelScope.launch {
try {
val result = repository.fetchData()
_state.value = Success(result)
} catch (e: Exception) {
_state.value = Error(e.message)
}
}
// supervisorScope - 兄弟のコルーチンはキャンセルされません
supervisorScope {
launch { task1() } // 失敗しても task2 はキャンセルされません
launch { task2() }
}
キャンセル
// 協調的なキャンセル
suspend fun processItems(items: List<Item>) {
items.forEach { item ->
ensureActive() // キャンセルを確認
process(item)
}
}
// CancellationException の処理
try {
coroutineWork()
} catch (e: CancellationException) {
throw e // 飲み込んではいけません!
} catch (e: Exception) {
handleError(e)
}
覚えておいてください: 構造化された並行処理 = lifecycle にバインドされ、キャンセル可能で、デバッグ可能です。
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Coroutines Patterns
Structured concurrency for Kotlin.
Coroutine Scopes
// ✅ ViewModel scope (auto-cancelled)
class HomeViewModel : ViewModel() {
fun loadData() {
viewModelScope.launch {
// Cancelled when ViewModel cleared
}
}
}
// ✅ Lifecycle scope
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
lifecycleScope.launch {
// Cancelled when lifecycle destroyed
}
}
}
// ❌ AVOID: GlobalScope
GlobalScope.launch { } // Never cancelled, memory leaks
Dispatchers
// Main - UI operations
withContext(Dispatchers.Main) {
textView.text = "Updated"
}
// IO - Network, disk
withContext(Dispatchers.IO) {
api.fetchData()
database.query()
}
// Default - CPU intensive
withContext(Dispatchers.Default) {
list.sortedBy { it.score }
}
Flow Patterns
// StateFlow for UI state
private val _state = MutableStateFlow(HomeState())
val state: StateFlow<HomeState> = _state.asStateFlow()
// SharedFlow for events
private val _events = MutableSharedFlow<Event>()
val events: SharedFlow<Event> = _events.asSharedFlow()
// Collect with lifecycle
@Composable
fun HomeScreen(viewModel: HomeViewModel) {
val state by viewModel.state.collectAsStateWithLifecycle()
}
Flow Operators
flow
.filter { it.isActive }
.map { transform(it) }
.distinctUntilChanged()
.debounce(300)
.catch { emit(fallback) }
.collect { process(it) }
Error Handling
// Try-catch in coroutine
viewModelScope.launch {
try {
val result = repository.fetchData()
_state.value = Success(result)
} catch (e: Exception) {
_state.value = Error(e.message)
}
}
// supervisorScope - siblings don't cancel
supervisorScope {
launch { task1() } // Failure doesn't cancel task2
launch { task2() }
}
Cancellation
// Cooperative cancellation
suspend fun processItems(items: List<Item>) {
items.forEach { item ->
ensureActive() // Check cancellation
process(item)
}
}
// CancellationException handling
try {
coroutineWork()
} catch (e: CancellationException) {
throw e // Don't swallow!
} catch (e: Exception) {
handleError(e)
}
Remember: Structured concurrency = lifecycle-bound, cancellable, debuggable.