Flutist : Flutterモジュラーアーキテクチャ管理フレームワークを作ってみました! (feat. Tuist)
(flutist-1pn8eqs9s-seonwookes-projects.vercel.app)Flutterプロジェクトの規模が大きくなると、ビルド性能やレイヤー分離のためにモジュール化(パッケージ分割)を選ぶようになります。しかし、モジュール数が増えるほど数十個のpubspec.yamlを管理する負担が増え、コードレビューだけではアーキテクチャのルールを強制するのが難しくなります。
FlutistはiOSのTuistに着想を得て、Dart 3.6+のpub workspaces上でプロジェクトの仕様とルールをコードとして宣言・管理できるように設計されたフレームワークです。
「なぜFlutistなのか?」
-
宣言的なプロジェクト構成
各モジュールのpubspec.yamlを直接修正する代わりに、package.dartにパッケージのバージョンを、project.dartにモジュール間の依存グラフを宣言します。一度定義すれば、すべてのモジュールのpubspec.yamlがflutist generateコマンドで同期されます。 -
アーキテクチャルールの自動強制
クリーンアーキテクチャでは、domainがdataを直接参照したり循環依存が発生しても、pubはそれを防ぎません。flutistはstrictModeを有効にすることで、これに違反した場合はgenerate時にエラーを表示します。ドキュメントやコードレビューにしかなかった原則が、実行可能なルールになります。 -
型安全性と生産性
文字列ベースのパッケージ参照の代わりに、自動生成されたアクセサを通じてIDEの自動補完とコンパイル時の型チェックをサポートします。また、繰り返し発生するレイヤー構造やボイラープレート生成のためのスキャフォールディング機能を提供し、初期設定コストを最小限に抑えます。 -
開発体験の最適化
モジュールごとの並列/個別テスト実行はもちろん、flutist graphを通じて複雑に絡み合ったモジュール依存関係をブラウザ上で視覚的に即座に確認できます。
サポートするモジュールタイプ 4種類
clean— Clean Architecture 3-layer (domain / data / presentation)micro— Microfeature 5-layer (interface / implementation / testing / tests / example)lite—microからexampleを除いた4-layersimple— 単一パッケージ(ユーティリティ、共有モデル、アプリシェル用)
CLIコマンド
flutist init/create/generate/check/pub/scaffold/test/graphflutist checkはファイルを生成せずにアーキテクチャのみを検査 → CIパイプライン向けflutist graph --openでmermaid依存グラフをブラウザですぐに確認
リンク
- Docs: https://flutist-web.vercel.app/docs
- pub.dev: https://pub.dev/packages/flutist
- GitHub: https://github.com/seonwooke/flutist
Flutterのマルチモジュールアーキテクチャを検討している方には、flutistの導入をおすすめします。フィードバックをいただければ積極的に反映していきます! ありがとうございます🙏
まだコメントはありません。