汎用ソフトウェア開発⭐ リポ 0品質スコア 65/100
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-conditional- 条件付きオーナーシップにはCow<'a, T>を使用own-arc-shared- スレッドセーフな共有オーナーシップにはArc<T>を使用own-rc-single-thread- シングルスレッド共有にはRc<T>を使用own-refcell-interior- シングルスレッド内部可変性にはRefCell<T>を使用own-mutex-interior- マルチスレッド内部可変性にはMutex<T>を使用own-rwlock-readers- 読み取りが書き込みを上回る場合はRwLock<T>を使用own-copy-small- 小さな自明な型にはCopyを導出own-clone-explicit-Cloneを明示的にし、暗黙的なコピーを避けるown-move-large- 大きなデータはクローンではなく移動own-lifetime-elision- 可能な限りライフタイム省略に頼る
2. エラーハンドリング (CRITICAL)
err-thiserror-lib- ライブラリのエラー型にはthiserrorを使用err-anyhow-app- アプリケーションのエラーハンドリングにはanyhowを使用err-result-over-panic- 予想されるエラーではパニックせずResultを返す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-type-Box<dyn Error>ではなくカスタムエラー型を作成
3. メモリ最適化 (CRITICAL)
mem-with-capacity- サイズが既知の場合はwith_capacity()を使用mem-smallvec- 通常は小さいコレクションにはSmallVecを使用mem-arrayvec- 境界のあるサイズのコレクションにはArrayVecを使用mem-box-large-variant- 大きなenumバリアントをボックス化して型サイズを削減mem-boxed-slice- 固定の場合はVec<T>ではなくBox<[T]>を使用mem-thinvec- 空であることが多いベクトルにはThinVecを使用mem-clone-from- 割り当てを再利用するにはclone_from()を使用mem-reuse-collections- ループ内でclear()を使用してコレクションを再利用mem-avoid-format- 文字列リテラルで十分な場合はformat!()を避けるmem-write-over-format-format!()の代わりにwrite!()を使用mem-arena-allocator- バッチ割り当てにはアリーナアロケータを使用mem-zero-copy- スライスとBytesでゼロコピーパターンを使用mem-compact-string- 小文字列最適化にはCompactStringを使用mem-smaller-integers- 適合する最小の整数型を使用mem-assert-type-size- ホット型のサイズをアサートして回帰を防止
4. API設計 (HIGH)
api-builder-pattern- 複雑な構築にはビルダーパターンを使用api-builder-must-use- ビルダー型に#[must_use]を追加api-newtype-safety- 型安全な区別にはnewtypeを使用api-typestate- コンパイル時のステートマシンにはtypestateを使用api-sealed-trait- 外部の実装を防ぐためにトレイトをシールapi-extension-trait- 外部型にメソッドを追加するにはエクステンショントレイトを使用api-parse-dont-validate- 検証のために解析し、検証済み型に解析api-impl-into- 柔軟な文字列入力にはimpl Into<T>を受け付けるapi-impl-asref- 借用された入力にはimpl AsRef<T>を受け付けるapi-must-use-Resultを返す関数に#[must_use]を追加api-non-exhaustive- 将来証明なenumと構造体には#[non_exhaustive]を使用api-from-not-into-IntoではなくFromを実装(自動導出)api-default-impl- 適切なデフォルトにはDefaultを実装api-common-traits-Debug、Clone、PartialEqを早期に実装api-serde-optional-Serialize/Deserializeをフィーチャーフラグの背後に配置
5. 非同期/Await (HIGH)
async-tokio-runtime- 本番環境の非同期ランタイムにはTokioを使用async-no-lock-await-.awaitを跨いでMutex/RwLockを保持しないasync-spawn-blocking- CPU集約的な作業にはspawn_blockingを使用async-tokio-fs- 非同期コードではstd::fsではなくtokio::fsを使用async-cancellation-token- グレースフルシャットダウンにはCancellationTokenを使用async-join-parallel- 並列操作にはtokio::join!を使用async-try-join- フォールイブルな並列操作にはtokio::try_join!を使用async-select-racing- レーシング/タイムアウトにはtokio::select!を使用async-bounded-channel- バックプレッシャーには境界のあるチャネルを使用async-mpsc-queue- ワークキューにはmpscを使用async-broadcast-pubsub- パブ/サブパターンにはbroadcastを使用async-watch-latest- 最新値の共有にはwatchを使用async-oneshot-response- リクエスト/レスポンスにはoneshotを使用async-joinset-structured- 動的なタスクグループにはJoinSetを使用async-clone-before-await- 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-hint- ブランチヒントにはlikely()/unlikely()を使用opt-lto-release- リリースビルドでLTOを有効化opt-codegen-units- 最大最適化にはcodegen-units = 1を使用opt-pgo-profile- 本番ビルドにはPGOを使用opt-target-cpu- ローカルビルドにはtarget-cpu=nativeを設定opt-bounds-check- 境界チェックを避けるにはイテレータを使用opt-simd-portable- データ並列操作にはポータブルSIMDを使用opt-cache-friendly- キャッシュフレンドリーなデータレイアウト(SoA)を設計
7. 命名規則 (MEDIUM)
name-types-camel- 型、トレイト、enumにはUpperCamelCaseを使用name-variants-camel- enumバリアントにはUpperCamelCaseを使用name-funcs-snake- 関数、メソッド、モジュールにはsnake_caseを使用name-consts-screaming- 定数/staticにはSCREAMING_SNAKE_CASEを使用name-lifetime-short- 短い小文字のライフタイムを使用:'a、'de、'srcname-type-param-single- 型パラメータに単一大文字を使用:T、E、K、Vname-as-free-as_プレフィックス:フリー参照変換name-to-expensive-to_プレフィックス:高コストな変換name-into-ownership-into_プレフィックス:オーナーシップ譲渡name-no-get-prefix- シンプルなゲッターにget_プレフィックスなしname-is-has-bool- ブール型メソッドにはis_、has_、can_を使用name-iter-convention- イテレータにはiter/iter_mut/into_iterを使用name-iter-method- イテレータメソッドを一貫性を持って命名name-iter-type-match- イテレータ型名とメソッドを対応させるname-acronym-word- アクロニムを単語として扱う:UUIDではなくUuidname-crate-no-rs- クレート名:-rs接尾辞なし
8. 型安全性 (MEDIUM)
type-newtype-ids- IDをnewtypeでラップ:UserId(u64)type-newtype-validated- 検証済みデータ用newtype:Email、Urltype-enum-states- 相互に排他的な状態にはenumを使用type-option-nullable- nullable値にはOption<T>を使用type-result-fallible- フォールイブルな操作にはResult<T, E>を使用type-phantom-marker- 型レベルのマーカーにはPhantomData<T>を使用type-never-diverge- 戻らない関数には!型を使用type-generic-bounds- 必要な場所にのみトレイト境界を追加type-no-stringly- stringly型のAPIを避け、enumやnewtypeを使用type-repr-transparent- FFI newtypeには#[repr(transparent)]を使用
9. テスト (MEDIUM)
test-cfg-test-module-#[cfg(test)] mod tests { }を使用test-use-super- テストモジュールではuse super::*;を使用test-integration-dir- 統合テストをtests/ディレクトリに配置test-descriptive-names- わかりやすいテスト名を使用test-arrange-act-assert- テストをarrange/act/assertで構造化test-proptest-properties- プロパティベーステストにproptestを使用test-mockall-mocking- トレイトのモックにはmockallを使用test-mock-traits- モッキング可能にするために依存をトレイト化test-fixture-raii- テストのクリーンアップにはRAIIパターン(Drop)を使用test-tokio-async- 非同期テストには#[tokio::test]を使用test-should-panic- パニックテストに#[should_panic]を使用test-criterion-bench- ベンチマークにはcriterionを使用test-doctest-examples- docの例を実行可能なテストとして保持
10. ドキュメント (MEDIUM)
doc-all-public- すべての公開項目を///でドキュメント化doc-module-inner- モジュールレベルのドキュメントには//!を使用doc-examples-section- 実行可能なコード付き# Examplesを含めるdoc-errors-section- フォールイブルな関数に# Errorsを含めるdoc-panics-section- パニックする関数に# Panicsを含めるdoc-safety-section- unsafeな関数に# Safetyを含めるdoc-question-mark- 例では.unwrap()ではなく?を使用doc-hidden-setup- 例のセットアップコードを#プレフィックスで隠すdoc-intra-links- イントラドックリンクを使用:[Vec]doc-link-types- ドキュメント内で関連する型と関数をリンクdoc-cargo-metadata-Cargo.tomlメタデータを記入
11. パフォーマンスパターン (MEDIUM)
perf-iter-over-index- 手動インデックスよりイテレータを推奨perf-iter-lazy- イテレータを遅延のままに、collect()は必要な時だけperf-collect-once- 中間イテレータでcollect()をしないperf-entry-api- マップの挿入または更新にはentry()APIを使用perf-drain-reuse- 割り当て再利用にはdrain()を使用perf-extend-batch- バッチ挿入にはextend()を使用perf-chain-avoid- ホットループでのchain()を避けるperf-collect-into- コンテナを再利用するにはcollect_into()を使用perf-black-box-bench- ベンチマークでblack_box()を使用perf-release-profile- リリースプロファイル設定を最適化perf-profile-first- 最適化の前にプロファイリングを実施
12. プロジェクト構造 (LOW)
proj-lib-main-split-main.rsは最小限にし、ロジックはlib.rsにproj-mod-by-feature- 型ではなく機能でモジュールを整理proj-flat-small- 小さいプロジェクトはフラットに保つproj-mod-rs-dir- 複数ファイルモジュールにmod.rsを使用proj-pub-crate-internal- 内部APIにはpub(crate)を使用proj-pub-super-parent- 親のみの可視性にはpub(super)を使用proj-pub-use-reexport- クリーンな公開APIにはpub useを使用proj-prelude-module- 一般的なインポート用にpreludeモジュールを作成proj-bin-dir- 複数のバイナリをsrc/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-selective-clippy::pedanticを選別的に有効化lint-missing-docs-#![warn(missing_docs)]lint-unsafe-doc-#![warn(clippy::undocumented_unsafe_blocks)]lint-cargo-metadata- 公開クレート用に#![warn(clippy::cargo)]lint-rustfmt-check- CIでcargo 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