mcpField
R
rust-async-patterns

rust-async-patterns

github.com/wshobson開発41.9k20.9k 回インストール2 週間前に更新
リポジトリ

rust-async-patterns について

Tokio を使った実運用向けの非同期 Rust パターンをまとめたスキルです。並行アプリケーションやネットワークサービスを開発する人向けに、タスク、チャネル、エラー処理などを扱います。

主な機能

  1. 01Tokio の非同期実行パターン
  2. 02タスク、チャネル、ストリーム
  3. 03非同期エラー処理
  4. 04トレーシングとキャンセルの指針

活用シーン

  1. 01非同期 Rust アプリの構築
  2. 02並行ネットワークサービスの実装
  3. 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 fnimpl Future を返す関数
awaitfuture が完了するまで中断する
Task並行して実行されるスポーン済みの future
Runtimefuture をポーリングするエグゼキュータ

クイックスタート

# 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 のために

コメント