Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DevTools extensions で 独自の DevTool を開発する | Flutt...

Koki Yoshida
November 22, 2024

DevTools extensions で 独自の DevTool を開発する | FlutterKaigi 2024

概要
Flutter におけるアプリ開発において、 DevTools は必要不可欠な存在です。
しかし既存の DevTools に独自の機能をカスタマイズできることはあまり知られていません。
DevTools を独自にカスタマイズすることで、ログの表示制御、キャッシュの表示、アプリ内の開発者用の画面を DevTools に移行するなど、開発体験の向上が見込めます。

このセクションでは、devtools_extensions パッケージを使用して、 DevTools を独自にカスタマイズする方法や、
実際のチーム開発でどのような機能をカスタマイズしているかなどの実例を紹介します。
加えてパッケージ製作者向けに自身のパッケージに DevTools Extensions を提供する方法も解説します。

想定視聴者
DevTools の開発に興味のある方
チーム開発の生産性を上げたい方
アプリ内の開発用画面を DevTools に移行させたい方

Koki Yoshida

November 22, 2024
Tweet

Other Decks in Programming

Transcript

  1. DevTools extensions とは? Devtools extensions とは pub package の形で提供される開発者用のツール Devtools

    内に自動で統合され、ブラウザや IDE から利用可能 01 5 開発の生産性向上
  2. 6

  3. 8 8

  4. DevTools extensions とは? Devtools extensions の利点 • Flutter Web で作成できる

    • 既存 package への統合に加え、独立した package として公開可能 • 既存の Devtools の仕組みを再利用できる ◦ VM 接続 ◦ UI コンポーネント ◦ その他ユーティリティ 01 9
  5. 14 DevTools extensions の活用事例 GraphQL Cache Inspector graphql_flutter ではどんなデータが キャッシュされているのか確認しづらい

    ・GraphQLClient のキャッシュを可視化 ・正規化された Tree 構造を出力 ・React の Apollo Client を参考 https://www.apollographql.com/docs/react/devel opment-testing/developer-tooling 02 14
  6. 15 DevTools extensions の活用事例 Loading State Toggle すぐに状態が切り替わる Loading 中

    の UI が確認しづらい ・Loading 状態の UI を切り替え ・Skeleton などの確認に利用 ・React の Suspense を参考 https://react-devtools-tutorial.vercel.app/toggl ing-suspense-fallbacks 02 15 isLoading == true isLoading == false
  7. 26 DevTools extensions の作成方法 既存 package に追加する場合 1. config.yaml の作成

    2. Devtools extensions のパッケージを作成 3. Flutter web で build 参考 : https://pub.dev/packages/devtools_extensions 03 26
  8. 27 DevTools extensions の作成方法 1. config.yaml の作成 03 27 flutter_kaigi/

    └── packages/ └── app/ ├── extension/ │ └── devtools/ │ ├── build/ │ └── config.yaml └── lib/ # config.yaml name: flutterkaigi issueTracker: 'https://github.com/lllttt06/flutter_kaigi_2024/issues' version: 0.0.1 materialIconCodePoint: '0xe0b1' requiresConnection: true
  9. 28 DevTools extensions の作成方法 1. config.yaml の作成 03 28 flutter_kaigi/

    └── packages/ └── app/ ├── extension/ │ └── devtools/ │ ├── build/ │ └── config.yaml └── lib/ # config.yaml name: flutterkaigi issueTracker: 'https://github.com/lllttt06/flutter_kaigi_2024/issues' version: 0.0.1 materialIconCodePoint: '0xe0b1' requiresConnection: true 表示名
  10. 29 DevTools extensions の作成方法 1. config.yaml の作成 03 29 flutter_kaigi/

    └── packages/ └── app/ ├── extension/ │ └── devtools/ │ ├── build/ │ └── config.yaml └── lib/ # config.yaml name: flutterkaigi issueTracker: 'https://github.com/lllttt06/flutter_kaigi_2024/issues' version: 0.0.1 materialIconCodePoint: '0xe0b1' requiresConnection: true Report an issue で遷移する URL
  11. 30 DevTools extensions の作成方法 1. config.yaml の作成 03 30 flutter_kaigi/

    └── packages/ └── app/ ├── extension/ │ └── devtools/ │ ├── build/ │ └── config.yaml └── lib/ # config.yaml name: flutterkaigi issueTracker: 'https://github.com/lllttt06/flutter_kaigi_2024/issues' version: 0.0.1 materialIconCodePoint: '0xe0b1' requiresConnection: true Devtools extensions のバージョン
  12. 31 DevTools extensions の作成方法 1. config.yaml の作成 03 31 flutter_kaigi/

    └── packages/ └── app/ ├── extension/ │ └── devtools/ │ ├── build/ │ └── config.yaml └── lib/ # config.yaml name: flutterkaigi issueTracker: 'https://github.com/lllttt06/flutter_kaigi_2024/issues' version: 0.0.1 materialIconCodePoint: '0xe0b1' requiresConnection: true 表示名の左側のアイコン material/icons.dart
  13. 32 DevTools extensions の作成方法 1. config.yaml の作成 03 32 flutter_kaigi/

    └── packages/ └── app/ ├── extension/ │ └── devtools/ │ ├── build/ │ └── config.yaml └── lib/ # config.yaml name: flutterkaigi issueTracker: 'https://github.com/lllttt06/flutter_kaigi_2024/issues' version: 0.0.1 materialIconCodePoint: '0xe0b1' requiresConnection: true dart or Flutter アプリとのコネクトが必要か
  14. 33 DevTools extensions の作成方法 既存 package に追加する場合 1. config.yaml の作成

    2. Devtools extensions のパッケージを作成 3. Flutter web で build 参考 : https://pub.dev/packages/devtools_extensions 03 33
  15. 34 DevTools extensions の作成方法 2. Devtools extensions のパッケージを作成 03 34

    flutter_kaigi/ └── packages/ ├── app/ │ ├── extension/ │ │ └── devtools/ │ │ ├── build/ │ │ └── config.yaml │ └── lib/ └── devtools_ext/ └── lib/ $ flutter create --template app --platforms web devtools_ext $ flutter pub add devtools_extensions devtools_ext という名前の web 向けの Flutter アプリとして作成 devtools_ext の作成
  16. 35 DevTools extensions の作成方法 2. Devtools extensions のパッケージを作成 03 35

    flutter_kaigi/ └── packages/ ├── app/ │ ├── extension/ │ │ └── devtools/ │ │ ├── build/ │ │ └── config.yaml │ └── lib/ └── devtools_ext/ └── lib/ $ flutter create --template app --platforms web devtools_ext $ flutter pub add devtools_extensions devtools_extensions を追加 devtools_ext の作成
  17. 37 DevTools extensions の作成方法 2. Devtools extensions のパッケージを作成 03 37

    DevtoolsExtension Widget の使用 ・Devtools 用の Theme 設定 ・Devtools extensions で使用可能な globals の初期化 ・extensionManager ・serviceManager ・dtdManager
  18. 40

  19. 42

  20. 43

  21. 47 DevTools extensions の作成方法 2. Devtools extensions のパッケージを作成 実行中のアプリと Devtools

    extensions の通信 03 47 app : registerExtension で ExtensionHandler を登録 devtools_ext : serviceManager.callServiceExtensionOnMainIsolate で登録した ExtensionHandler を呼び出す
  22. 48 DevTools extensions の作成方法 2. Devtools extensions のパッケージを作成 実行中のアプリと Devtools

    extensions の通信 03 48 app : registerExtension で ExtensionHandler を登録 devtools_ext : serviceManager.callServiceExtensionOnMainIsolate で登録した ExtensionHandler を呼び出す
  23. 50 DevTools extensions の作成方法 2. Devtools extensions のパッケージを作成 実行中のアプリと Devtools

    extensions の通信 03 50 app : registerExtension で ExtensionHandler を登録 devtools_ext : serviceManager.callServiceExtensionOnMainIsolate で登録した ExtensionHandler を呼び出す
  24. 53 DevTools extensions の作成方法 既存 package に追加する場合 1. config.yaml の作成

    2. Devtools extensions のパッケージを作成 3. Flutter web で build 参考 : https://pub.dev/packages/devtools_extensions 03 53
  25. 59 DevTools extensions 開発の Tips DevToolsExtension で初期化した globals の活用 •

    ExtensionManager • ServiceManager • DTDManager 参考 : https://pub.dev/packages/devtools_extensions 04 59
  26. 60 DevTools extensions 開発の Tips DevToolsExtension で初期化した globals の活用 •

    ExtensionManager • ServiceManager • DTDManager 参考 : https://pub.dev/packages/devtools_extensions 04 60 DevTools にバナーやスナックバーで通知
  27. 61 DevTools extensions 開発の Tips DevToolsExtension で初期化した globals の活用 •

    ExtensionManager • ServiceManager • DTDManager 参考 : https://pub.dev/packages/devtools_extensions 04 61 VM Service との連携
  28. 62 DevTools extensions 開発の Tips DevToolsExtension で初期化した globals の活用 •

    ExtensionManager • ServiceManager • DTDManager 参考 : https://pub.dev/packages/devtools_extensions 04 62 ファイルシステムとの連携が可能
  29. 65 まとめ • Devtools Extensions で独自の開発機能を作成可能 • 作り方は簡単 3 ステップ

    ◦ config.yaml の作成 ◦ Devtools extensions のパッケージを作成 ◦ Flutter web で build • React など Web 界隈のツールを参考にするのもオススメ 65