d48cda4081
CI / Test (ubuntu-latest, Node 18.x, bun) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 18.x, npm) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 18.x, pnpm) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 18.x, yarn) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 20.x, bun) (push) Failing after 17m13s
CI / Test (ubuntu-latest, Node 20.x, npm) (push) Failing after 18m42s
CI / Test (ubuntu-latest, Node 20.x, pnpm) (push) Failing after 15m0s
CI / Test (ubuntu-latest, Node 20.x, yarn) (push) Failing after 49m44s
CI / Test (ubuntu-latest, Node 22.x, bun) (push) Failing after 51m55s
CI / Test (ubuntu-latest, Node 22.x, pnpm) (push) Failing after 21m57s
CI / Test (ubuntu-latest, Node 22.x, npm) (push) Failing after 37m39s
CI / Test (ubuntu-latest, Node 22.x, yarn) (push) Failing after 34m7s
CI / Validate Components (push) Failing after 37m15s
CI / Python Tests (push) Failing after 10m1s
CI / Security Scan (push) Failing after 10m1s
CI / Lint (push) Failing after 17m12s
CI / Coverage (push) Failing after 20m19s
CI / Test (macos-latest, Node 18.x, bun) (push) Has been cancelled
CI / Test (macos-latest, Node 18.x, npm) (push) Has been cancelled
CI / Test (macos-latest, Node 18.x, pnpm) (push) Has been cancelled
CI / Test (macos-latest, Node 18.x, yarn) (push) Has been cancelled
CI / Test (windows-latest, Node 18.x, npm) (push) Has been cancelled
CI / Test (windows-latest, Node 18.x, pnpm) (push) Has been cancelled
CI / Test (windows-latest, Node 18.x, yarn) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, bun) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, npm) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, pnpm) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, yarn) (push) Has been cancelled
CI / Test (windows-latest, Node 20.x, npm) (push) Has been cancelled
CI / Test (windows-latest, Node 20.x, pnpm) (push) Has been cancelled
CI / Test (windows-latest, Node 20.x, yarn) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, bun) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, npm) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, pnpm) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, yarn) (push) Has been cancelled
CI / Test (windows-latest, Node 22.x, npm) (push) Has been cancelled
CI / Test (windows-latest, Node 22.x, pnpm) (push) Has been cancelled
CI / Test (windows-latest, Node 22.x, yarn) (push) Has been cancelled
4.9 KiB
4.9 KiB
description
| description |
|---|
| Rustコードの所有権、ライフタイム、エラーハンドリング、unsafeの使用、イディオマティックパターンに関する包括的なコードレビュー。rust-reviewerエージェントを呼び出します。 |
Rustコードレビュー
このコマンドはrust-reviewerエージェントを呼び出し、Rust固有の包括的なコードレビューを行います。
このコマンドの動作
- 自動チェックを検証:
cargo check、cargo clippy -- -D warnings、cargo fmt --check、cargo testを実行 — いずれか失敗したら停止 - Rustの変更を特定:
git diff HEAD~1(PRの場合はgit diff main...HEAD)で変更された.rsファイルを検出 - セキュリティ監査を実行: 利用可能な場合
cargo auditを実行 - セキュリティスキャン: unsafe使用、コマンドインジェクション、ハードコードされたシークレットを確認
- 所有権レビュー: 不要なclone、ライフタイムの問題、ボローイングパターンを分析
- レポートを生成: 重大度別に問題を分類
使用するタイミング
/rust-reviewを使用するのは:
- Rustコードを書いたり変更した後
- Rustの変更をコミットする前
- Rustコードを含むプルリクエストをレビューする時
- 新しいRustコードベースにオンボーディングする時
- イディオマティックなRustパターンを学ぶ時
レビューカテゴリ
CRITICAL(修正必須)
- プロダクションコードパスでの未チェック
unwrap()/expect() - 不変条件を文書化する
// SAFETY:コメントなしのunsafe - クエリでの文字列補間によるSQLインジェクション
std::process::Commandでの未検証入力によるコマンドインジェクション- ハードコードされた認証情報
- rawポインタ経由のuse-after-free
HIGH(修正すべき)
- ボローチェッカーを満たすための不要な
.clone() &strやimpl AsRef<str>で十分な場合のStringパラメータ- asyncコンテキストでのブロッキング(
std::thread::sleep、std::fs) - 共有型での
Send/Syncバウンドの欠落 - ビジネスクリティカルなenumでのワイルドカード
_ =>マッチ - 大きな関数(50行超)
MEDIUM(検討すべき)
- ホットパスでの不要なアロケーション
- サイズが既知の場合の
with_capacityの欠落 - 正当化なしの抑制されたclippy警告
///ドキュメントなしのパブリックAPI- 値を無視することがバグになりやすい非
must_use戻り値型での#[must_use]の検討
実行される自動チェック
# ビルドゲート(レビュー前に通る必要あり)
cargo check
# リントと提案
cargo clippy -- -D warnings
# フォーマット
cargo fmt --check
# テスト
cargo test
# セキュリティ監査(利用可能な場合)
if command -v cargo-audit >/dev/null; then cargo audit; else echo "cargo-audit not installed"; fi
使用例
User: /rust-review
Agent:
# Rustコードレビューレポート
## レビュー対象ファイル
- src/service/user.rs(変更)
- src/handler/api.rs(変更)
## 静的解析結果
- ビルド: 成功
- Clippy: 警告なし
- フォーマット: 通過
- テスト: 全通過
## 検出された問題
[CRITICAL] プロダクションパスでの未チェックunwrap
File: src/service/user.rs:28
Issue: データベースクエリ結果に`.unwrap()`を使用
```rust
let user = db.find_by_id(id).unwrap(); // ユーザーが見つからない場合にパニック
```
Fix: コンテキスト付きでエラーを伝搬
```rust
let user = db.find_by_id(id)
.context("failed to fetch user")?;
```
[HIGH] 不要なClone
File: src/handler/api.rs:45
Issue: ボローチェッカーを満たすためにStringをクローン
```rust
let name = user.name.clone();
process(&user, &name);
```
Fix: cloneを回避するよう再構築
```rust
let result = process_name(&user.name);
use_user(&user, result);
```
## サマリー
- CRITICAL: 1
- HIGH: 1
- MEDIUM: 0
推奨: CRITICALの問題が修正されるまでマージをブロック
承認基準
| ステータス | 条件 |
|---|---|
| 承認 | CRITICALまたはHIGHの問題がない |
| 警告 | MEDIUMの問題のみ(注意してマージ) |
| ブロック | CRITICALまたはHIGHの問題が検出 |
他のコマンドとの統合
- まず
/rust-testを使用してテストが通ることを確認 - ビルドエラーが発生した場合は
/rust-buildを使用 - コミット前に
/rust-reviewを使用 - Rust固有でない懸念には
/code-reviewを使用
関連
- エージェント:
agents/rust-reviewer.md - スキル:
skills/rust-patterns/、skills/rust-testing/