Marionette MCPのススメ

完全にエージェント任せでFlutter開発したときの知見共有

Kota Hayashi

AI時代のFlutter開発スペシャル by クラスメソッド — 2026/05/11

自己紹介

Kota Hayashi

X profile screenshot
AI時代のFlutter開発スペシャル by クラスメソッド — 2026/05/11

最近やっていること

CC Pocket

  • Codex や Claude をスマホから操作するためのアプリ
  • AI駆動開発の検証も兼ねた個人開発プロジェクト
  • Flutterで iOS / Android / macOS に対応
  • コードはすべてエージェントに書かせている
CC Pocket GitHub repository card
AI時代のFlutter開発スペシャル by クラスメソッド — 2026/05/11

アプリ画面

CC Pocket iPad screenshot CC Pocket iPhone screenshot
AI時代のFlutter開発スペシャル by クラスメソッド — 2026/05/11

CC Pocketの反応

指標 数字
GitHub Stars 720
App Store レビュー 31件 / 4.8
Google Play レビュー 14件 / 5.0
  • 完全にエージェントにコードを書かせてもユーザーが満足する品質にできる
  • 重要だったのは AI自身に検証させる仕組み
AI時代のFlutter開発スペシャル by クラスメソッド — 2026/05/11

CC Pocketでの開発プロセス

  1. 下調べ
    1. 実装に十分なコンテキストの取得
  2. プラン
    1. おかしいところはここで軌道修正
    2. 複雑な機能では、実装前に どう検証するか まで計画させる
  3. 実装
    1. 丸投げ
  1. フィードバックループ
  2. 人手でチェック
  3. 必要なら前のステップへ戻る
AI時代のFlutter開発スペシャル by クラスメソッド — 2026/05/11

AI駆動開発で一番効いたこと

フィードバックループを作る

  • lint
  • unit test
  • セルフレビュー
  • 実機 / シミュレータでのUI確認

AIに「実装」だけでなく、確認して直すところまで任せる

AI時代のFlutter開発スペシャル by クラスメソッド — 2026/05/11

Flutterでのフィードバックループ

  • lint, unit testはこれまでの開発の延長。実装完了後にpassさせるようにメモリ(AGENTS.md等)で指示。強制するならhooks
  • セルフレビュー
    • サブエージェントでクリアなコンテキストウィンドウを使わせたり、別のモデルを使ってコードレビューさせる
    • PRレビューでやってたことをローカルで行う
  • UI検証
    • 実際にシミュレーターでUIを操作させる
    • Marionette MCP
      • 他にも選択肢があるが個人的におすすめ
AI時代のFlutter開発スペシャル by クラスメソッド — 2026/05/11

Marionette MCP

LeanCode が開発している Flutter 特化のMCP

https://pub.dev/packages/marionette_mcp

MCP 主な用途
Dart and Flutter MCP server エラー取得、コード分析など開発時の支援
Marionette MCP タップ、入力、スクショなどランタイム操作

どちらか一方ではなく、併用するツール

AI時代のFlutter開発スペシャル by クラスメソッド — 2026/05/11

Marionette MCPでできること

操作 例
UIツリーの取得 ボタンやテキストを探す
タップ / 入力 実際に画面を操作する
スクリーンショット 見た目を確認する
カスタム操作の呼び出し アプリ固有の導線を短縮する

Flutter向けの「AIに目と手を渡す」道具
Webで有名なPlaywright MCPのポジション

AI時代のFlutter開発スペシャル by クラスメソッド — 2026/05/11

Marionette MCPの使い所

  • UIが絡む既存機能改修
    • 計画段階でUI操作しての検証まで提案させる
  • 人手でのチェックフェーズでバグが見つかったとき
    • バグがe2eで直ることが確認できることをゴールにする

付きっきりで見守る場合より時間はかかるが、AIにかなりお任せできるようになる

AI時代のFlutter開発スペシャル by クラスメソッド — 2026/05/11

推し機能 call_custom_extension ツール

アプリ側にAI専用の操作口を用意できる

ツール 役割
list_custom_extensions 登録済みエクステンション一覧を取得
call_custom_extension エクステンションを実行

VM Service Extension を MCP 経由で公開する仕組み

Marionette MCP本体のツールセットを小さく保ちつつ、
アプリ固有の操作を後から足せる「エスケープハッチ」

AI時代のFlutter開発スペシャル by クラスメソッド — 2026/05/11

call_custom_extension できること

  • アプリの設定値(言語・テーマなどなど)を extensionから無理やり変更
    • 正規のルートだと設定画面に行ったりが必要で、検証の前段で時間がかかる
  • 特定画面に直遷移する extension を利用
    • 階層が深い画面に効率的に遷移
AI時代のFlutter開発スペシャル by クラスメソッド — 2026/05/11

Flutter側の実装イメージ

registerMarionetteExtension(
  name: 'myApp.goToPage',
  description: 'Navigate to a specific page by name.',
  callback: (params) async {
    final page = params['page'];
    if (page == null) {
      return MarionetteExtensionResult.invalidParams('Missing: page');
    }

    navigateTo(page);
    return MarionetteExtensionResult.success({
      'page': page,
      'status': 'navigated',
    });
  },
);

name / description / callback がAI向けのインターフェイスになる

AI時代のFlutter開発スペシャル by クラスメソッド — 2026/05/11

戻り値でAIに結果を伝える

戻り値 使いどころ
success 操作が成功した
invalidParams 引数が足りない、値が不正
error 画面状態などの理由で実行できない

AIが次の行動を決めやすいように、
エラーも人間向けではなく 機械が読める結果 として返す

AI時代のFlutter開発スペシャル by クラスメソッド — 2026/05/11

初期化

void main() {
  if (kDebugMode && !kIsWeb) {
    MarionetteBinding.ensureInitialized();
    registerMyExtensions();
  } else {
    WidgetsFlutterBinding.ensureInitialized();
  }

  runApp(const App());
}

kDebugMode でガードするので、リリースビルドには影響しない

AI時代のFlutter開発スペシャル by クラスメソッド — 2026/05/11

CC Pocketで登録している操作

エクステンション 用途
ccpocket.navigateToStoreScenario Storeスクショ用画面へ直接遷移
ccpocket.navigateToMockScenario UI検証用モック画面へ遷移
ccpocket.setTheme light / dark / system の切り替え
ccpocket.setLocale en / ja / zh の切り替え
ccpocket.popToRoot ホーム画面に戻す

「AIが迷いやすい導線」をアプリ側からショートカットする

AI時代のFlutter開発スペシャル by クラスメソッド — 2026/05/11

自動化フロー

1. ccpocket.setTheme でライトテーマに設定
2. ccpocket.setLocale で言語を設定
3. ccpocket.navigateToStoreScenario でシナリオに遷移
4. 描画完了を待つ
5. xcrun simctl io booted screenshot で撮影
6. ccpocket.popToRoot でホームに戻す
7. 3-6 を全シナリオ分繰り返す

手動で各画面へ遷移して撮っていた Store 画像を、
今はコマンド一発で全シナリオ分生成している

AI時代のFlutter開発スペシャル by クラスメソッド — 2026/05/11

AIに渡すプロンプト例

/mobile-automation を使ってUI確認してください。

対象: [確認したい画面・機能]

モックで確認できる場合は Mock UI テストを優先し、
必要なら Marionette MCP の custom extension で対象画面へ移動してください。

文字切れ・はみ出し・タップできない要素・ログエラーを確認してください。
問題があれば修正して、同じ確認を再実行してください。

詳しい手順は .claude/skills/mobile-automation/SKILL.md 側に寄せる

AI時代のFlutter開発スペシャル by クラスメソッド — 2026/05/11

使いやすくするコツ

  • .claude/skills/ に検証手順を置く
    • 例: /mobile-automation, /update-store, /self-review
  • スキル内で MCP / CLI の使い分けを明記する
  • call_custom_extension の使い所をスキルに書く
    • 例: ccpocket.navigateToStoreScenario, ccpocket.setTheme
  • Widget Key やモックシナリオ名もスキルに集約する
  • プロンプトでは「どのスキルで、何を確認するか」だけ渡す

毎回プロンプトで説明せず、プロジェクト固有の手順をスキル化する

AI時代のFlutter開発スペシャル by クラスメソッド — 2026/05/11

まとめ

  • AI駆動開発で重要なのは、実装よりも 検証のフィードバックループ
  • FlutterのUI検証には Marionette MCP が便利
  • call_custom_extension でAIが迷う操作をショートカットできる
  • AI向けの操作口を用意すると、品質と速度の両方が上がる
AI時代のFlutter開発スペシャル by クラスメソッド — 2026/05/11

ありがとうございました

Marionette MCP、ぜひ試してみてください

https://pub.dev/packages/marionette_mcp

AI時代のFlutter開発スペシャル by クラスメソッド — 2026/05/11