rust-idioms について
Rust の慣用的な書き方とリファクタリングのガイドです。型安全性、所有権、エラー処理、API 設計などのルールを影響度順にまとめています。
主な機能
- 018 分野の Rust 実践項目
- 02型安全性と Newtype の重視
- 03所有権と借用の指針
- 04エラー処理パターンの整理
- 05API とモジュール設計の提案
活用シーン
- 01強い型保証を持つ Rust コードの作成
- 02所有権と借用パターンのリファクタリング
- 03エラー処理方針の設計
- 04モジュール構成と可視性の整理
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill rust-idiomsインストール後、Claude Code で/rust-idiomsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
AGENTS.mdREADME.mdmetadata.jsonassets/templates/_template.mdreferences/_sections.mdapi-builder-pattern.mdapi-derive-common-traits.mdapi-extension-traits.mdapi-generic-bounds.mdapi-impl-standard-traits.mdapi-sealed-traits.mdconv-asref-for-flexibility.mdconv-impl-deref-for-newtypes.mdconv-impl-from-not-into.mdconv-inner-function-pattern.mdconv-tryfrom-for-fallible.mderr-anyhow-for-applications.mderr-option-for-absence.mderr-question-mark-propagation.mderr-thiserror-for-libraries.mderr-use-result-not-panic.mdidiom-constructor-naming.mdidiom-default-trait.mdidiom-destructuring-assignment.mdidiom-let-else.mdidiom-match-guards.mdidiom-struct-update-syntax.mditer-avoid-collect-then-iterate.mditer-enumerate-for-indices.mditer-filter-map-combined.md詳細
Rust Community Rust リファクタリングのベストプラクティス
Rust Community がメンテナンスする、Rust アプリケーション向けの包括的なリファクタリングおよび慣用パターンのガイドです。自動リファクタリングとコード生成の指針となるよう、影響度順に優先順位を付けた 8 カテゴリ、44 のルールを収録しています。
適用するタイミング
以下の場合に、このガイドラインを参照してください。
- 強い型保証を備えた新しい Rust コードを書くとき
- 所有権と借用のパターンをリファクタリングするとき
- エラーハンドリング戦略を設計するとき
- トレイトとジェネリクスを使用して公開 API を作成するとき
- モジュールを整理し、可視性を制御するとき
優先度別のルールカテゴリ
| 優先度 | カテゴリ | 影響度 | プレフィックス |
|---|---|---|---|
| 1 | 型安全性と Newtype パターン | CRITICAL | type- |
| 2 | 所有権と借用 | CRITICAL | own- |
| 3 | エラーハンドリングパターン | HIGH | err- |
| 4 | API 設計とトレイト | HIGH | api- |
| 5 | モジュールと可視性 | MEDIUM-HIGH | mod- |
| 6 | 変換トレイト | MEDIUM | conv- |
| 7 | 慣用パターン | MEDIUM | idiom- |
| 8 | イテレーターとコレクション | LOW-MEDIUM | iter- |
クイックリファレンス
1. 型安全性と Newtype パターン(CRITICAL)
type-newtype-units- 単位の安全性に Newtype パターンを使用するtype-newtype-invariants- Newtype のコンストラクターに不変条件をエンコードするtype-non-exhaustive-enums- 拡張可能な列挙型には non-exhaustive を使用するtype-phantom-data- 型レベルの状態に PhantomData を使用するtype-strong-typing-strings- 文字列型に依存した API を強い型に置き換えるtype-builder-required-fields- 必須フィールドには typestate ビルダーを使用する
2. 所有権と借用(CRITICAL)
own-prefer-borrowing- パラメーターでは所有権より借用を優先するown-cow-conditional-clone- 条件付きの所有権には Cow を使用するown-accept-borrowed-types- 所有された参照より借用型を受け入れるown-return-owned-for-flexibility- 呼び出し側の柔軟性を高めるため、所有型を返すown-avoid-unnecessary-clone- 不要な clone 呼び出しを避けるown-lifetime-elision- ライフタイム省略のルールを活用する
3. エラーハンドリングパターン(HIGH)
err-use-result-not-panic- 回復可能なエラーには panic! ではなく Result を使用するerr-thiserror-for-libraries- ライブラリのエラー型には thiserror を使用するerr-anyhow-for-applications- アプリケーションのエラーハンドリングには anyhow を使用するerr-question-mark-propagation- エラー伝播には疑問符演算子を使用するerr-option-for-absence- 値がないことを示すには、番兵値ではなく Option を使用する
4. API 設計とトレイト(HIGH)
api-derive-common-traits- 公開型には一般的なトレイトを derive するapi-impl-standard-traits- 使いやすい API のために標準トレイトを実装するapi-generic-bounds- ジェネリックの柔軟性を高めるためにトレイト境界を使用するapi-sealed-traits- 外部からの実装を防ぐには sealed trait を使用するapi-builder-pattern- 複雑な構築にはビルダーパターンを使用するapi-extension-traits- 外部型にメソッドを追加するには拡張トレイトを使用する
5. モジュールと可視性(中〜高)
mod-minimize-pub-api- 公開 API の範囲を最小限に抑えるmod-pub-use-reexports- モジュールをすっきり再エクスポートするために pub use を使うmod-split-large-modules- 大きなモジュールをサブモジュールに分割するmod-crate-prefix-imports- 内部インポートには crate:: プレフィックスを使うmod-tests-submodule- ユニットテストには tests サブモジュールを使う
6. 変換トレイト(中)
conv-impl-from-not-into- Into ではなく From を実装するconv-asref-for-flexibility- 文字列パラメーターを柔軟に扱うために AsRef を受け入れるconv-impl-deref-for-newtypes- newtype に透過的にアクセスできるよう Deref を実装するconv-tryfrom-for-fallible- 失敗する可能性のある変換には TryFrom を使うconv-inner-function-pattern- モノモーフィゼーションを減らすために内部関数パターンを使う
7. 慣用的なパターン(中)
idiom-default-trait- 引数なしの new() の代わりに Default を実装するidiom-constructor-naming- コンストラクターの命名規則に従うidiom-let-else- パターンマッチに失敗したときの早期リターンには let-else を使うidiom-struct-update-syntax- 一部の値を上書きするには構造体更新構文を使うidiom-destructuring-assignment- 複数の戻り値やフィールドへのアクセスには分配を使うidiom-match-guards- 複雑な条件には match ガードを使う
8. イテレーターとコレクション(低〜中)
iter-prefer-iterators-over-loops- 手動ループよりイテレーターメソッドを優先するiter-use-collect-turbofish- collect の型を明示するにはターボフィッシュを使うiter-filter-map-combined- フィルターと変換を組み合わせるには filter_map を使うiter-avoid-collect-then-iterate- collect してからイテレートするのは避けるiter-enumerate-for-indices- 手動でインデックスを追跡する代わりに enumerate を使う
使用方法
詳しい説明とコード例については、各リファレンスファイルをお読みください。
コンパイル済み完全版ドキュメント
単一ファイルの包括的なガイドについては、AGENTS.mdをご覧ください。
コメント
Markdown 対応