QGIS Live Driver & Harness: AIによるQGISプラグイン開発・自律制御の全体像
全体像: Driver(QGIS側の手)× Harness(操縦席)が実現するAI自律開発ループ

解説動画:
QGIS Live Driver(MCPからQGISを操作するドライバ)
QGIS Live Harness(AIによる全自動開発基盤)

このリポジトリは単体のプラグイン製品ではなく、QGISに「取り付けて操縦する外側の装具」そのもの。 (リポジトリ/ディレクトリ名: qgis_live_harness)

構成(全体像)

flowchart TB
    subgraph CL["クライアント"]
        C["AI / CI / 人間"]
    end

    subgraph H["QGIS Live Harness (E2Eプラグイン開発・検証環境)"]
        HC["LivePage / live:*<br/>ensure / reload / devreload<br/>L1 Playwright / L2 test:live<br/>MCPアダプタ qgis-mcp.mjs"]
    end

    subgraph D["QGIS Live Driver (QGIS側の手)"]
        DC["ファイルJSONL<br/>REST /api/*<br/>MCP /mcp・stdio shim"]
    end

    subgraph QGIS["QGIS本体"]
        Q["iface / QgsProject<br/>他プラグイン"]
    end

    CL --> H
    CL -.->|直接接続| D
    H --> D
    D --> QGIS

破線 = Driver単体でも成立する経路(Harness不要)。

層 名前 役割
QGIS側の手 QGIS Live Driver (qgis_live_driver) QGIS内で動く制御専用プラグイン。このリポジトリに依存しない汎用部品で、任意のQGISへ単独導入して遠隔操作面を得られる
E2Eプラグイン開発・検証環境
(外側の装具)
QGIS Live Harness (このリポジトリ全体) Driverの操作面の上に乗る、クライアントAPI・セッション管理・ホットリロード・検証の基盤。リポジトリがあって初めて成り立つ

開発対象のWebEngineプラグインは qgis-plugin/<id>/ に置き、 deployするのは固定の「器」(QWebEngineView + ドライバ)だけで、 ロジック/UIはrepo側に置いたまま動かせる。

この上で回るのは エージェンティックループ: AIが「書く→devreloadで実機反映→ eval/pyeval/スクショで観測→test:liveで検証」を人間なしで反復する。

flowchart TB
    subgraph TOP["利用者: AIエージェント / CI / 人間"]
        MCPC["MCPクライアント(Devin等)"]
        CLIC["CLI / 自作スクリプト"]
        HTTPC["任意HTTPクライアント"]
    end

    subgraph HARNESS["QGIS Live Harness = このリポジトリ(基盤)"]
        ADAPT["MCPアダプタ<br/>scripts/qgis-mcp.mjs(stdio)"]
        NODE["クライアント層<br/>LivePage / qgis-session<br/>live:* / test:live"]
    end

    subgraph Q["常駐QGISプロセス"]
        DRIVER["QGIS Live Driver(汎用部品)<br/>pyeval / 地図スクショ / plugin_id転送(hub)<br/>ファイルJSONL + 内蔵HTTP(/mcp,/api/*)"]
        VESSEL["開発対象プラグイン(器)<br/>view/channel + view用LiveDriver"]
        PROD["開発対象(repo側)<br/>bridge.py / logic.py / ui/<br/>WEBENGINE_DEV_SRCから別名import"]
        VESSEL --> PROD
    end

    MCPC -->|stdio| ADAPT --> NODE
    MCPC -.->|"mcp_stdio.py / HTTP /mcp<br/>(Harness不要)"| DRIVER
    HTTPC -.->|"/api/*(Harness不要)"| DRIVER
    CLIC --> NODE
    NODE -->|ファイルJSONL| DRIVER
    NODE -->|ファイルJSONL| VESSEL
    DRIVER -.->|plugin_id転送| VESSEL

破線 = Driver単体でも成立する経路(Harnessに依存しない)。 実線 = Harnessが提供する層。

環境要件

注意