Flutter/Dartコードレビューベストプラクティス
Flutter/Dartアプリケーションをレビューするための包括的なライブラリに依存しないチェックリスト。これらの原則は、どの状態管理ソリューション、ルーティングライブラリ、またはDIフレームワークを使用していても適用されます。
1. 全般的なプロジェクトの健全性
- プロジェクトは一貫したフォルダー構造に従っている(フィーチャーファーストまたはレイヤーファースト)
- 適切な関心の分離: UI、ビジネスロジック、データレイヤー
- ウィジェットにビジネスロジックがない; ウィジェットは純粋にプレゼンテーション
-
pubspec.yamlが整理されている — 未使用の依存関係がなく、バージョンが適切に固定されている -
analysis_options.yamlに厳格なリントセットと厳格なアナライザー設定が含まれている - 本番コードに
print()文がない —dart:developerのlog()またはロギングパッケージを使用 - 生成されたファイル(
.g.dart、.freezed.dart、.gr.dart)が最新か.gitignoreに含まれている - プラットフォーム固有のコードが抽象化の背後に分離されている
2. Dart言語の落とし穴
- 暗黙的なdynamic: 型アノテーションの欠如が
dynamicにつながる —strict-casts、strict-inference、strict-raw-typesを有効にする - Null安全の誤用: 適切なnullチェックやDart 3のパターンマッチング(
if (value case var v?))の代わりに過度な!(bang演算子) - 型プロモーションの失敗: ローカル変数プロモーションが機能する場所で
this.fieldを使用 - 過度に広い例外のキャッチ:
on句なしのcatch (e); 常に例外型を指定する -
Errorのキャッチ:Errorのサブタイプはバグを示し、キャッチすべきでない - 未使用の
async:awaitしないasyncマークされた関数 — 不要なオーバーヘッド -
lateの過剰使用: nullable型やコンストラクターの初期化がより安全な場所でのlateの使用; エラーをランタイムに先送りにする - ループでの文字列連結: 繰り返しの文字列構築には
+の代…