flutter-init について
flutter-initは、ドメインとスタックプリセットを選んでFlutterアプリを生成する対話型スキルです。Clean Architectureに基づくCRUD構成を作り、選択したパッケージを設定してflutter analyzeで検証します。
主な機能
- 01Todo・Habit・Note・Expense・独自アプリの生成
- 02プロジェクトとスタックプリセットの対話選択
- 03Clean ArchitectureのCRUDひな形作成
- 04パッケージとプロジェクト設定
- 05コード生成とflutter analyzeの実行
活用シーン
- 01FlutterでTodoやHabitのトラッカーを開始
- 02NoteやExpenseの管理アプリを作成
- 03独自エンティティのCRUDプロジェクトを構築
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bear2u/ my-skills --skill flutter-initインストール後、Claude Code で/flutter-initを入力して読み込まれたか確認します。
同梱ファイルREADME.mdreferences/setup-guide.md
詳細
Flutter Init スキル
ドメインベースの Flutter プロジェクトを生成し、最新のアーキテクチャで自動設定します。 Todo、Habit、Note、Expense、または Custom ドメインを選択すると、Clean Architecture に基づく完全な CRUD アプリをすぐに生成できます。
クイックスタート
スキルの実行時に、次の情報を入力します:
- フォルダー名(例:my_habit_app)
- プロジェクト名/パッケージ名(例:habit_app)
- ドメインの選択(Todo/Habit/Note/Expense/Custom)
- スタックプリセット(Minimal/Essential/Full Stack/Custom)
その後、次の手順が自動的に実行されます:
# 1. 프로젝트 생성 (Android/Kotlin, iOS/Swift)
flutter create --platforms android,ios --android-language kotlin --org com.example [폴더명]
# 2. 패키지 설치
flutter pub get
# 3. 도메인별 Clean Architecture 코드 자동 생성
# - domain/entities/[domain].dart (Freezed 엔티티)
# - data/datasources/local/app_database.dart (Drift 테이블)
# - data/repositories/[domain]_repository_impl.dart (Repository 구현)
# - presentation/providers/[domain]_providers.dart (Riverpod 3.0)
# - presentation/screens/* (List/Detail/Form 화면)
# 4. 코드 생성 (Freezed, Drift, JSON Serializable)
dart run build_runner build --delete-conflicting-outputs
# 5. 코드 검증 및 오류 자동 수정 (필수)
flutter analyze
# 6. 앱 실행
flutter run
タスクの手順
重要:このスキルは対話形式で進行します。
Step 1: ドメインとプロジェクトの設定に関する質問
まず、ユーザーに次のように尋ねてください:
「Flutter アプリを生成します。次の情報を教えてください:
1. ドメイン(エンティティ)の選択
どのドメインのアプリを作成しますか?
A) Todo(ToDo 管理)
- フィールド:title、description、isCompleted、createdAt、completedAt
- 機能:CRUD、フィルタリング(全件/進行中/完了)、チェックボックスの切り替え
B) Habit(習慣トラッカー)
- フィールド:name、description、frequency(daily/weekly/monthly)、streak、lastCompletedAt、goal、isActive
- 機能:CRUD、連続記録の追跡、目標達成率、完了チェック
C) Note(メモ)
- フィールド:title、content、tags、isPinned、createdAt、updatedAt
- 機能:CRUD、タグによるフィルタリング、メモの固定、検索
D) Expense(支出管理)
- フィールド:amount、category、description、date、paymentMethod
- 機能:CRUD、カテゴリ別の集計、月別統計、フィルタリング
E) Custom(独自に定義)
- エンティティ名とフィールドを直接入力
2. プロジェクト情報
- フォルダー名:プロジェクトを作成するフォルダー名(デフォルト:[ドメイン]_app、例:habit_app)
- このフォルダーに Flutter プロジェクトが作成されます
- プロジェクト名(パッケージ名):Flutter パッケージ名(デフォルト:フォルダー名と同じ)
- pubspec.yaml の name フィールドに使用されます
- import 文で使用されます(例:package:habit_app/...)
- 組織名:(デフォルト:com.example)
- Android/iOS のパッケージ識別子に使用されます(例:com.example.habit_app)
3. スタックプリセットの選択
次から1つ選択してください:
A) Essential(推奨)
- ✅ GoRouter(型安全なルーティング)
- ✅ SharedPreferences(ローカル設定の保存)
- ✅ FPDart(関数型エラーハンドリング)
- ✅ Google Fonts
- ✅ FluentUI Icons
- ❌ Auth システムは含まれません
- ❌ Responsive Utils は含まれません
B) Minimal(最もシンプル)
- ❌ GoRouter(標準の Navigator を使用)
- ✅ SharedPreferences
- ❌ FPDart は含まれません
- ❌ Google Fonts は含まれません
- ✅ 標準の FluentUI Icons
- ❌ Auth システムは含まれません
- ❌ Responsive Utils は含まれません
C) Full Stack(すべての機能)
- ✅ GoRouter
- ✅ SharedPreferences
- ✅ FPDart(関数型エラーハンドリング)
- ✅ Google Fonts
- ✅ Responsive Utils
- ✅ FluentUI Icons
- ✅ Auth システム(Login/Register)— 選択したドメインに応じて
D) Custom(独自に選択)
- 各機能を個別に選択
どのドメインとプリセットを選択しますか?(ドメイン:A/B/C/D/E、プリセット:A/B/C/D)」
Step 2: Custom を選択した場合の追加質問
2-1. Custom ドメイン(E)を選択した場合:
- エンティティ名:エンティティ名を入力してください(例:Task、Event、Book)
- フィールド定義:各フィールドを入力してください(形式:フィールド名:型、例:title:String、amount:double、isActive:bool)
- 対応する型:String、int、double、bool、DateTime
- createdAt、updatedAt は自動的に追加されます
- 主な機能:フィルタリング/並べ替えの基準にするフィールドを選択してください
2-2. Custom スタックプリセット(D)を選択した場合:
次の質問を順番にしてください:
- ナビゲーション:GoRouter を使用しますか?(はい/いいえ)
- エラーハンドリング:FPDart を使用しますか?(はい/いいえ)
- UI:Google Fonts を使用しますか?(はい/いいえ)
- レスポンシブ対応:Responsive Utils を含めますか?(はい/いいえ)
- 認証システム:Auth システムを含めますか?(はい/いいえ)
ステップ 3: 選択されたドメインとスタックに応じてプロジェクトを作成
-
Flutter プロジェクトの作成:
- ユーザーが指定したフォルダ名でプロジェクトを作成
- コマンド:
flutter create --platforms android,ios --android-language kotlin --org [조직명] [폴더명] - 例:
flutter create --platforms android,ios --android-language kotlin --org com.example my_habit_app - フォルダ名とプロジェクト名(パッケージ名)が異なる場合、作成後に pubspec.yaml の
nameフィールドを修正
-
Kotlin DSL の確認 (最新の Flutter は自動的に Kotlin DSL を使用)
-
選択されたパッケージのインストール:
pubspec.yamlを更新後、flutter pub get -
フォルダ構造の作成: Clean Architecture (core, data, domain, presentation)
-
ドメイン別のボイラープレート生成:
A) Todo: title, description, isCompleted, createdAt, completedAt
- Repository: getTodos, createTodo, updateTodo, toggleCompletion, deleteTodo
- Providers: filteredTodosProvider (all/pending/completed)
- UI: TodoListScreen (フィルタリング), TodoDetailScreen, TodoFormDialog
B) Habit: name, description, frequency, streak, lastCompletedAt, goal, isActive
- Repository: getHabits, createHabit, updateHabit, completeHabit, deleteHabit
- Providers: filteredHabitsProvider (active/inactive), habitStatsProvider
- UI: HabitListScreen (統計), HabitDetailScreen, HabitFormDialog
C) Note: title, content, tags, isPinned, createdAt, updatedAt
- Repository: getNotes, createNote, updateNote, togglePin, deleteNote
- Providers: filteredNotesProvider (pinned/all/byTag), searchProvider
- UI: NoteListScreen (検索/タグ), NoteDetailScreen, NoteFormDialog
D) Expense: amount, category, description, date, paymentMethod
- Repository: getExpenses, createExpense, updateExpense, deleteExpense
- Providers: expensesByCategory, monthlyStats, filteredExpenses
- UI: ExpenseListScreen (統計), ExpenseDetailScreen, ExpenseFormDialog
E) Custom: ユーザー定義フィールド
- Repository: 基本的な CRUD メソッド
- Providers: 基本的な list provider
- UI: 基本的な List/Detail/Form 画面
-
設定ファイルの作成 (ルーティング、ストレージ、多言語など)
-
Android 設定の更新 (CRITICAL for flutter_local_notifications):
android/app/build.gradle.ktsで core library desugaring を有効化:android { compileOptions { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 isCoreLibraryDesugaringEnabled = true // 추가 } } dependencies { coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4") // 추가 }
-
コード生成:
dart run build_runner build --delete-conflicting-outputs -
コード検証とエラー修正:
a.
flutter analyzeを実行b. 検出されたエラーを修正:
- Freezed 3.0 互換性 (CRITICAL): すべての Freezed エンティティは
sealed classを使用- ❌
class User with _$User - ✅
sealed class User with _$User
- ❌
- テーマ設定:
CardTheme→CardThemeDataを使用 (deprecated) - API Client Map 型:
Map<String, dynamic>を返す際に生成コードを検証- retrofit_generator が生成した
dynamic.fromJsonエラーが発生した場合は修正が必要
- retrofit_generator が生成した
- import パスの修正: すべての相対パスを
package:形式に変更- 例:
import '../../domain/entities/todo.dart';→import 'package:todo_app/domain/entities/todo.dart';
- 例:
- パッケージ依存関係の確認: 不足しているパッケージを追加 (例:
shared_preferences) - Riverpod 3.0 互換性:
StateNotifier→Notifier、StateProvider→NotifierProvider - FluentUI アイコン名の確認: 存在しないアイコンは代替
- 型安全性: switch expression を使用、null safety を遵守
c. 再検証: すべての error レベルのエラーがなくなるまで繰り返す
d. 目標:
flutter analyzeの結果が "0-1 issues found" (info レベルのみ許容)✅ CRITICAL: このステップは必須です。すべての error を除去しなければ次のステップに進めません。
- Freezed 3.0 互換性 (CRITICAL): すべての Freezed エンティティは
ステップ 4:最終検証と案内
✅ CRITICAL:このステップはプロジェクトを完了するための必須条件です。
-
最終分析の実行:
flutter analyze -
成功基準:
-
✅ 成功例:
Analyzing todo_app... No issues found!または
Analyzing todo_app... 1 issue found. (ran in 2.3s) info • Prefer using lowerCamelCase for constant names • lib/core/constants.dart:5:7 • constant_identifier_names -
❌ 失敗例(error がある場合は必ず修正してください):
error • Target of URI doesn't exist: 'package:...' • lib/main.dart:5:8 • uri_does_not_exist error • The getter 'xyz' isn't defined for the type 'ABC' • lib/presentation/screens/home.dart:42:15
-
-
検証結果の概要(成功時):
✅ Flutter 프로젝트 생성 완료! ✅ 코드 생성 완료 (Freezed, Drift, JSON Serializable) ✅ Flutter analyze 통과 (0-1 issues found, info 레벨만) ✅ 모든 패키지 설치 완료 -
プロジェクト情報の提示:
- フォルダー名:[ユーザー入力値](例:my_habit_app)
- プロジェクト名(パッケージ名):[ユーザー入力値](例:habit_app)
- 組織名:[ユーザー入力値](例:com.example)
- ドメイン:[選択したドメイン](Todo/Habit/Note/Expense/Custom)
- 選択したスタック:[プリセット名](GoRouter、Drift、FPDart など)
- 主な機能:[ドメイン] の CRUD、多言語対応、ローカルストレージなど
- 生成されたファイル:XX 個の Dart ファイル(core、data、domain、presentation)
-
実行方法の案内:
cd [폴더명] flutter run -
次のステップの提案(任意、ドメイン別):
- Todo:項目の追加/編集/削除、フィルタリング(すべて/進行中/完了)、完了状態の切り替え
- Habit:習慣の記録、連続記録の確認、目標達成率、統計の確認
- Note:メモの作成/編集、タグの追加、メモの固定、検索
- Expense:支出の記録、カテゴリ別統計、月別集計、フィルタリング
- 共通:言語の切り替え(英語 ↔ 韓国語)、ダーク/ライトテーマの切り替え
コア原則
- リポジトリパターン:データレイヤーとドメインレイヤーを分離
- 依存性注入:Riverpod 3.x による依存関係の管理
- 不変性:Freezed で不変モデルを生成
- 多言語対応:Easy Localization による i18n
- モダンな UI:FluentUI Icons を使用
参考ファイル
references/setup-guide.md - 完全ガイド
- 基本セットアップ(ドメイン別 CRUD、多言語対応、FluentUI Icons)
- 選択オプション:GoRouter、Auth、FPDart、Google Fonts、Responsive Utils、パッケージの更新
注意事項
- 対話型スキル:ユーザーがドメインとプリセットを選択して、カスタムアプリを構成
- 対応ドメイン:Todo、Habit、Note、Expense、Custom(ユーザー定義)
- プリセット:Full Stack、Essential、Minimal、Custom
- 選択可能な機能:GoRouter、Auth、FPDart、Google Fonts、Responsive Utils
- 標準で含まれる機能:Riverpod 3.x、Easy Localization、FluentUI Icons、Drift、Dio、SharedPreferences
- 多言語対応:英語/韓国語(拡張可能)
- プラットフォーム:Android/Kotlin、iOS/Swift(Web/Windows/Linux を除く)
- 品質保証:
- すべてのプロジェクトで
flutter analyzeの合格が必須 - package: imports のスタイルに準拠
- 型安全性を保証
- コード生成を自動化
- ドメインごとに最適化された UI/UX
- すべてのプロジェクトで