Flutter で storybook 的なことができる storybook_flutter と Widgetbook の比較検討
Flutter Advent Calendar 2022 の13日です!
Flutter で storybook 的なことができるライブラリで有名なのだと monarch, storybook_flutter, Widgetbook がある。
今回は web に公開できるやつを選びたい。デザイナーやPdMに見てもらったりが簡単にできるし、macos App として提供するのは大変そなので。そうすると storybook_flutter, Widgetbook の2択となる。
web は hot reload ではなく hot refresh となるため、基本的に macos app として開発中は利用し、web は deploy 時に確認するだけの運用となる。
最初に結論
Widgetbook を利用することにした。検索ができるので。
go_router 3などが使われていてダメだった。 storybook_flutter を使うことにしました。
比較検討
storybook_flutter
見た目はこんな感じ
- シンプル。シンプルでとても良い
- デメリットとして検索機能がない
- Widget が増えた時に探すのが大変そう。
- 検索機能に関しては最近PRが出たみたいだけどレビューされてない。
こんな感じでかく。シンプルで直感的。
class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) => Storybook( initialStory: 'Screens/MyHomePage', plugins: _plugins, stories: [ Story( name: 'Screens/MyHomePage', description: 'Demo Counter app with about dialog.', builder: (context) => MyHomePage( title: context.knobs.text(label: 'Title', initial: 'Counter'), ), ), Story( name: 'Widgets/Text', description: 'Simple text widget.', builder: (context) => const Center(child: Text('Simple text')), ), ], ); }
Widgetbook
見た目はこんな感じ
- 多機能で色々できる
- ドキュメントを真面目に読む必要がある
- 検索がある!
- go_router ver 3 などが使われておりダメだった
- 手元で作ってるやつを deploy してみた
- なんか Widgetbook cloud という有料機能があるっぽい
- OSS版を無料で使うこともできるので、無料で利用する
- 有料版があるなら今後もサポートちゃんとされていくかも?
- 以下の階層構造を経る必要がり、若干だるい。まあこれくらいならいいか
- Widgetbook
- WidgetbookCategory
- WidgetbookComponent
- WidgetbookCategory
- Widgetbook
- Widgetbook 作成自動化もできるが、production コードに Widgetbook に関する情報が入ったり、階層構造の名前が固定化されてしまう
コードはこんな感じになる。ちょっとごちゃごちゃしますね。
class WidgetbookHotReload extends StatelessWidget { const WidgetbookHotReload({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Widgetbook.material( categories: [ WidgetbookCategory( name: 'components', widgets: [ WidgetbookComponent( name: 'button', useCases: [ WidgetbookUseCase( name: 'button', builder: (context) { return Button( buttonTitle: context.knobs .text(label: "title", initialValue: "title"), ); }, ), ], ), ], ), ], appInfo: AppInfo(name: 'hoge'), themes: [ WidgetbookTheme( name: 'Light', data: ThemeData.light(), ), ], } }
結論
storybook_flutter の方がシンプルで好きなのだが、検索ができないという一点だけで Widgetbook を利用することにした。
とはいえ Widgetbook もいい感じに使えるし、Flutter web でウェブ版も簡単に見れて便利。
検索はないけどライブラリのバージョンなどを鑑みて storybook_flutter にしました。