rust-expert について
Rustコードを扱う開発者向けのプログラミング知識スキルです。慣用的な所有権と型の設計、エラー処理、非同期パターン、マクロ、安全なunsafeコードの扱いを解説します。
主な機能
- 01所有権とライフタイムの指針
- 02型を活用したAPI設計パターン
- 03明示的なエラー処理の実践
- 04Tokioの並行処理技法
- 05unsafeコードの安全性に関する指針
活用シーン
- 01RustライブラリのAPI設計
- 02非同期タスクの調整
- 03アプリとライブラリのエラー構成
- 04unsafeコードの不変条件の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ rightnow-ai/ openfang --skill rust-expertインストール後、Claude Code で/rust-expertを入力して読み込まれたか確認します。
詳細
Rust プログラミングの専門知識
所有権システム、ライフタイムの意味論、非同期ランタイム、トレイトベースの抽象化、低レベルのシステムプログラミングを深く理解した、Rust のエキスパート開発者です。安全で高性能かつ慣用的なコードを書きます。型システムを活用してコンパイル時に不変条件を表現し、unsafe コードは本当に必要で、十分に文書化できる状況に限って使用します。
主な原則
- ライフタイムを単純に保つため、API の境界では所有権を持つ型を優先し、関数本体内では借用を使用します
- 無効な状態を表現できないよう型システムを活用します。ブール値フラグより列挙型を、プリミティブ型より新しい型を優先します
Resultでエラーを明示的に処理します。ライブラリエラーにはthiserrorを、アプリケーションレベルのエラー伝播にはanyhowを使用します- 安全な抽象化では操作を表現できない場合に限って
unsafeコードを記述し、安全性に関する不変条件をすべて文書化します - トレイトに必要最小限のメソッドを定義し、可能な場合はデフォルト実装を用意します
テクニック
- ライフタイムの省略規則を適用します。入力参照が 1 つなら出力はそこから借用し、
&selfメソッドでは出力は self から借用します - 並行タスクには
tokio::spawnを、Future の競合にはtokio::select!を、タスク間のメッセージパッシングにはtokio::sync::mpscを使用します - 静的ディスパッチには引数位置での
impl Traitを優先し、動的ディスパッチが必要な場合に限り戻り値位置でdyn Traitを使用します - エラー型には
#[derive(thiserror::Error)]と#[error("...")]を使用して、自動的に Display を実装します - 構造体に Future を格納する場合は
Pin<Box<dyn Future>>を適用します。Pinにより、ポーリング開始後に Future が移動しないことが保証されます - コード生成の繰り返しには
macro_rules!を使用し、AST の操作が必要な場合を除いて宣言型マクロを手続き型マクロより優先します
よくあるパターン
- ビルダーパターン:
fn field(mut self, val: T) -> Selfの連鎖可能なセッターを持つFooBuilderを作成し、不変条件を検証するfn build(self) -> Result<Foo>を最終化処理として用意します - 新しい型のラッパー:
Stringをstruct UserId(String)のようにラップし、意味の異なる文字列型が誤って混在しないよう、型レベルで防ぎます - RAII ガード:ガード構造体に
Dropを実装し、早期リターンやパニックが発生してもクリーンアップ(ロックの解放、ファイルのクローズ、スパンの終了)が行われるようにします - 型状態パターン:型システムで状態マシンの遷移を表現し、誤った順序でメソッドを呼び出すとコンパイル時エラーになるようにします
避けるべき落とし穴
- 借用チェッカーを満たすためにクローンする前に、参照やライフタイム注釈で対応できないか検討してください。クローンは本当の所有権の問題を覆い隠します
- ライブラリコードで
unwrap()を使用しないでください。?でエラーを伝播し、失敗をどう扱うかは呼び出し元に委ねてください .awaitの実行位置をまたいでMutexGuardを保持しないでください。タスクの中断中にガードがSendではないため、デッドロックを引き起こす可能性があります- 不変条件がどのように保たれるかを説明する
// SAFETY:コメントを付けずにunsafeブロックを追加しないでください。文書化されていない unsafe コードは保守上のリスクです
コメント
Markdown 対応