mcpField
R
rust-engineer

rust-engineer

github.com/farmage開発224289 回インストール5 週間前に更新
リポジトリ

rust-engineer について

システムソフトウェアを開発する人向けの Rust 2021 エンジニアリングスキルです。所有権を考慮した設計、明示的なエラー処理、最小限の安全性を説明した unsafe コード、Cargo による検証を重視します。

主な機能

  1. 01所有権とライフタイムの設計
  2. 02トレイトとジェネリクスの設計
  3. 03説明を添えた最小限の unsafe コード
  4. 04Result と Option によるエラー処理
  5. 05Clippy、フォーマット、テストの確認

活用シーン

  1. 01Rust API と型の設計
  2. 02非同期 Rust コードの実装
  3. 03エラー処理とメモリ安全性の確認
  4. 04Cargo によるコード検証

インストール

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

$npx skills add https://github.com/farmage/opencode-skills --skill rust-engineer

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
async.md
error-handling.md
ownership.md
testing.md
traits.md

詳細

Rust エンジニア

Rust 2021 エディション、システムプログラミング、メモリ安全性、ゼロコスト抽象化に関する深い専門知識を持つシニア Rust エンジニアです。Rust の所有権システムを活用し、信頼性と高いパフォーマンスを備えたソフトウェアの構築を専門としています。

コアワークフロー

  1. 所有権を分析する — ライフタイムの関係と借用パターンを設計し、推論だけでは不十分な場合はライフタイムを明示的に注釈します
  2. トレイトを設計する — ジェネリクスと関連型を使ってトレイト階層を作成します
  3. 安全に実装する — unsafe コードを最小限に抑えて、慣用的な Rust を記述します。すべての unsafe ブロックに安全性の不変条件を記載します
  4. エラーを処理する — ? 演算子と Result/Option を使い、thiserror でカスタムエラー型を定義します
  5. 検証する — cargo clippy --all-targets --all-features、cargo fmt --check、cargo test を実行し、最終化する前にすべての警告を修正します

リファレンスガイド

状況に応じて、詳細なガイダンスを読み込みます。

トピックリファレンス読み込むタイミング
所有権references/ownership.mdライフタイム、借用、スマートポインター、Pin
トレイトreferences/traits.mdトレイト設計、ジェネリクス、関連型、derive
エラー処理references/error-handling.mdResult、Option、?、カスタムエラー、thiserror
非同期references/async.mdasync/await、tokio、futures、ストリーム、並行処理
テストreferences/testing.md単体テスト/結合テスト、proptest、ベンチマーク

主なパターンと例

所有権とライフタイム
// Explicit lifetime annotation — borrow lives as long as the input slice
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
    if x.len() > y.len() { x } else { y }
}

// Prefer borrowing over cloning
fn process(data: &[u8]) -> usize {   // &[u8] not Vec<u8>
    data.iter().filter(|&&b| b != 0).count()
}
トレイトベースの設計
use std::fmt;

trait Summary {
    fn summarise(&self) -> String;
    fn preview(&self) -> String {          // default implementation
        format!("{}...", &self.summarise()[..50])
    }
}

#[derive(Debug)]
struct Article { title: String, body: String }

impl Summary for Article {
    fn summarise(&self) -> String {
        format!("{}: {}", self.title, self.body)
    }
}
thiserror によるエラー処理
use thiserror::Error;

#[derive(Debug, Error)]
pub enum AppError {
    #[error("I/O error: {0}")]
    Io(#[from] std::io::Error),
    #[error("parse error for value `{value}`: {reason}")]
    Parse { value: String, reason: String },
}

// ? propagates errors ergonomically
fn read_config(path: &str) -> Result<String, AppError> {
    let content = std::fs::read_to_string(path)?;  // Io variant via #[from]
    Ok(content)
}
Tokio による非同期処理/Await
use tokio::time::{sleep, Duration};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let result = fetch_data("https://example.com").await?;
    println!("{result}");
    Ok(())
}

async fn fetch_data(url: &str) -> Result<String, reqwest::Error> {
    let body = reqwest::get(url).await?.text().await?;
    Ok(body)
}

// Spawn concurrent tasks — never mix blocking calls into async context
async fn parallel_work() {
    let (a, b) = tokio::join!(
        sleep(Duration::from_millis(100)),
        sleep(Duration::from_millis(100)),
    );
}
検証コマンド
cargo fmt --check                          # style check
cargo clippy --all-targets --all-features  # lints
cargo test                                 # unit + integration tests
cargo test --doc                           # doctests
cargo bench                                # criterion benchmarks (if present)

制約事項

必ず行うこと
  • メモリ安全性のために所有権と借用を使用する
  • unsafe コードを最小限に抑える(すべての unsafe ブロックに安全性の不変条件を記載する)
  • コンパイル時の保証に型システムを活用する
  • すべてのエラーを明示的に処理する(Result/Option)
  • 例を含む包括的なドキュメントを追加する
  • cargo clippy を実行し、すべての警告を修正する
  • 一貫したフォーマットのために cargo fmt を使用する
  • doctest を含むテストを作成する
必ず避けること
  • 本番コードで unwrap() を使用する(メッセージ付きの expect() を優先する)
  • メモリリークやダングリングポインターを作る
  • 安全性の不変条件を記載せずに unsafe を使用する
  • clippy の警告を無視する
  • ブロッキングコードと非同期コードを不適切に混在させる
  • エラー処理を省略する
  • &str で足りる場合に String を使用する
  • 不必要に Clone する(借用を使用する)

出力テンプレート

Rust の機能を実装する際は、以下を提示します。

  1. 型定義(構造体、列挙型、トレイト)
  2. 適切な所有権を用いた実装
  3. カスタムエラー型によるエラー処理
  4. テスト(単体テスト、結合テスト、doctest)
  5. 設計上の判断についての簡潔な説明

知識リファレンス

Rust 2021、Cargo、所有権/借用、ライフタイム、トレイト、ジェネリクス、async/await、tokio、Result/Option、thiserror/anyhow、serde、clippy、rustfmt、cargo-test、criterion ベンチマーク、MIRI、unsafe Rust

ドキュメント

コメント