mcpField
C
coding-rust

coding-rust

github.com/alphaonedev開発45 回インストール
リポジトリ

coding-rust について

coding-rust は Rust 開発者向けのプログラミングスキルです。所有権、非同期処理、エラー処理、Cargo ワークスペースを扱い、システムコードや複数 crate の開発に役立ちます。

主な機能

  1. 01所有権とライフタイムの管理
  2. 02トレイトと多態性の実装
  3. 03Tokio による非同期タスク
  4. 04anyhow と thiserror によるエラー処理
  5. 05Cargo ワークスペースの構成
  6. 06unsafe の慎重な使用

活用シーン

  1. 01借用安全な Rust コードの作成
  2. 02Tokio を使った非同期プログラムの構築
  3. 03複数 crate プロジェクトの整理
  4. 04CLI ツールのエラー処理設計

インストール

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

$npx skills add https://github.com/alphaonedev/openclaw-graph --skill coding-rust

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

詳細

coding-rust

目的

このスキルは、高度な Rust プログラミングの専門知識を提供します。中核となる言語機能とエコシステムのツールに重点を置き、効率的で安全なシステムコードの構築を支援します。

使用する場面

  • 所有権、借用、ライフタイムを用いて、データ競合などの一般的なエラーを防ぐメモリー安全なコードを実装する場合。
  • Tokio による非同期プログラミング、anyhow/thiserror によるエラー処理、または Cargo ワークスペースによる複数クレート構成の管理が必要なプロジェクト。
  • パフォーマンスが重要な箇所で unsafe コードを使う場合、またはトレイトでカスタム動作を定義する場合。

主な機能

  • Rust の所有権モデルを管理する:参照(&T)とライフタイム('a)を使用して、所有権を移さずにデータを借用します。
  • トレイトを実装する:ポリモーフィズムのためにトレイトオブジェクトを定義して使用します。例:trait Debug { fn fmt(&self); }。
  • Tokio で非同期処理を扱う:tokio::main とフューチャーを使用して非同期タスクを実行します。
  • エラーを管理する:簡単なエラーのラップには anyhow を、カスタムエラー型には thiserror を活用します。
  • Cargo ワークスペース:Cargo.toml のワークスペースを使用して、依存関係を共有する複数パッケージのプロジェクトを整理します。
  • unsafe 操作:安全性に関する不変条件を維持しながら、raw ポインターや FFI に unsafe ブロックを使用します。

使用パターン

  • 所有権と借用を扱う場合は、クローンより常に借用を優先します。可変参照には &mut T を使い、関数 fn borrow lifetimes<'a>(x: &'a i32) -> &'a i32 のようにライフタイムを一致させます。
  • 非同期タスクでは、Tokio ランタイムを起動します。tokio::spawn を使ってフューチャーを並行実行し、非同期 main 関数で結果を await します。
  • 拡張性を高めるためにトレイトを定義します。トレイトを作成して構造体に実装します。例:impl MyTrait for MyStruct { fn method() { ... } }。
  • Cargo ワークスペースを設定します。ルートの Cargo.toml に [workspace] セクションを追加し、members = ["crate1", "crate2"] を指定してから、cargo build --workspace でビルドします。
  • エラーには anyhow を使います。エラーを anyhow::Result でラップし、? 演算子で伝播させます。
  • unsafe は必要最小限に使用します。unsafe { *ptr = value; } のようなブロックで unsafe コードを囲み、コメントでその理由を説明します。

主なコマンド/API

  • Cargo コマンド:最適化されたバイナリーを cargo build --release でビルドします。すべてのクレートを cargo test --workspace でテストします。cargo add tokio --features full で依存関係を追加します。
  • Tokio API:#[tokio::main] async fn main() { tokio::spawn(async { ... }); } で非同期ランタイムを起動します。非同期通信にはチャネルを使います。例:let (tx, rx) = tokio::sync::mpsc::channel(10);。
  • Anyhow/thiserror:#[derive(thiserror::Error)] enum MyError { ... } でカスタムエラーを定義します。関数では fn example() -> anyhow::Result<()> { ... } のように処理します。
  • 所有権ヘルパー:std::mem::drop などの標準ライブラリー関数で値を明示的に破棄するか、所有データまたはコピーされたデータに std::borrow::Cow を使用します。
  • 設定形式:プロジェクト設定には Cargo.toml を編集します。例:[dependencies] tokio = { version = "1.0", features = ["full"] }。デバッグには RUST_BACKTRACE=1 などの環境変数を使用します。

統合に関する注意

  • 他のツールとの統合:$RUSTUP_TOOLCHAIN 環境変数を使って Rust のバージョンを切り替えます。例:不安定な機能を使うには export RUSTUP_TOOLCHAIN=nightly を実行します。
  • 外部連携で API キーを使う場合(Rust から外部サービスを呼び出す場合など)は、$MY_API_KEY などの環境変数を設定し、std::env::var("MY_API_KEY").unwrap() で取得します。
  • ビルドツールとの連携:CI/CD では、ビルド前に cargo fmt でコードをフォーマットし、cargo clippy でリントを実行します。
  • プロジェクトへの組み込み:Cargo.toml に Tokio を依存関係として追加し、コード内で use tokio::runtime::Runtime; let rt = Runtime::new().unwrap(); rt.block_on(async { ... }); を使ってインポートします。
  • ワークスペース内のクレート間依存関係を扱う:パスを使ってクレートを参照します。例:Cargo.toml で path = "../sibling_crate" を使用します。

エラー処理

  • エラーを手軽に伝播させるには anyhow を使用します:関数から anyhow::Result<T> を返し、? でエラーを処理します。例:fn read_file() -> anyhow::Result<String> { std::fs::read_to_string("file.txt").context("Failed to read") }。
  • thiserror でカスタムエラーを定義します:#[derive(thiserror::Error, Debug)] enum AppError { #[error("IO error: {0}")] Io(#[from] std::io::Error), } のようにエラーを導出し、match 文で処理します。
  • 非同期コンテキストでは、Tokio のエラー型を使用します:Future を await し、.await.map_err(|e| anyhow::Error::from(e)) でエラーを処理します。
  • unsafe コードでは、必ずパニックを確認します:unsafe ブロックの周囲で std::panic::catch_unwind を使用して、クラッシュを防ぎます。

具体的な使用例

  1. Tokio を使った非同期 HTTP サーバー:Cargo.toml に Tokio を追加して簡単なサーバーを作成し、次のように記述します:use tokio::net::TcpListener; #[tokio::main] async fn main() -> anyhow::Result<()> { let listener = TcpListener::bind("127.0.0.1:8080").await?; loop { let (socket, _) = listener.accept().await?; tokio::spawn(handle_connection(socket)); } }。
  2. CLI ツールでのエラー処理:エラーを定義して anyhow を使用します:Cargo.toml に anyhow = "1.0" と thiserror = "1.0" を追加し、次のように実装します:use thiserror::Error; #[derive(Error, Debug)] enum Error { #[error("Parse error")] Parse, } fn main() -> anyhow::Result<()> { let input = std::env::args().nth(1)?; if input.parse::<u32>().is_err() { Err(Error::Parse)?; } Ok(()) }。

グラフの関係性

  • 関連項目:コーディング(クラスター)。「coding」などのタグを共有し、プログラミングスキルに焦点を当てています。
  • タグを介して接続:「rust」と「systems」のタグを通じて、ほかの Rust またはシステムプログラミングのスキルにつながる可能性があります。
  • 依存関係:「coding」クラスターのスキル(エコシステムを幅広くサポートする一般的なコーディングツールなど)と統合される場合があります。

コメント