評価項目 | session | レビュータイプ | 補足 |
---|---|---|---|
AspectRatio を使用しているか | 1 | nits | より意図が分かりやすくなり可読性が向上する |
MediaQuery の代わりに FractionallySizedBox を使用しているか | 1 | nits |
|
Expanded と Flexible を使い分けているか | 1 | nits | より適切なものを使うことによって、可読性が向上する |
縦画面固定を適切に設定しているか | 1 | good | 縦画面固定は必須ではなく、対応していた場合のレビュー項目
|
Column を余分に利用していないか | 1 | nits | |
Theme を適宜利用しているか | 1 | imo | ページ内に補足あり📝 |
不必要に Container を利用していないか | 1 | nits | const で定義できる SizedBox や Padding で置き換えられないか確認する |
pubspec.yaml に画像を追加する際、ディレクトリで指定しているか | 2 | must | 後々、画像追加する際に都度修正する必要がなくなり、保守性が向上する |
YumemiWeather() を build 関数内でインスタンス化していないか | 2 | must | 不要なインスタンス生成を日頃から行っていると、ループ処理などの重たい処理を行う際にも記述してしまってパフォーマンスに影響を及ぼしてしてしまう恐れがあるため、日頃から無駄なことをしないように意識する |
API の使用箇所でエラーハンドリングしているか | 2 | nits | APIが修正されて不具合が入り込んだ時のことを想定しておくと、より安全性や保守性が向上する |
天気の種類をenumで扱っているか | 2 | nits | 分岐処理で |
Enum の .values.byName() を使用していないか | 2 | must | API が意図せずに変更されたり、不具合が入り込んだりした時のことを想定して、API の処理時に |
テストのことを考えて、YumemiWeather のインスタンスを DI しているか | 2 | next | |
アセットの指定間違い防止を考慮できているか | 2 | nits | flutter_gen または、独作 |
build メソッド直下で画面遷移処理を書いていないか | 3 | must | 予期せぬリビルドが生じる可能性があるため 代わりに、initStateに処理を書いているか |
sleep を使っていないか | 3 | must | スレッドをブロックしてしまうから |
mounted のチェックをしているか | 3 | must | 非同期処理で UI を操作しようとするときに mounted のチェックをしていないと、 Widget が Widget Tree に マウントされていない可能性があり、エラーが生じることがある |
初期画面と天気画面の Widget を分割しているか | 3 | good | |
iOS・Android のスワイプバックを考慮しているか | 3 | good |
|
mixin 内での「何かしらの処理」を abstract method にしているか | 4 | must | • |
エラーの内容によって、メッセージを分けているか | 5 | good | |
クリックイベントをメソッドとして切り出しているか | 5 | nits | ネストが深くなるのを防ぎ、可読性・保守性が高まる |
Dialog をコンポーネントとして抽出しているか | 5 | good | 可読性・再利用性を高める |
エラーハンドリングが公式ドキュメントに従っているか | 5 | good | https://dart.dev/effective-dart/usage#error-handling |
non-null 型への型昇格を適宜利用できているか | 6 | imo | ページ内に補足あり📝 |
全ての例外ケースを考慮して JSON 変換処理を書けているか | 6 | must |
|
コード生成 ファイルの lint 対応ができているか | 7 | must | ページ内に補足あり📝 |
build.yaml にデフォルト値のものを記載しないようにしているか | 7 | must | デフォルト値を記述すると、他のデフォルト値も全て記載しないといけなくなりそうで、メンバーに混乱が生じる |
build.yaml で field_rename: snake をつけているか | 7 | nits | ページ内に補足あり📝 |
build.yaml で checked: true にしているか | 7 | good | ページ内に補足あり📝 |
freezed_annotation, freezed のコミットを一緒にまとめているか | 7 | nits | 2つのパッケージは関連が強いので、コミットをまとめておいた方が良い |
適切に責務分割できているか | 8 | mustimo | ページ内に補足あり📝 |
テストがしやすい実装・構成になっているか | 8 | nitsmustimo | ページ内に補足あり📝 |
build 関数直下で ref.read していないか | 8 | must | ref: https://docs-v2.riverpod.dev/docs/concepts/reading#dont-use-refread-inside-the-build-method |
クリックイベントで ref.watch を使っていないか | 8 | must | ref: https://docs-v2.riverpod.dev/docs/concepts/reading#dont-use-refread-inside-the-build-method |
.autoDispose を適切に設定しているか | 8 | must | 特に意図がない限り基本的に状態は保持しつづけるべきではない |
ARCHITECTURE.md はほとんど変更が不要な記載方法になっているか | 8 | nits | • アーキテクチャの説明でなく、実装の説明になっていないか ◦ 具体的なクラス名やファイル名を記載すると、リネームのたびに修正が必要になる |
BuildContext などの UI に関連するものが Notifier で使われていないか | 8 | imo | ページ内に補足あり📝 |
アーキテクチャ要素やProviderが循環依存していないか | 8 | must | |
Provider の依存関係図を表示している場合、依存関係図を自動生成できるようにしているか | 8 | goodFYI | riverpod_graphを使うことでProviderの依存関係図を自動生成できる https://github.com/rrousselGit/riverpod/tree/master/packages/riverpod_graph |
テストしやすい構成にリファクタリングした際に必要に応じて ARCHITECTURE.md などを更新しているか | 9 | nits | |
@visibleForTesting を適宜利用できているか | 9 | must | • @visibleForTesting だけの場合、警告の表示で無視することもできてしまうため、analyzer の error に設定した方がより安全 • ref: https://kanta-mori.netlify.app/p/visiblefortestingとは/ |
不必要な group を作成していないか | 9 | nits | |
テスト実行後に ProviderContainer を dispose しているか | 9 | must | ref: https://docs-v2.riverpod.dev/docs/cookbooks/testing |
テストダブルを適切に使えているか | 9 | must | 依存先を明確にしてテストダブルを利用しているか |
テストダブルを利用した関数を呼び出す際に any を適宜利用しているか | 9 | nits | |
失敗ケースのテストも書いているか | 9 | nits | |
例外の場合 thenThrow を使用しているか | 9 | must | |
テストの description が適切な表現になっているか | 910 | nits | |
効果的なテストコードか | 910 | nitsmustimo | ページ内に補足あり📝 |
デバイスサイズ変更の意図をコメントしているか | 10 | good | |
デバイスサイズ変更の後処理(tearDown)をしているか | 10 | nits | |
コンポーネントで完結するテストに、画面遷移など他の要素を含めていないか | 10 | must | |
複数プラットフォームや複数スクリーンサイズをテストする時は TestVariant を活用しているか | 10 | good | |
isolateで扱うべき処理について | 11 | FYI | ページ内に補足あり📝 |
syncFetchWeather への変更に伴い、ARCHITECTURE.md, テストの修正を行っているか | 11 | must | |