mcpField
R
rust-development

rust-development

github.com/laurigates開発59104 回インストール1 日前に更新
リポジトリ

rust-development について

Rustプロジェクトを開発、保守する人向けのリファレンススキルです。慣用的な記述、所有権とメモリ安全性、非同期処理、エラー処理、性能、テストを扱います。

主な機能

  1. 01所有権とメモリ安全性
  2. 02非同期プログラミングと並行処理
  3. 03エラー処理と型安全性
  4. 04性能分析と最適化
  5. 05テストと品質管理

活用シーン

  1. 01Rustモジュールやトレイトの設計
  2. 02非同期ネットワークアプリの実装
  3. 03Rustプロジェクト向けクレートの選定
  4. 04Rustコードの分析とテスト

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/laurigates/claude-plugins --skill rust-development

インストール後、Claude Code で/rust-developmentを入力して読み込まれたか確認します。

同梱ファイルREFERENCE.md

詳細

Rust 開発

メモリ安全性、恐れのない並行処理、ゼロコスト抽象化に重点を置いた、現代的なシステムプログラミングのための Rust に関する専門知識です。

このスキルを使う場面

次のような場合はこのスキルを使います…次のような場合は代わりに関連スキルを使います…
Rust コードの記述、所有権、ライフタイム、async/awaitlint ルールの詳細な設定には clippy-advanced を使います
エコシステムからクレートを選ぶ(Tokio、Serde)未使用の依存関係の検出には cargo-machete を使います
モジュール構成やトレイト階層の設計並列分離を使用したテストの実行には cargo-nextest を使います
慣用的な Rust のパターンやエディションの機能を学ぶカバレッジレポートの生成には cargo-llvm-cov を使います

中核となる専門知識

現代的な Rust エコシステム

  • Cargo:ビルドシステム、パッケージマネージャー、ワークスペース管理
  • Rustc:コンパイラーの最適化、ターゲット管理、クロスコンパイル
  • Clippy:慣用的なコードやパフォーマンス改善のための lint
  • Rustfmt:Rust のスタイルガイドラインに沿った一貫性のあるコード整形
  • Rust-analyzer:LSP 統合による高度な IDE サポート

言語機能

  • Rust 2024 エディション:RPITIT、トレイト内の async fn、impl Trait の改善
  • const ジェネリクスとコンパイル時計算
  • ジェネリック関連型(GAT)
  • let-else パターンと if-let チェーン

主な機能

所有権とメモリ安全性

  • 借用とライフタイムを使った所有権パターンの実装
  • ゼロコピー抽象化と効率的なメモリレイアウトの設計
  • Drop トレイトとスマートポインター(Box、Rc、Arc)による RAII パターンの適用
  • 内部可変性パターン(Cell、RefCell、Mutex、RwLock)の活用
  • 自己参照構造体で Pin/Unpin を使用

非同期プログラミングと並行処理

  • Tokio:高性能なネットワークアプリケーション向けの非同期ランタイム
  • async-std:使い慣れた API 設計を備えた代替の非同期ランタイム
  • Futures:合成可能な非同期抽象化とストリーム処理
  • Rayon:ワークスティーリング方式のスレッドプールを用いたデータ並列処理
  • アトミック操作とメモリ順序を用いたロックフリーのデータ構造の設計

エラー処理と型安全性

  • thiserror と anyhow を使った包括的なエラー型の設計
  • Result<T, E> と Option のパターンを効果的に実装
  • 網羅的なエラー処理にパターンマッチングを使用
  • コンパイル時の保証を実現するための型状態パターンの適用

パフォーマンス最適化

  • cargo-flamegraph、perf、criterion ベンチマークを使ったプロファイリング
  • SIMD 組み込み関数と自動ベクトル化による最適化
  • ゼロコスト抽象化とインライン最適化の実装
  • 適切な安全性のドキュメントを添えて unsafe コードを慎重に使用

テストと品質保証

  • 単体テスト:アサーションを含む #[test] モジュール
  • 統合テスト:エンドツーエンド検証のための tests/ ディレクトリ
  • Criterion:統計分析を用いたマイクロベンチマーク
  • Miri:unsafe コード内の未定義動作の検出
  • ファジング:セキュリティと堅牢性のテスト用 cargo-fuzz

必須コマンド

# Project setup
cargo new my-project      # Binary crate
cargo new my-lib --lib    # Library crate
cargo init                # Initialize in existing directory
# From a template repo instead of an empty crate — see the cargo-generate skill
cargo generate --git <template-url> --name my-project

# Development workflow
cargo build                      # Debug build
cargo build --release           # Optimized build
cargo run                       # Build and run
cargo run --release             # Run optimized
cargo test                      # Run all tests
cargo test --lib               # Library tests only
cargo bench                     # Run benchmarks

# Code quality
cargo clippy                    # Lint code
cargo clippy -- -W clippy::pedantic  # Stricter lints
cargo fmt                       # Format code
cargo fmt --check              # Check formatting
cargo fix                       # Auto-fix warnings

# Dependencies
cargo add serde --features derive  # Add dependency
cargo update                       # Update deps
cargo audit                        # Security audit
cargo deny check                   # License/advisory check

# Advanced tools
cargo expand                    # Macro expansion
cargo flamegraph               # Profile with flame graph
cargo doc --open               # Generate and open docs
cargo miri test                # Check for UB

# Cross-compilation
rustup target add wasm32-unknown-unknown
cargo build --target wasm32-unknown-unknown

ベストプラクティス

慣用的な Rust パターン

// Use iterators over manual loops
let sum: i32 = numbers.iter().filter(|x| **x > 0).sum();

// Prefer combinators for Option/Result
let value = config.get("key")
    .and_then(|v| v.parse().ok())
    .unwrap_or_default();

// Use pattern matching effectively
match result {
    Ok(value) if value > 0 => process(value),
    Ok(_) => handle_zero(),
    Err(e) => return Err(e.into()),
}

// Let-else for early returns
let Some(config) = load_config() else {
    return Err(ConfigError::NotFound);
};

プロジェクト構成

my-project/
├── Cargo.toml
├── src/
│   ├── lib.rs        # Library root
│   ├── main.rs       # Binary entry point
│   ├── error.rs      # Error types
│   └── modules/
│       └── mod.rs
├── tests/            # Integration tests
├── benches/          # Benchmarks
└── examples/         # Example programs

エラー処理

use thiserror::Error;

#[derive(Error, Debug)]
pub enum AppError {
    #[error("IO error: {0}")]
    Io(#[from] std::io::Error),

    #[error("parse error: {message}")]
    Parse { message: String },

    #[error("not found: {0}")]
    NotFound(String),
}

pub type Result<T> = std::result::Result<T, AppError>;

よく使われるクレート

クレート用途
serdeシリアライズ/デシリアライズ
tokio非同期ランタイム
reqwestHTTP クライアント
sqlx非同期 SQL
clapCLI 引数の解析
tracingログ記録/診断
anyhowアプリケーションのエラー
thiserrorライブラリのエラー

非同期パターンの詳細、unsafe コードのガイドライン、WebAssembly のコンパイル、組み込み開発、高度なデバッグについては、REFERENCE.md を参照してください。

コメント