dart-concurrency について
Dart 開発者向けに、並行処理の所有者、順序、キャンセル、エラー伝播を明確にするスキルガイドです。Future、Stream、isolate を扱い、競合状態とライフサイクルの検証を重視します。
主な機能
- 01処理に応じた Future または Stream の選択
- 02サブスクリプションとコントローラーのライフサイクル管理
- 03古いリクエストによる新しい状態の上書き防止
- 04CPU 負荷の高い処理に対する isolate の検討
- 05スタックトレースの保持とキャンセル処理
活用シーン
- 01非同期競合やリソースリークの調査
- 02古いリクエストによる現在の UI 状態の上書き防止
- 03キャンセル、破棄、順不同完了のテスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ thienqo/ flutter-skills --skill dart-concurrencyインストール後、Claude Code で/dart-concurrencyを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
evals/cases.jsonreferences/isolate-communication-and-worker-pools.mdstream-cancellation-and-debouncing.md詳細
Dart の並行処理
所有権、順序、キャンセル、エラー伝播を明確にします。
まず診断する
プロデューサー、コンシューマー、ライフサイクルの所有者、順序に関する要件、処理が不要になった場合に望む動作を特定します。同期待ちの仕組みを追加する前に、競合やリークを再現します。
判断基準
- 1つの結果には
Future、時間の経過に伴う一連の値にはStreamを使用します。 - 独立性とエラー処理を意図していない限り、未 await の処理は避けます。
- サブスクリプションとコントローラーは、所有するオブジェクトのライフサイクルに合わせてキャンセルします。
- 非同期処理をまたいだ後の UI 更新は、プロジェクトに適したライフサイクル管理の仕組みを使って保護します。
- キャンセル、トークン、順序管理、または最新優先のロジックを使い、新しい状態を古いリクエストが上書きしないようにします。
- 実測で CPU 負荷の高い処理や分離の必要性が確認された場合にのみ、アイソレートを使用します。通常のネットワーク I/O には使用しません。
- アイソレート境界を越えて転送可能な値を送信し、エラーを呼び出し元に伝えます。
- エラーを変換する場合も、スタックトレースを保持します。
非同期処理の所有権をグローバルヘルパーの内部に隠さないでください。再試行とタイムアウトの方針は、冪等性とユーザーの意図を把握している境界で管理します。
検証
成功、失敗、キャンセル/破棄、順不同での完了をテストします。静的解析を実行し、タイミングがバグの中心となる場合は、対象を絞ったストレステストまたはフェイク時間テストを追加します。
参考資料
- CPU 負荷の高い計算、ポートメッセージング、またはバックグラウンドワーカースレッドを扱う場合は、アイソレートの通信とワーカープールを参照してください。
- サブスクリプションのライフサイクル、競合状態、デバウンス/スロットリング、または最新優先のセマンティクスを管理する場合は、ストリームのキャンセルとデバウンスを参照してください。
出典
コメント
Markdown 対応