💬
Flutterアプリ開発のための最新モダンスタックとベストプラクティス
Flutterアプリ開発のための最新モダンスタックとベストプラクティス
1. アーキテクチャ
推奨: Clean Architecture + MVVM
-
理由:
- 分離された構造: プレゼンテーション層、ドメイン層、データ層を明確に分離し、変更の影響範囲を最小化。
- 再利用性の向上: ドメインロジックをユースケースとして独立させることで、他プロジェクトにも再利用可能。
- 長期的な保守性: スケーラブルで複雑な要件でも対応可能。
-
構成例:
-
プレゼンテーション層:
LoginViewModel
が状態とUIロジックを管理。 -
ドメイン層:
AuthenticateUserUseCase
でビジネスロジックを分離。 -
データ層:
UserRepository
がAPIとデータベースを統合。
-
プレゼンテーション層:
-
コード例:
class AuthenticateUserUseCase { final UserRepository repository; AuthenticateUserUseCase(this.repository); Future<bool> call(String username, String password) async { return await repository.authenticate(username, password); } }
2. 状態管理と依存性注入
推奨: Riverpod + hooks_riverpod
-
理由:
- 型安全性: 状態の型を厳密に管理。
- スコープ分離: 状態をコンポーネント単位で分け、グローバルプロバイダの乱用を防ぐ。
- 再利用性: 状態管理のロジックを簡単に再利用可能。
-
具体例:
- 状態管理: カウンターアプリを
StateNotifier
で管理。 -
コード例:
final counterProvider = StateNotifierProvider<CounterNotifier, int>((ref) => CounterNotifier()); class CounterNotifier extends StateNotifier<int> { CounterNotifier() : super(0); void increment() => state++; }
- 状態管理: カウンターアプリを
3. API通信
推奨: Dio + Retrofit (REST API)
-
理由:
- 高いカスタマイズ性: リクエストヘッダやエラーハンドリングを柔軟に設定可能。
- 型安全性: RetrofitでAPI呼び出し時に型を保証。
- 効率的な開発: RetrofitのアノテーションでシンプルにAPIエンドポイントを記述。
-
具体例:
- REST APIクライアントとしてDioとRetrofitを組み合わせ。
-
コード例:
(baseUrl: "https://api.example.com") abstract class ApiService { factory ApiService(Dio dio, {String baseUrl}) = _ApiService; ("/users") Future<List<User>> getUsers(); }
4. ルーティング
推奨: Beamer
-
理由:
- カスタマイズ性: ディープリンクや動的ルートに対応。
- 宣言型のルート定義: 明確で保守性の高い構造。
- Nested Navigation: 複雑なナビゲーション構造を簡単に管理可能。
-
具体例:
-
HomePage
とDetailsPage
間の遷移を簡潔に定義。 -
コード例:
final routerDelegate = BeamerDelegate( locationBuilder: SimpleLocationBuilder( routes: { '/': (context) => HomePage(), '/details': (context) => DetailsPage(), }, ), ); class MyApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp.router( routerDelegate: routerDelegate, routeInformationParser: BeamerParser(), ); } }
-
5. モデルユーティリティ
推奨: freezed + json_serializable
-
理由:
-
データクラス生成の簡素化:
freezed
でモデルクラスを自動生成。 -
型安全なJSON操作:
json_serializable
で安全にデータをシリアライズ/デシリアライズ。
-
データクラス生成の簡素化:
-
具体例:
- モデル定義を簡略化し、JSONデータを簡単にパース可能。
-
コード例:
class User with _$User { const factory User({ required int id, required String name, }) = _User; factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json); }
6. テスト
推奨: Mocktail + Integration Testing + Golden Tests
-
理由:
-
モックの簡易化:
Mocktail
で依存関係をモック。 -
ビジュアルテスト:
Golden Toolkit
でUIの一致を確認。 - 品質保証: E2Eテストでユーザーの操作を再現。
-
モックの簡易化:
-
具体例:
-
ゴールデンテスト例:
testWidgets('Golden Test Example', (tester) async { await tester.pumpWidget( GoldenToolkit.runWithConfiguration( MyApp(), configuration: GoldenToolkitConfiguration(), ), ); await expectLater( find.byType(MyWidget), matchesGoldenFile('golden/my_widget.png'), ); });
-
ゴールデンテスト例:
7. ロギング & デバッグ
推奨: Logger + Firebase Crashlytics
-
理由:
-
シンプルなログ:
Logger
で構造化されたログ出力。 -
クラッシュ情報の収集:
Firebase Crashlytics
でリアルタイムのエラーレポート。
-
シンプルなログ:
-
具体例:
-
Loggerを使った例:
final logger = Logger(); void logExample() { logger.i('This is an info log'); logger.e('This is an error log'); }
-
Loggerを使った例:
8. デザインシステム
推奨: Flutter Gen + Material 3
-
理由:
-
アセット管理の効率化:
Flutter Gen
でコードを自動生成。 - 最新のデザインガイドライン: Material 3に対応。
-
アセット管理の効率化:
-
具体例:
-
Flutter Genを利用した例:
import 'package:flutter_gen/gen/assets.gen.dart'; Widget build(BuildContext context) { return Image.asset(Assets.images.logo.path); }
-
Material 3テーマ構成例:
ThemeData theme = ThemeData( useMaterial3: true, colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue), );
-
Flutter Genを利用した例:
9. 開発効率向上
推奨: VSCode + Flutter DevTools
-
理由:
- 開発ツールの充実: DevToolsでパフォーマンスとメモリ管理を可視化。
- 補完機能の強化: GitHub Copilotでコーディング効率を大幅に向上。
- コード品質の向上: Dart Code Metricsでコード分析。
-
具体例:
- Dart Code Metrics設定例:
dart_code_metrics: metrics: - cyclomatic-complexity - number-of-parameters rules: - prefer-trailing-comma - avoid-returning-widgets
- Dart Code Metrics設定例:
推奨スタック一覧
カテゴリ | 推奨ツール | 推奨理由 |
---|---|---|
アーキテクチャ | Clean Architecture + MVVM | 層ごとに分離し、保守性とスケーラビリティを向上 |
状態管理とDI | Riverpod + hooks_riverpod | 型安全、スコープ分離、コード再利用性を強化 |
API通信 | Dio + Retrofit | 高カスタマイズ性と型安全性 |
ルーティング | Beamer | 柔軟なルーティングと宣言型設計 |
モデルユーティリティ | freezed + json_serializable | データモデルとJSON操作を効率化 |
テスト | Mocktail + Golden Tests + Patrol | モック、UIテスト、自動化に対応 |
ロギング & デバッグ | Logger + Firebase Crashlytics | ログ出力とクラッシュレポート |
デザインシステム | Flutter Gen + Material 3 | アセット管理の効率化と最新デザイン対応 |
開発効率向上 | VSCode + Flutter DevTools | 開発ツールとコード品質の向上 |
Discussion