--- name: concurrency-async description: 並行処理や非同期操作を実装する際に使用。 --- # Concurrency and Async ## 📋 実行前チェック(必須) ### このスキルを使うべきか? - [ ] 並列処理を実装する? - [ ] async/awaitを使用する? - [ ] 競合状態の懸念がある? - [ ] Promise.all等で並列実行する? ### 前提条件 - [ ] 各タスクが独立しているか確認したか? - [ ] 順序依存性を把握しているか? - [ ] エラーハンドリングを検討したか? ### 禁止事項の確認 - [ ] 独立タスクを順次実行しようとしていないか? - [ ] 競合状態を無視しようとしていないか? - [ ] await漏れがないか確認したか? - [ ] Promise.allでの1つの失敗で全体が失敗することを考慮したか? --- ## トリガー - 並列処理実装時 - async/await使用時 - 競合状態の懸念がある時 - Promise.all等の並列実行時 --- ## 🚨 鉄則 **競合状態を常に意識。シンプルに保つ。** --- ## 並列実行 ```typescript // ✅ 独立タスクは並列 const [users, products] = await Promise.all([ fetchUsers(), fetchProducts() ]); // ❌ 不要な順次実行 const users = await fetchUsers(); const products = await fetchProducts(); ``` --- ## エラーハンドリング ```typescript // Promise.allは1つ失敗で全体失敗 // 個別にエラーハンドリングしたい場合 const results = await Promise.allSettled([ fetchUsers(), fetchProducts() ]); results.forEach(result => { if (result.status === 'fulfilled') { console.log(result.value); } else { console.error(result.reason); } }); ``` --- ## 🚫 禁止事項まとめ - 独立タスクの順次実行 - 競合状態の無視 - await漏れ - エラーハンドリング忘れ