agent-eval
Freeコーディングエージェント(Claude Code、Aider、Codexなど)のカスタムタスクによる直接比較。合格率、コスト、時間、一貫性メトリクスを測定
The English summary is being prepared. Showing the original description.
ライブラリ非依存のFlutter/Dartコードレビューチェックリスト。ウィジェットのベストプラクティス、状態管理パターン(BLoC、Riverpod、Provider、GetX、MobX、Signals)、Dartイディオム、パフォーマンス、アクセシビリティ、セキュリティ、クリーンアーキテクチャをカバー。
The English summary is being prepared. Showing the original description.
Review the instructions the agent will receive before you install.
Flutter/Dartアプリケーションをレビューするための包括的でライブラリ非依存のチェックリストです。使用する状態管理ソリューション、ルーティングライブラリ、DIフレームワークに関わらず適用できます。
pubspec.yamlがクリーン — 未使用の依存関係がなく、バージョンが適切にピン留めanalysis_options.yamlに厳格なリントセットと厳格なアナライザー設定が含まれているprint()文がない — dart:developerのlog()またはロギングパッケージを使用.g.dart、.freezed.dart、.gr.dart)が最新、または.gitignoreに含まれているdynamic — strict-casts、strict-inference、strict-raw-typesを有効化if (value case var v?))ではなく過度な!(バングオペレーター)this.fieldを使用on句なしのcatch (e) — 常に例外型を指定Errorのキャッチ:Errorサブタイプはバグを示すものでありキャッチすべきでないasync:awaitしないのにasyncマークされた関数 — 不要なオーバーヘッドlateの過剰使用:nullableまたはコンストラクタ初期化の方が安全な箇所でlateを使用;エラーをランタイムに遅延+ではなくStringBufferを使用constコンテキストでのミュータブル状態:constコンストラクタクラスのフィールドはミュータブルであるべきでないFuture戻り値の無視:awaitを使用するか、意図を示すために明示的にunawaited()を呼び出すfinalが使える箇所でのvar:ローカルにはfinal、コンパイル時定数にはconstを優先package:インポートを使用List/Mapではなく変更不可ビューを返すべきisチェックと手動キャストよりswitch式とif-caseを優先(String, int)を使用print():dart:developerのlog()またはプロジェクトのロギングパッケージを使用;print()にはログレベルがなくフィルタリングできないbuild()メソッドが約80-100行を超える単一ウィジェットがない_build*()ヘルパーメソッドが別のウィジェットクラスに抽出されている(エレメント再利用、const伝播、フレームワーク最適化を有効化)constコンストラクタを使用 — 不要なリビルドを防止const []、const {})const宣言ValueKeyを使用GlobalKeyは控えめに使用 — ツリー間での状態アクセスが本当に必要な場合のみbuild()内でのUniqueKeyは避ける — 毎フレームリビルドを強制ObjectKeyを使用Theme.of(context).colorSchemeから — ハードコードのColors.redやhex値は不可Theme.of(context).textThemeから — 生のフォントサイズを持つインラインTextStyleは不可build()内にネットワーク呼び出し、ファイルI/O、重い計算がないbuild()内にFuture.then()やasync作業がないbuild()内にサブスクリプション作成(.listen())がないsetState()は可能な限り小さなサブツリーにローカライズこれらの原則はすべてのFlutter状態管理ソリューション(BLoC、Riverpod、Provider、GetX、MobX、Signals、ValueNotifierなど)に適用されます。
ref.watchを介したプロバイダー間依存は想定通り — 循環や過度に絡み合ったチェーンのみをフラグcopyWith()またはコンストラクタで新しいインスタンスを作成、インプレース変更しない==とhashCodeを適切に実装(すべてのフィールドが比較に含まれる)Equatable、freezed、Dartレコード、その他List/Mapとして公開されていない@action、Signalsの.value、GetXの.obs)を通じてのみ変更される — 直接フィールド変更は変更追跡をバイパスReactionDisposer、Signalsのエフェクトクリーンアップ)AsyncValue)を使用 — ブーリアンフラグ(isLoading、isError、hasData)ではない// BAD — boolean flag soup allows impossible states
class UserState {
bool isLoading = false;
bool hasError = false; // isLoading && hasError is representable!
User? user;
}
// GOOD (immutable approach) — sealed types make impossible states unrepresentable
sealed class UserState {}
class UserInitial extends UserState {}
class UserLoading extends UserState {}
class UserLoaded extends UserState {
final User user;
const UserLoaded(this.user);
}
class UserError extends UserState {
final String message;
const UserError(this.message);
}
// GOOD (reactive approach) — observable enum + data, mutations via reactivity API
// enum UserStatus { initial, loading, loaded, error }
// Use your solution's observable/signal to wrap status and data separately
constウィジェットでツリーを通じたリビルド伝播を停止.listen())がdispose() / close()でキャンセル.listen()より宣言的ビルダー)setState前にmountedチェックawait後にcontext.mounted(Flutter 3.7+)を確認せずにBuildContextを使用しない — 古いコンテキストはクラッシュの原因BuildContextをシングルトン、状態マネージャー、静的フィールドに保存しないsetState、ValueNotifier)setState()を呼び出さない — 状態変更をローカライズconstウィジェットでリビルド伝播を停止RepaintBoundaryを使用AnimatedBuilderのchildパラメータを使用build()内で大きなコレクションのソート、フィルタリング、マッピングをしない — 状態管理レイヤーで計算build()内で正規表現コンパイルをしないMediaQuery.of(context)の使用を具体的に(例:MediaQuery.sizeOf(context))Image.assetとcacheWidth/cacheHeightListView(children: [...])ではなくListView.builder / GridView.builderを使用(小さな静的リストにはconcreteコンストラクタで可)deferred as)を使用Opacityウィジェットを避ける — AnimatedOpacityまたはFadeTransitionを使用operator ==をオーバーライドしない — 代わりにconstコンストラクタを使用IntrinsicHeight、IntrinsicWidth)は控えめに使用(追加レイアウトパス)pumpWidgetとpumpが正しく使用されているfind.byType、find.text、find.byKeyが適切に使用されているpumpAndSettleまたは明示的なpump(Duration)を使用Semanticsウィジェットの使用ExcludeSemanticsを使用MergeSemanticsを使用semanticLabelプロパティを設定onPressedコールバックがない — すべてのボタンが何かを行うか無効化SafeAreaウィジェットで処理AndroidManifest.xmlとInfo.plistで宣言LayoutBuilderまたはMediaQueryを使用Flexible、Expanded、FittedBoxを使用--dart-define、VCSから除外された.envファイル、またはコンパイル時設定を使用.gitignoreを確認^1.2.3)を使用 — 互換性のあるアップデートを許可flutter pub outdatedを定期的に実行して古い依存関係を追跡pubspec.yamlにdependency overridesがない — 一時的な修正のみコメント/イシューリンク付きでpackage:other/src/internal.dartはなし(Dartパッケージのカプセル化を破壊)path: ../../相対文字列ではなくワークスペース解決を使用analysis_options.yamlを共有または継承Navigator.pushと宣言的ルーターを混在させないMap<String, dynamic>やObject?キャストはなしFlutterError.onErrorがオーバーライドPlatformDispatcher.instance.onErrorを設定ErrorWidget.builderがカスタマイズ(赤い画面ではなくユーザーフレンドリー)runApp周りのグローバルエラーキャプチャラッパー(例:runZonedGuarded、Sentry/Crashlyticsラッパー)ifチェックではなく設定を使用analysis_options.yamlが存在し厳格な設定が有効strict-casts: true、strict-inference: true、strict-raw-types: true// ignore:)が理由を説明するコメント付きで正当化flutter analyzeがCIで実行され、失敗がマージをブロックprefer_const_constructors — ウィジェットツリーでのパフォーマンスavoid_print — 適切なロギングを使用unawaited_futures — fire-and-forgetの非同期バグを防止prefer_final_locals — 変数レベルのイミュータビリティalways_declare_return_types — 明示的なコントラクトavoid_catches_without_on_clauses — 具体的なエラーハンドリングalways_use_package_imports — 一貫したインポートスタイル以下の表は、普遍的な原則を一般的なソリューションでの実装にマッピングしています。プロジェクトが使用するソリューションに合わせてレビュールールを適応させてください。
| 原則 | BLoC/Cubit | Riverpod | Provider | GetX | MobX | Signals | 組み込み |
|---|---|---|---|---|---|---|---|
| 状態コンテナ | Bloc/Cubit | Notifier/AsyncNotifier | ChangeNotifier | GetxController | Store | signal() | StatefulWidget |
| UIコンシューマー | BlocBuilder | ConsumerWidget | Consumer | Obx/GetBuilder | Observer | Watch | setState |
| セレクター | BlocSelector/buildWhen | ref.watch(p.select(...)) | Selector | N/A | computed | computed() | N/A |
| サイドエフェクト | BlocListener | ref.listen | Consumer callback | ever()/once() | reaction | effect() | callbacks |
| 破棄 | BlocProvider経由で自動 | .autoDispose | Provider経由で自動 | onClose() | ReactionDisposer | 手動 | dispose() |
| テスト | blocTest() | ProviderContainer | ChangeNotifier直接 | テストでGet.put | store直接 | signal直接 | widget test |
No reviews yet. Tell others what you thought.
No login needed. Share how it worked for you, ask a question, or note where it did not run.
No comments yet. Be the first to write one.
コーディングエージェント(Claude Code、Aider、Codexなど)のカスタムタスクによる直接比較。合格率、コスト、時間、一貫性メトリクスを測定
The English summary is being prepared. Showing the original description.
AIエージェントのアクションスペース、ツール定義、オブザベーションフォーマットを設計・最適化し、タスク完了率を向上させる
The English summary is being prepared. Showing the original description.
評価ファーストの実行、分解、コスト考慮型モデルルーティングによるエージェンティックエンジニアとしての運用
The English summary is being prepared. Showing the original description.
AIエージェントが実装出力の大部分を生成するチームのためのエンジニアリング運用モデル
The English summary is being prepared. Showing the original description.
AI支援開発のためのリグレッションテスト戦略。データベース依存なしのサンドボックスモードAPIテスト、自動バグチェックワークフロー、同一モデルがコードの作成とレビューを行う際のAIの盲点を検出するパターン。
The English summary is being prepared. Showing the original description.
AndroidおよびKotlin Multiplatformプロジェクトのためのクリーンアーキテクチャパターン — モジュール構成、依存関係ルール、UseCase、Repository、データレイヤーパターン
The English summary is being prepared. Showing the original description.