rust-development について
Rustプロジェクトを開発、保守する人向けのリファレンススキルです。慣用的な記述、所有権とメモリ安全性、非同期処理、エラー処理、性能、テストを扱います。
主な機能
- 01所有権とメモリ安全性
- 02非同期プログラミングと並行処理
- 03エラー処理と型安全性
- 04性能分析と最適化
- 05テストと品質管理
活用シーン
- 01Rustモジュールやトレイトの設計
- 02非同期ネットワークアプリの実装
- 03Rustプロジェクト向けクレートの選定
- 04Rustコードの分析とテスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ laurigates/ claude-plugins --skill rust-developmentインストール後、Claude Code で/rust-developmentを入力して読み込まれたか確認します。
同梱ファイルREFERENCE.md
詳細
Rust 開発
メモリ安全性、恐れのない並行処理、ゼロコスト抽象化に重点を置いた、現代的なシステムプログラミングのための Rust に関する専門知識です。
このスキルを使う場面
| 次のような場合はこのスキルを使います… | 次のような場合は代わりに関連スキルを使います… |
|---|---|
| Rust コードの記述、所有権、ライフタイム、async/await | lint ルールの詳細な設定には 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 | 非同期ランタイム |
reqwest | HTTP クライアント |
sqlx | 非同期 SQL |
clap | CLI 引数の解析 |
tracing | ログ記録/診断 |
anyhow | アプリケーションのエラー |
thiserror | ライブラリのエラー |
非同期パターンの詳細、unsafe コードのガイドライン、WebAssembly のコンパイル、組み込み開発、高度なデバッグについては、REFERENCE.md を参照してください。
コメント
Markdown 対応