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
5.1 KiB
5.1 KiB
description
| description |
|---|
| Flutter/Dartコードのイディオムパターン、ウィジェットのベストプラクティス、状態管理、パフォーマンス、アクセシビリティ、セキュリティをレビューします。flutter-reviewerエージェントを呼び出します。 |
Flutterコードレビュー
このコマンドはflutter-reviewerエージェントを呼び出し、Flutter/Dartコードの変更をレビューします。
このコマンドの動作
- コンテキストを収集:
git diff --stagedとgit diffをレビュー - プロジェクトを調査:
pubspec.yaml、analysis_options.yaml、状態管理ソリューションを確認 - セキュリティ事前スキャン: ハードコードされたシークレットと重大なセキュリティ問題を確認
- フルレビュー: 完全なレビューチェックリストを適用
- 所見を報告: 重大度別にグループ化された問題を修正ガイダンス付きで出力
前提条件
/flutter-reviewを実行する前に、以下を確認してください:
- ビルドが通る — まず
/flutter-buildを実行。壊れたコードのレビューは不完全です - テストが通る —
/flutter-testを実行してリグレッションがないことを確認 - マージコンフリクトがない — すべてのコンフリクトを解決し、diffが意図的な変更のみを反映するようにする
flutter analyzeがクリーン — レビュー前にアナライザーの警告を修正
使用するタイミング
/flutter-reviewを使用するのは:
- Flutter/Dartの変更を含むPRを提出する前(ビルドとテストが通った後)
- 新機能を実装した後に問題を早期に発見するため
- 他の人のFlutterコードをレビューする時
- ウィジェット、状態管理コンポーネント、またはサービスクラスを監査する時
- プロダクションリリースの前
レビュー領域
| 領域 | 重大度 |
|---|---|
| ハードコードされたシークレット、平文HTTP | CRITICAL |
| アーキテクチャ違反、状態管理アンチパターン | CRITICAL |
| ウィジェットの再ビルド問題、リソースリーク | HIGH |
dispose()の欠落、await後のBuildContext |
HIGH |
| Dartのnullセーフティ、エラー/ローディング状態の欠落 | HIGH |
| Const伝搬、ウィジェットのコンポジション | HIGH |
パフォーマンス: build()内の高コストな処理 |
HIGH |
| アクセシビリティ、セマンティックラベル | MEDIUM |
| 状態遷移のテスト欠落 | HIGH |
| ハードコードされた文字列(l10n) | MEDIUM |
| Pub依存関係の衛生管理 | LOW |
セッション例
User: /flutter-review
Agent:
# Flutterコードレビュー
## コンテキスト
変更されたファイル:
- lib/features/auth/presentation/login_page.dart
- lib/features/auth/data/auth_repository_impl.dart
状態管理: Riverpod(pubspec.yamlから検出)
アーキテクチャ: feature-first
## セキュリティ事前スキャン
✓ ハードコードされたシークレットは検出されませんでした
✓ 平文HTTPコールはありません
## レビュー所見
[HIGH] 非同期ギャップ後にmountedチェックなしでBuildContextを使用
File: lib/features/auth/presentation/login_page.dart:67
Issue: `context.go('/home')`が`await auth.login(...)`の後に`mounted`チェックなしで呼び出されている。
Fix: await後のナビゲーション前に`if (!context.mounted) return;`を追加(Flutter 3.7+)。
[HIGH] AsyncValueのエラー状態が未処理
File: lib/features/auth/presentation/login_page.dart:42
Issue: `ref.watch(authProvider)`がloading/dataでswitchしているが、`error`ブランチがない。
Fix: switch式または`when()`コールにerrorケースを追加してユーザー向けエラーメッセージを表示。
[MEDIUM] ハードコードされた文字列がローカライズされていない
File: lib/features/auth/presentation/login_page.dart:89
Issue: `Text('Login')` — ユーザーに表示される文字列がローカライゼーションシステムを使用していない。
Fix: プロジェクトのl10nアクセサを使用: `Text(context.l10n.loginButton)`。
## レビューサマリー
| 重大度 | 件数 | ステータス |
|--------|------|-----------|
| CRITICAL | 0 | pass |
| HIGH | 2 | block |
| MEDIUM | 1 | info |
| LOW | 0 | note |
判定: BLOCK — HIGH問題はマージ前に修正が必要です。
承認基準
- 承認: CRITICALまたはHIGHの問題がない
- ブロック: CRITICALまたはHIGHの問題はマージ前に修正が必要
関連コマンド
/flutter-build— まずビルドエラーを修正/flutter-test— レビュー前にテストを実行/code-review— 一般的なコードレビュー(言語非依存)
関連
- エージェント:
agents/flutter-reviewer.md - スキル:
skills/flutter-dart-code-review/ - ルール:
rules/dart/