Communitygithub.com

flutter/flutter-apply-architecture-best-practices

Flutterアプリケーションを推奨される階層化アプローチ(UI、ロジック、データ)で設計します。新規プロジェクトの構造化や、スケーラビリティのためのリファクタリング時に使用します。

flutter-apply-architecture-best-practices とは?

このスキルは、Flutterアプリケーションをクリーンで拡張性の高いアーキテクチャで設計・構築するためのベストプラクティスを提供します。推奨される階層化アプローチ(UI、ロジック、データ)に従い、ビジネスロジックとUIを分離することで、コードの再利用性、テスト容易性、そして長期メンテナンス性を大幅に向上させます。主にClaude CodeやCursorなどのAIエージェント開発環境で使用でき、新規プロジェクトの初期構造から既存プロジェクトのリファクタリングまで幅広く対応します。このスキルでは、具体的なディレクトリ構造、状態管理(Riverpod/Provider)、レポジトリパターン、依存性注入の実装方法などがドキュメント化されており、AIエージェントがFlutterプロジェクトを自動生成または修正する際の指針となります。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/flutter/skills/tree/main/skills/flutter-apply-architecture-best-practices

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

flutter-apply-architecture-best-practices は何をしますか?

Flutterアプリケーションを推奨される階層化アプローチ(UI、ロジック、データ)で設計します。新規プロジェクトの構造化や、スケーラビリティのためのリファクタリング時に使用します。

概要

このスキルは、Flutterアプリケーションにクリーンアーキテクチャの原則を適用するためのガイドラインを提供します。主な層は次の3つです:

  • UI層: ウィジェット、画面、ルーティングを担当
  • ロジック層: 状態管理、ビジネスロジック、ユースケース
  • データ層: リポジトリ、データソース(API、ローカルDB)

使用方法

新規プロジェクトの作成

flutter create --org com.example my_app

推奨ディレクトリ構造

lib/
├── app/          # アプリ設定、テーマ、ルーティング
├── ui/           # 画面、ウィジェット
│   ├── screens/
│   └── widgets/
├── logic/        # 状態管理、プロバイダー
│   └── providers/
└── data/         # モデル、リポジトリ、データソース
    ├── models/
    ├── repositories/
    └── datasources/

主要なベストプラクティス

  1. 依存性注入: RiverpodまたはProviderを使用して依存性を管理します。
  2. 状態管理: 複雑な状態にはRiverpod、単純な状態にはProviderを使用します。
  3. レポジトリパターン: データ取得ロジックをリポジトリにカプセル化します。
  4. テスト容易性: 各層を独立してテストできるように設計します。

実装例

リポジトリの定義

abstract class UserRepository {
  Future<User> getUser(String id);
}

class UserRepositoryImpl implements UserRepository {
  final UserRemoteDataSource remoteDataSource;
  final UserLocalDataSource localDataSource;

  UserRepositoryImpl(this.remoteDataSource, this.localDataSource);

  @override
  Future<User> getUser(String id) async {
    try {
      final user = await remoteDataSource.fetchUser(id);
      await localDataSource.cacheUser(user);
      return user;
    } catch (e) {
      return await localDataSource.getUser(id);
    }
  }
}

プロバイダーの使用例

final userRepositoryProvider = Provider<UserRepository>((ref) {
  return UserRepositoryImpl(
    UserRemoteDataSource(),
    UserLocalDataSource(),
  );
});

final userProvider = FutureProvider.family<User, String>((ref, id) {
  final repository = ref.watch(userRepositoryProvider);
  return repository.getUser(id);
});

注意事項

  • このスキルは既存のFlutterプロジェクトに対しても安全に適用できます。
  • コミット前には必ずflutter analyzeを実行し、コード品質を確認してください。
  • 大規模なリファクタリングは段階的に行うことを推奨します。

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

flutter/flutter-accessibility

Configure your Flutter app to support assistive technologies like Screen Readers

flutter/flutter-accessibility-audit

Triggers an accessibility scan through the widget_inspector and automatically adds Semantics widgets or missing labels to the source code.

flutter/flutter-adding-home-screen-widgets

Adds home screen widgets to a Flutter app for Android and iOS. Use when providing glanceable app information or quick actions on the device home screen.

flutter/flutter-add-integration-test

Configures Flutter Driver for app interaction and converts MCP actions into permanent integration tests. Use when adding integration testing to a project, exploring UI components via MCP, or automating user flows with the integration_test package.

flutter/flutter-add-widget-preview

Adds interactive widget previews to the project using the previews.dart system. Use when creating new UI components or updating existing screens to ensure consistent design and interactive testing.

flutter/flutter-add-widget-test

Implement a component-level test using `WidgetTester` to verify UI rendering and user interactions (tapping, scrolling, entering text). Use when validating that a specific widget displays correct data and responds to events as expected.

flutter/flutter-animating-apps

Implements animated effects, transitions, and motion in a Flutter app. Use when adding visual feedback, shared element transitions, or physics-based animations.

flutter/flutter-animation

Add animated effects to your Flutter app

flutter/flutter-app-size

Measure and reduce the size of the Flutter app bundle, APK, or IPA

flutter/flutter-architecting-apps

Architects a Flutter application using the recommended layered approach (UI, Logic, Data). Use when structuring a new project or refactoring for scalability.

flutter/flutter-architecture

Use the Flutter team's recommended app architecture

flutter/flutter-building-forms

Builds Flutter forms with validation and user input handling. Use when creating login screens, data entry forms, or any multi-field user input.

flutter/flutter-building-layouts

Builds Flutter layouts using the constraint system and layout widgets. Use when creating or refining the UI structure of a Flutter application.

flutter/flutter-building-plugins

Builds Flutter plugins that provide native interop for other apps to use. Use when creating reusable packages that bridge Flutter with platform-specific functionality.

flutter/flutter-build-responsive-layout

Use `LayoutBuilder`, `MediaQuery`, or `Expanded/Flexible` to create a layout that adapts to different screen sizes. Use when you need the UI to look good on both mobile and tablet/desktop form factors.

flutter/flutter-caching

Cache data in a Flutter app

flutter/flutter-caching-data

Implements caching strategies for Flutter apps to improve performance and offline support. Use when retaining app data locally to reduce network requests or speed up startup.

flutter/flutter-concurrency

Execute long-running tasks in a background thread in Flutter

flutter/flutter-databases

Work with databases in a Flutter app

flutter/flutter-embedding-native-views

Embeds native Android, iOS, or macOS views into a Flutter app. Use when integrating complex native components like maps or web views.

関連スキル