rust-async-patterns について
Tokio を使った実運用向けの非同期 Rust パターンをまとめたスキルです。並行アプリケーションやネットワークサービスを開発する人向けに、タスク、チャネル、エラー処理などを扱います。
主な機能
- 01Tokio の非同期実行パターン
- 02タスク、チャネル、ストリーム
- 03非同期エラー処理
- 04トレーシングとキャンセルの指針
活用シーン
- 01非同期 Rust アプリの構築
- 02並行ネットワークサービスの実装
- 03非同期コードのデバッグ
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ wshobson/ agents --skill rust-async-patternsインストール後、Claude Code で/rust-async-patternsを入力して読み込まれたか確認します。
同梱ファイルreferences/details.md
詳細
Rust 非同期パターン
Tokio ランタイムを使用した非同期 Rust プログラミングの実運用パターン。タスク、チャネル、ストリーム、エラーハンドリングを含みます。
このスキルを使用する場面
- 非同期 Rust アプリケーションを構築する場合
- 並行ネットワークサービスを実装する場合
- 非同期 I/O に Tokio を使用する場合
- 非同期エラーを適切に処理する場合
- 非同期コードの問題をデバッグする場合
- 非同期パフォーマンスを最適化する場合
中核となる概念
1. 非同期実行モデル
Future (lazy) → poll() → Ready(value) | Pending
↑ ↓
Waker ← Runtime schedules
2. 主要な抽象化
| 概念 | 目的 |
|---|---|
Future | 後で完了する可能性がある遅延計算 |
async fn | impl Future を返す関数 |
await | future が完了するまで中断する |
Task | 並行して実行されるスポーン済みの future |
Runtime | future をポーリングするエグゼキュータ |
クイックスタート
# Cargo.toml
[dependencies]
tokio = { version = "1", features = ["full"] }
futures = "0.3"
async-trait = "0.1"
anyhow = "1.0"
tracing = "0.1"
tracing-subscriber = "0.3"
use tokio::time::{sleep, Duration};
use anyhow::Result;
#[tokio::main]
async fn main() -> Result<()> {
// Initialize tracing
tracing_subscriber::fmt::init();
// Async operations
let result = fetch_data("https://api.example.com").await?;
println!("Got: {}", result);
Ok(())
}
async fn fetch_data(url: &str) -> Result<String> {
// Simulated async operation
sleep(Duration::from_millis(100)).await;
Ok(format!("Data from {}", url))
}
詳細なパターンと実例
詳細なパターンのドキュメントは references/details.md にあります。上記のナビゲーション階層では不十分な場合は、そのファイルを読んでください。
ベストプラクティス
やるべきこと
tokio::select!を使用する - future を競合させる場合- チャネルを優先する - 可能な場合は共有状態よりも
JoinSetを使用する - 複数のタスクを管理する場合- tracing でインストルメントする - 非同期コードをデバッグする場合
- キャンセルを処理する -
CancellationTokenを確認する
やってはいけないこと
- ブロックしない - 非同期で
std::thread::sleepを決して使用しない - await をまたいでロックを保持しない - デッドロックを引き起こす
- 無制限にスポーンしない - 制限にはセマフォを使用する
- エラーを無視しない -
?で伝播するかログに記録する - Send 境界を忘れない - スポーンされた future のために
コメント
Markdown 対応