rust-review について
rust-reviewは、Rustプロジェクトの安全性、正確性、慣用的な書き方を調べるコード監査スキルです。レビュー範囲に応じてモジュールを読み込み、証拠の記録と指摘事項の検証を求めます。
主な機能
- 01所有権とエラー処理の確認
- 02並行処理パターンのレビュー
- 03unsafeとFFIの安全性監査
- 04依存関係の脆弱性チェック
- 05数値変換とメモリ安全性の確認
- 06証拠の記録と指摘事項の検証
活用シーン
- 01Rustコード変更のレビュー
- 02unsafeブロックとFFI境界の監査
- 03非同期・同期の並行処理の確認
- 04Cargo依存関係のセキュリティレビュー
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ athola/ claude-night-market --skill rust-reviewインストール後、Claude Code で/rust-reviewを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
modules/async-slop.mdbuiltin-preference.mdcargo-dependencies.mdcfg-test-misuse.mdcoercion-params.mdcollection-types.mdconcurrency-patterns.mdconversion-traits.mdduplicate-validators.mderror-handling.mderror-messages.mdfloat-equality.mdidiomatic-elision.mditerator-and-allocation-slop.mdmatch-wildcard.mdmem-forget-audit.mdmodel-specific-tells.mdmutable-static-audit.mdnative-type-modeling.mdnumeric-cast-safety.mdownership-analysis.mdrepr-packed-audit.mdsilent-returns.mdsql-injection.mdtest-slop.mdtransmute-audit.mdunsafe-audit.md詳細
Rust レビューワークフロー
安全性、正確性、慣用的なパターンに重点を置いた、エキスパートレベルの Rust コード監査です。
クイックスタート
/rust-review
確認: --help フラグを付けてコマンドを実行し、利用可能かどうかを確認してください。
使用する場面
- Rust のコード変更をレビューするとき
unsafeブロックを監査するとき- 並行処理のパターンを分析するとき
- 依存関係のセキュリティをレビューするとき
- パフォーマンス最適化をレビューするとき
使用しない場面
- Rust 以外の一般的なコードレビューには、unified-review を使用してください
- パフォーマンスのプロファイリングには、parseltongue:python-performance パターンを使用してください
必須の TodoWrite 項目
rust-review:ownership-analysisrust-review:error-handlingrust-review:concurrencyrust-review:unsafe-auditrust-review:cargo-depsrust-review:native-modelingrust-review:idiomatic-elisionrust-review:coercion-paramsrust-review:conversion-traitsrust-review:numeric-cast-safetyrust-review:mutable-static-auditrust-review:match-wildcardrust-review:transmute-auditrust-review:float-equalityrust-review:mem-forget-auditrust-review:repr-packed-auditrust-review:evidence-logrust-review:findings-verified
段階的な読み込み
レビューの範囲に応じて、必要なモジュールを読み込みます。
クイックレビュー(所有権とエラー):
- 借用とライフタイムの分析については、
modules/ownership-analysis.mdを参照してください - Result/Option のパターンについては、
modules/error-handling.mdを参照してください
並行処理に重点を置く場合:
- 非同期・同期プリミティブについては、
modules/concurrency-patterns.mdを参照してください
安全性監査:
unsafeブロックのドキュメント化については、modules/unsafe-audit.mdを参照してくださいstatic mutグローバル変数と、それに代わるスレッドセーフな方法については、modules/mutable-static-audit.mdを参照してください- 切り詰めや精度の損失を伴う
asキャストについては、modules/numeric-cast-safety.mdを参照してください - 列挙型の網羅性を損なうすべてに一致するアームについては、
modules/match-wildcard.mdを参照してください - レイアウトチェックなしでバイトを再解釈する
mem::transmute/transmute_copy呼び出しについては、modules/transmute-audit.mdを参照してください - フィールドの借用がアラインメントされていない参照になる
#[repr(packed)]レイアウトについては、modules/repr-packed-audit.mdを参照してください
正確性監査:
- 浮動小数点リテラルとの
==/!=については、modules/float-equality.mdを参照してください mem::forgetによるリークや、参照に対する何もしないdrop(&x)については、modules/mem-forget-audit.mdを参照してください
依存関係のレビュー:
- 脆弱性のスキャンについては、
modules/cargo-dependencies.mdを参照してください
慣用的なパターン:
- 変換トレイトと組み込み機能の優先については、
modules/builtin-preference.mdを参照してください - プリミティブより列挙型を優先する方法、newtype、型状態、派生順序付けについては、
modules/native-type-modeling.mdを参照してください - ライフタイムの省略、式指向の戻り値、明示的な
-> ()のユニット戻り値については、modules/idiomatic-elision.mdを参照してください - Deref 強制を妨げる
&String/&Vec<T>/&PathBufの引数(&str/&[T]/&Pathを推奨)については、modules/coercion-params.mdを参照してください impl Fromにすべきimpl Intoと、破棄されるtry_into().unwrap()の変換エラーについては、modules/conversion-traits.mdを参照してください
コアワークフロー
- 所有権の分析:借用、ライフタイム、クローンのパターンを確認します
- エラー処理:Result/Option の使用とエラー伝播を確認します
- 並行処理:非同期パターンと同期プリミティブをレビューします
- 安全性監査:不変条件と FFI コントラクトを記録します
- 依存関係:脆弱性と更新をスキャンします
- 証拠ログ:コマンドと調査結果を記録します
Rust 品質チェックリスト
安全性
- すべての安全でないブロックに SAFETY コメントが記載されている
- FFI 境界が適切にラップされている
- メモリー安全性の不変条件が維持されている
-
static mutグローバル変数を使用していない。共有状態にはOnceLock/LazyLock、アトミック、またはMutex/RwLockを使用している -
mem::transmute/transmute_copyを使用していない。バイト列の変換にはfrom_le_bytes/from_bits/bytemuck、ポインターの変換には.cast()を使用している -
#[repr(packed)]のフィールドは借用前にコピーしている(アラインメントされていない参照を作成していない) -
mem::forgetによるリークがなく(ManuallyDrop/スコープを使用)、何もしないdrop(&x)による参照の破棄もない -
mlock/munlockの呼び出しでは、RLIMIT を確認し、ページ境界にアラインメントし、ENOMEM を処理している
正確性
- エラー処理が網羅されている
- 並行処理のパターンが適切である
- 情報が失われる
asキャスト(長さの切り詰め、as u8/i8、as f32)をTryFrom/Fromに置き換えている - 列挙型のマッチが網羅的であり、
_ => unreachable!()/panic!/{}の包括的なフォールスルーがない - 浮動小数点数は、浮動小数点リテラルとの完全一致
==/!=ではなく、許容誤差を用いて比較している - 重要な処理経路をテストで網羅している
パフォーマンス
- 不要なメモリー割り当てがない
- クローンより借用を優先している
- 非同期処理が適切にノンブロッキングである
慣用的な書き方
- 標準トレイトを実装している
- ヘルパー関数より変換トレイトを優先している
- 文字列で型付けされた値やブール値のフラグを列挙型で表現している
- ドメインの不変条件を、newtype(非公開フィールド+検証付きコンストラクター)または必要に応じて typestate で表現している
- 比較/順序付けのトレイトは手書きせず、derive している
- 省略規則が適用される箇所ではライフタイムを省略し、パスでは
'_を使用している - 末尾の
returnを削除し、末尾の式を使用している - 明示的な
-> ()のユニット戻り値を省略している(デフォルトでは省略される) - パラメーターには
&String/&Vec<T>/&PathBufではなく、&str/&[T]/&Pathを取る(デリファレンス強制変換によりどちらも受け入れられるため、スライスのほうが汎用的) - 変換には
Into/TryIntoではなくFrom/TryFromを実装し、失敗する可能性のある変換のエラーはunwrap()せず伝播させている - エラー型が適切に設計されている
- ドキュメントが網羅されている
出力形式
## Summary
Rust audit findings
## Ownership Analysis
[borrowing and lifetime issues]
## Error Handling
[error patterns and issues]
## Concurrency
[async and sync patterns]
## Unsafe Audit
### [U1] file:line
- Invariants: [documented]
- Anchor: `verbatim source text at file:line`
- Risk: [assessment]
- Recommendation: [action]
## Native Type Modeling
[stringly-typed comparisons, boolean blindness, newtype/type-state notes]
## Idiomatic Elision
[needless lifetimes, trailing returns, explicit `-> ()` unit returns]
## Coercion Params
[`&String`/`&Vec<T>`/`&PathBuf` params that should be borrowed slices]
## Conversion Traits
[`impl Into` over `impl From`; discarded `try_into().unwrap()` errors]
## Numeric Cast Safety
[length-truncating, byte-narrowing, and f32 precision-losing `as` casts]
## Mutable Static Audit
[`static mut` globals and their thread-safe replacements]
## Match Wildcard
[catch-all `_ =>` arms that defeat enum exhaustiveness]
## Transmute Audit
[`mem::transmute`/`transmute_copy` calls and their typed replacements]
## Float Equality
[exact `==`/`!=` comparisons against float literals]
## Mem Forget Audit
[`mem::forget` leaks and no-op `drop(&x)` reference drops]
## Repr Packed Audit
[`#[repr(packed)]` layouts whose field borrows become unaligned]
## Dependencies
[cargo audit results]
## Recommendation
Approve / Approve with actions / Block
検証: --help フラグを付けてコマンドを実行し、利用可能であることを確認してください。
指摘事項が根拠に基づいていることを確認する(rust-review:findings-verified)
.review/findings.json に指摘事項を記録し、引用検証ツール(Skill(imbue:review-core) のステップ 5)を実行します。検証ツールに却下された項目は削除するか、UNVERIFIED のラベルを付けてください。
終了基準
- すべての安全でないブロックを監査済み
- 並行処理のパターンを検証済み
- 依存関係をスキャン済み
- 根拠を記録済み
- 対応項目を割り当て済み
- 報告するすべての指摘事項に
Locationと、citation_verifier.pyによって確認された逐語的なAnchorがある(終了コード0)。または、未検証の指摘事項が削除されているか、UNVERIFIEDのラベルが付いている
コメント
Markdown 対応