rust-skills
Rustコーディングの包括的なガイドラインで、14カテゴリー across 179ルールを提供します。Rustコードの作成、レビュー、リファクタリング時に活用できます。所有権、エラーハンドリング、非同期パターン、API設計、メモリ最適化、パフォーマンス、テスト、一般的なアンチパターンをカバーしています。/rust-skillsコマンドで呼び出します。
description の原文を見る
Comprehensive Rust coding guidelines with 179 rules across 14 categories. Use when writing, reviewing, or refactoring Rust code. Covers ownership, error handling, async patterns, API design, memory optimization, performance, testing, and common anti-patterns. Invoke with /rust-skills.
SKILL.md 本文
Rustのベストプラクティス
高品質で慣例的、かつ高度に最適化されたRustコードを書くための包括的なガイドです。14のカテゴリーにわたる179のルールを含んでおり、LLMのコード生成とリファクタリングを導くための優先度付けがされています。
適用時期
以下の場合にこれらのガイドラインを参照してください:
- 新しいRustの関数、構造体、またはモジュールを書く
- エラーハンドリングまたは非同期コードを実装する
- ライブラリ用の公開APIを設計する
- オーナーシップ/借用の問題についてコードをレビューする
- メモリ使用量を最適化するか、割り当てを削減する
- ホットパスのパフォーマンスをチューニングする
- 既存のRustコードをリファクタリングする
ルールカテゴリー(優先度順)
| 優先度 | カテゴリー | 影響度 | プレフィックス | ルール数 |
|---|---|---|---|---|
| 1 | オーナーシップと借用 | CRITICAL | own- | 12 |
| 2 | エラーハンドリング | CRITICAL | err- | 12 |
| 3 | メモリ最適化 | CRITICAL | mem- | 15 |
| 4 | API設計 | HIGH | api- | 15 |
| 5 | 非同期/await | HIGH | async- | 15 |
| 6 | コンパイラ最適化 | HIGH | opt- | 12 |
| 7 | 命名規則 | MEDIUM | name- | 16 |
| 8 | 型安全性 | MEDIUM | type- | 10 |
| 9 | テスト | MEDIUM | test- | 13 |
| 10 | ドキュメント | MEDIUM | doc- | 11 |
| 11 | パフォーマンスパターン | MEDIUM | perf- | 11 |
| 12 | プロジェクト構造 | LOW | proj- | 11 |
| 13 | Clippy & リント | LOW | lint- | 11 |
| 14 | アンチパターン | REFERENCE | anti- | 15 |
クイックリファレンス
1. オーナーシップと借用 (CRITICAL)
-own-borrow-over-clone.clone()より&T借用を推奨-own-slice-over-vec&Vec<T>ではなく&[T]、&Stringではなく&strを受け付ける- 条件付きオーナーシップにはown-cow-conditionalCow<'a, T>を使用- スレッドセーフな共有オーナーシップにはown-arc-sharedArc<T>を使用- シングルスレッド共有にはown-rc-single-threadRc<T>を使用- シングルスレッド内部可変性にはown-refcell-interiorRefCell<T>を使用- マルチスレッド内部可変性にはown-mutex-interiorMutex<T>を使用- 読み取りが書き込みを上回る場合はown-rwlock-readersRwLock<T>を使用- 小さな自明な型にはown-copy-smallCopyを導出-own-clone-explicitCloneを明示的にし、暗黙的なコピーを避ける- 大きなデータはクローンではなく移動own-move-large- 可能な限りライフタイム省略に頼るown-lifetime-elision
2. エラーハンドリング (CRITICAL)
- ライブラリのエラー型にはerr-thiserror-libthiserrorを使用- アプリケーションのエラーハンドリングにはerr-anyhow-appanyhowを使用- 予想されるエラーではパニックせずerr-result-over-panicResultを返す-err-context-chain.context()または.with_context()でコンテキストを追加- 本番コードでerr-no-unwrap-prod.unwrap()を使用しない-err-expect-bugs-only.expect()はプログラミングエラーのみに使用- クリーンな伝播にはerr-question-mark?オペレータを使用- 自動エラー変換にはerr-from-impl#[from]を使用- 根底にあるエラーをチェーンするにはerr-source-chain#[source]を使用- エラーメッセージ:小文字、末尾に句読点なしerr-lowercase-msg-err-doc-errors# Errorsセクションでエラーをドキュメント化-err-custom-typeBox<dyn Error>ではなくカスタムエラー型を作成
3. メモリ最適化 (CRITICAL)
- サイズが既知の場合はmem-with-capacitywith_capacity()を使用- 通常は小さいコレクションにはmem-smallvecSmallVecを使用- 境界のあるサイズのコレクションにはmem-arrayvecArrayVecを使用- 大きなenumバリアントをボックス化して型サイズを削減mem-box-large-variant- 固定の場合はmem-boxed-sliceVec<T>ではなくBox<[T]>を使用- 空であることが多いベクトルにはmem-thinvecThinVecを使用- 割り当てを再利用するにはmem-clone-fromclone_from()を使用- ループ内でmem-reuse-collectionsclear()を使用してコレクションを再利用- 文字列リテラルで十分な場合はmem-avoid-formatformat!()を避ける-mem-write-over-formatformat!()の代わりにwrite!()を使用- バッチ割り当てにはアリーナアロケータを使用mem-arena-allocator- スライスとmem-zero-copyBytesでゼロコピーパターンを使用- 小文字列最適化にはmem-compact-stringCompactStringを使用- 適合する最小の整数型を使用mem-smaller-integers- ホット型のサイズをアサートして回帰を防止mem-assert-type-size
4. API設計 (HIGH)
- 複雑な構築にはビルダーパターンを使用api-builder-pattern- ビルダー型にapi-builder-must-use#[must_use]を追加- 型安全な区別にはnewtypeを使用api-newtype-safety- コンパイル時のステートマシンにはtypestateを使用api-typestate- 外部の実装を防ぐためにトレイトをシールapi-sealed-trait- 外部型にメソッドを追加するにはエクステンショントレイトを使用api-extension-trait- 検証のために解析し、検証済み型に解析api-parse-dont-validate- 柔軟な文字列入力にはapi-impl-intoimpl Into<T>を受け付ける- 借用された入力にはapi-impl-asrefimpl AsRef<T>を受け付ける-api-must-useResultを返す関数に#[must_use]を追加- 将来証明なenumと構造体にはapi-non-exhaustive#[non_exhaustive]を使用-api-from-not-intoIntoではなくFromを実装(自動導出)- 適切なデフォルトにはapi-default-implDefaultを実装-api-common-traitsDebug、Clone、PartialEqを早期に実装-api-serde-optionalSerialize/Deserializeをフィーチャーフラグの背後に配置
5. 非同期/Await (HIGH)
- 本番環境の非同期ランタイムにはTokioを使用async-tokio-runtime-async-no-lock-await.awaitを跨いでMutex/RwLockを保持しない- CPU集約的な作業にはasync-spawn-blockingspawn_blockingを使用- 非同期コードではasync-tokio-fsstd::fsではなくtokio::fsを使用- グレースフルシャットダウンにはasync-cancellation-tokenCancellationTokenを使用- 並列操作にはasync-join-paralleltokio::join!を使用- フォールイブルな並列操作にはasync-try-jointokio::try_join!を使用- レーシング/タイムアウトにはasync-select-racingtokio::select!を使用- バックプレッシャーには境界のあるチャネルを使用async-bounded-channel- ワークキューにはasync-mpsc-queuempscを使用- パブ/サブパターンにはasync-broadcast-pubsubbroadcastを使用- 最新値の共有にはasync-watch-latestwatchを使用- リクエスト/レスポンスにはasync-oneshot-responseoneshotを使用- 動的なタスクグループにはasync-joinset-structuredJoinSetを使用- awaitの前にデータをクローンし、ロックを解放async-clone-before-await
6. コンパイラ最適化 (HIGH)
- 小さいホット関数にはopt-inline-small#[inline]を使用-opt-inline-always-rare#[inline(always)]は控えめに使用- コールドパスにはopt-inline-never-cold#[inline(never)]を使用- エラー/起こりにくいパスにはopt-cold-unlikely#[cold]を使用- ブランチヒントにはopt-likely-hintlikely()/unlikely()を使用- リリースビルドでLTOを有効化opt-lto-release- 最大最適化にはopt-codegen-unitscodegen-units = 1を使用- 本番ビルドにはPGOを使用opt-pgo-profile- ローカルビルドにはopt-target-cputarget-cpu=nativeを設定- 境界チェックを避けるにはイテレータを使用opt-bounds-check- データ並列操作にはポータブルSIMDを使用opt-simd-portable- キャッシュフレンドリーなデータレイアウト(SoA)を設計opt-cache-friendly
7. 命名規則 (MEDIUM)
- 型、トレイト、enumにはname-types-camelUpperCamelCaseを使用- enumバリアントにはname-variants-camelUpperCamelCaseを使用- 関数、メソッド、モジュールにはname-funcs-snakesnake_caseを使用- 定数/staticにはname-consts-screamingSCREAMING_SNAKE_CASEを使用- 短い小文字のライフタイムを使用:name-lifetime-short'a、'de、'src- 型パラメータに単一大文字を使用:name-type-param-singleT、E、K、V-name-as-freeas_プレフィックス:フリー参照変換-name-to-expensiveto_プレフィックス:高コストな変換-name-into-ownershipinto_プレフィックス:オーナーシップ譲渡- シンプルなゲッターにname-no-get-prefixget_プレフィックスなし- ブール型メソッドにはname-is-has-boolis_、has_、can_を使用- イテレータにはname-iter-conventioniter/iter_mut/into_iterを使用- イテレータメソッドを一貫性を持って命名name-iter-method- イテレータ型名とメソッドを対応させるname-iter-type-match- アクロニムを単語として扱う:name-acronym-wordUUIDではなくUuid- クレート名:name-crate-no-rs-rs接尾辞なし
8. 型安全性 (MEDIUM)
- IDをnewtypeでラップ:type-newtype-idsUserId(u64)- 検証済みデータ用newtype:type-newtype-validatedEmail、Url- 相互に排他的な状態にはenumを使用type-enum-states- nullable値にはtype-option-nullableOption<T>を使用- フォールイブルな操作にはtype-result-fallibleResult<T, E>を使用- 型レベルのマーカーにはtype-phantom-markerPhantomData<T>を使用- 戻らない関数にはtype-never-diverge!型を使用- 必要な場所にのみトレイト境界を追加type-generic-bounds- stringly型のAPIを避け、enumやnewtypeを使用type-no-stringly- FFI newtypeにはtype-repr-transparent#[repr(transparent)]を使用
9. テスト (MEDIUM)
-test-cfg-test-module#[cfg(test)] mod tests { }を使用- テストモジュールではtest-use-superuse super::*;を使用- 統合テストをtest-integration-dirtests/ディレクトリに配置- わかりやすいテスト名を使用test-descriptive-names- テストをarrange/act/assertで構造化test-arrange-act-assert- プロパティベーステストにtest-proptest-propertiesproptestを使用- トレイトのモックにはtest-mockall-mockingmockallを使用- モッキング可能にするために依存をトレイト化test-mock-traits- テストのクリーンアップにはRAIIパターン(Drop)を使用test-fixture-raii- 非同期テストにはtest-tokio-async#[tokio::test]を使用- パニックテストにtest-should-panic#[should_panic]を使用- ベンチマークにはtest-criterion-benchcriterionを使用- docの例を実行可能なテストとして保持test-doctest-examples
10. ドキュメント (MEDIUM)
- すべての公開項目をdoc-all-public///でドキュメント化- モジュールレベルのドキュメントにはdoc-module-inner//!を使用- 実行可能なコード付きdoc-examples-section# Examplesを含める- フォールイブルな関数にdoc-errors-section# Errorsを含める- パニックする関数にdoc-panics-section# Panicsを含める- unsafeな関数にdoc-safety-section# Safetyを含める- 例ではdoc-question-mark.unwrap()ではなく?を使用- 例のセットアップコードをdoc-hidden-setup#プレフィックスで隠す- イントラドックリンクを使用:doc-intra-links[Vec]- ドキュメント内で関連する型と関数をリンクdoc-link-types-doc-cargo-metadataCargo.tomlメタデータを記入
11. パフォーマンスパターン (MEDIUM)
- 手動インデックスよりイテレータを推奨perf-iter-over-index- イテレータを遅延のままに、perf-iter-lazycollect()は必要な時だけ- 中間イテレータでperf-collect-oncecollect()をしない- マップの挿入または更新にはperf-entry-apientry()APIを使用- 割り当て再利用にはperf-drain-reusedrain()を使用- バッチ挿入にはperf-extend-batchextend()を使用- ホットループでのperf-chain-avoidchain()を避ける- コンテナを再利用するにはperf-collect-intocollect_into()を使用- ベンチマークでperf-black-box-benchblack_box()を使用- リリースプロファイル設定を最適化perf-release-profile- 最適化の前にプロファイリングを実施perf-profile-first
12. プロジェクト構造 (LOW)
-proj-lib-main-splitmain.rsは最小限にし、ロジックはlib.rsに- 型ではなく機能でモジュールを整理proj-mod-by-feature- 小さいプロジェクトはフラットに保つproj-flat-small- 複数ファイルモジュールにproj-mod-rs-dirmod.rsを使用- 内部APIにはproj-pub-crate-internalpub(crate)を使用- 親のみの可視性にはproj-pub-super-parentpub(super)を使用- クリーンな公開APIにはproj-pub-use-reexportpub useを使用- 一般的なインポート用にproj-prelude-modulepreludeモジュールを作成- 複数のバイナリをproj-bin-dirsrc/bin/に配置- 大規模プロジェクトにはワークスペースを使用proj-workspace-large- ワークスペース依存の継承を使用proj-workspace-deps
13. Clippy & リント (LOW)
-lint-deny-correctness#![deny(clippy::correctness)]-lint-warn-suspicious#![warn(clippy::suspicious)]-lint-warn-style#![warn(clippy::style)]-lint-warn-complexity#![warn(clippy::complexity)]-lint-warn-perf#![warn(clippy::perf)]-lint-pedantic-selectiveclippy::pedanticを選別的に有効化-lint-missing-docs#![warn(missing_docs)]-lint-unsafe-doc#![warn(clippy::undocumented_unsafe_blocks)]- 公開クレート用にlint-cargo-metadata#![warn(clippy::cargo)]- CIでlint-rustfmt-checkcargo fmt --checkを実行- ワークスペースレベルでリントを設定lint-workspace-lints
14. アンチパターン (REFERENCE)
- 本番コードでanti-unwrap-abuse.unwrap()を使用しない- 回復可能なエラーにanti-expect-lazy.expect()を使用しない-anti-clone-excessive
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- curtisault
- ライセンス
- MIT
- 最終更新
- 2026/2/16
Source: https://github.com/curtisault/rust-skills / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。