1. 概要 — 【API】内蔵AI とは
【API】系統は、ブラウザからプロバイダの公式 API へ直接接続する内蔵AI(Gemini・OpenAI互換)と Google 連携です。Google 関連機能は管理ウィンドウ(サイドパネル右端の ⚙ ボタン)に集約しており、Gemini・外部エージェントは「AI」カテゴリ、Google Maps Platform は「Google Maps」カテゴリから設定・管理します。【ブリッジ】系統(GitHub Copilot・Devin・Antigravity・外部エージェント)は 【ブリッジ】外部エージェント連携 に分離しています。
AI の利用形態(通常版 / アプリ版)
| AI 経路 | 通常版(ブラウザ/公開デプロイ) | アプリ版(ローカル exe) |
|---|---|---|
| Gemini(BYO APIキー) | ○ | ○ |
Gemini(サーバーキー /api/gemini) | ○(Cloudflare/Cloud Run デプロイ時) | — |
| OpenAI互換(GitHub Models・OpenAI・Ollama 等) | ○(BYOキー・エンドポイントがCORS許可の場合) | ○ |
| 外部エージェント(汎用エンドポイント) | ○(ブラウザから届くURL) | ○ |
| GitHub Copilot(ブリッジ) | ○ | ○ |
| Devin(ブリッジ) | ○ | ○ |
| Antigravity(ブリッジ) | ○ | ○ |
| Microsoft 365 Copilot(公式 Chat API) | 未実装・標準連携は見送り(ライセンス・アプリ登録・必要権限への管理者同意等が前提。接続自体の禁止ではない) | |
| Microsoft Copilot / M365 Copilot(Web UI 自動化) | 提供しない(消費者向けは自動アクセスの明示禁止。職場・学校向けとの違いは見送り理由を参照) | |
高権限ツール(/api/fetch・/api/plugins・/api/files・publishPlugin・ファイル保存) | — | ○(local ティアのみ) |
「通常版」は静的配信・Cloudflare・Cloud Run などブラウザだけで開く形態、「アプリ版」はローカル Rust サーバー(kasugai_canvas.exe)で動かす形態です。AI チャット本体・地図操作・コード実行・プラグイン生成はどちらでも使え、アプリ版には永続化・共有・システムに触れる高権限機能とローカルブリッジの自動起動があります。
【ブリッジ】系統(GitHub Copilot・Devin・Antigravity・外部エージェント)の設定手順・ブリッジハブ構成(待受ポート・CLI 要件・環境変数)は 【ブリッジ】外部エージェント連携 に集約しています。
AI プロバイダの2系統(【API】と【ブリッジ】)
「AI プロバイダ」の選択肢は名前の先頭の接頭辞で2系統に分かれます。入力方法も動作モデルも異なるため、目的に応じて選びます。
| 【API】Gemini / OpenAI互換 | 【ブリッジ】GitHub Copilot / Devin / Antigravity / 外部エージェント | |
|---|---|---|
| 接続先 | プロバイダの公式 API へブラウザから直接接続(HTTPS) | ローカル等のエンドポイント(/agent)へ POST |
| 設定するもの | APIキー+モデル(OpenAI互換はベースURLも) | エンドポイントURL+トークン(任意)+BYOキー送信(任意) |
| AI 側の資格 | BYO キー、またはサーバーキー(/api/gemini) | ブリッジ側が持つ(Copilot CLI ログイン等)。ブラウザにキーは不要 |
| ツール実行方式 | function calling ループ — ツール結果を見て複数往復で判断するため多段操作に強い | 単発キュー — 応答の actions を一括実行。ツール結果を見た往復はしない |
| 向いている用途 | 高精度な地図操作・プラグイン生成・資料生成などの本体 AI | 既存の Copilot 契約や自作エージェント(外部実装)を繋いで使う |
| 提供形態 | 通常版 | 外部エージェントは両形態。GitHub Copilot / Devin / Antigravity の専用選択肢は ブリッジハブ検出環境(同一PCの常駐 bridge-hub :8511 — アプリ版・ブラウザ WebGIS 共通)で表示 |
どちらを選んでもチャット UI・地図操作・runCode・破壊的操作の確認ダイアログは共通です。ブリッジ系を選んだ場合のみ「エンドポイントURL・トークン・BYOキー送信」のブリッジ欄が表示され、GitHub Copilot / Devin / Antigravity ではさらにモデル選択と疎通ステータスが表示されます。
2. 導入・セットアップ — API キーの発行と設定
🔑 API キー管理
Gemini キーは Google AI Studio、Maps キーは Google Cloud Console で発行。キーは localStorage にのみ保存され、.kasc エクスポートには含まれません。発行したキーは 管理(⚙)→ AI → チャット(Gemini)・管理(⚙)→ Google Maps(Maps キー)で設定します。
Google Cloud で有効化・キー制限への追加が必要な API:
- Map Tiles API — Photorealistic 3D Tiles
- Geocoding API — 検索プロバイダ「Google」(ハイブリッド検索の住所側)
- Places API (New) — ハイブリッド検索の施設・キーワード側 / AIツール
searchPlaces - Street View Static API — Street View のメタデータ確認(「SV」ボタン・地図クリック・AIツール
openStreetView。パノラマ自体は Google マップを別タブで開くだけなので API 不要)
Geocoding / Places / Street View の Web サービス API は HTTP リファラー制限付きキーを拒否します。リファラー制限をかけたい場合は「Web サービス用キー」欄に制限なしの別キーを設定してください(Map Tiles API のみリファラー制限が有効なので、上の「Maps API キー」に制限付きキーを入れる運用が可能です)。Street View 候補ラインは Google マップ内部のカバレッジデータ(キー不要・非公式)を使用します
サーバー配布(BYO 不要化):バックエンド(Cloud Run・Cloudflare Pages/Workers)のシークレットに GOOGLE_MAPS_API_KEY を設定すると、/api/capabilities が google.mapsApiKey を通知し、ブラウザに Maps キーが未保存の場合に自動登録します。訪問者は何も入力せずに Maps 系機能を使えます(BYO キーが保存済みならそちらが優先)。Maps キーはタイル URL 等に埋め込まれる設計上の公開キーなので、保護は秘匿ではなく GCP コンソールの HTTP リファラ制限(https://<配信ドメイン>/*)で行ってください
OpenAI互換エンドポイントの設定
「AI プロバイダ」で「OpenAI互換」を選ぶと、GitHub Models(GitHub PAT)・OpenAI・Azure OpenAI・Ollama・LM Studio など chat/completions 互換エンドポイントに、ベースURL・キー・モデル名を指定して接続できます(ブラウザから直接接続するため、エンドポイント側の CORS 許可が必要です)。「接続プリセット」で主要サービスのベースURLを自動入力でき、「モデル一覧を取得」ボタンは {ベースURL}/models をブラウザから取得して接続・キー・CORS の疎通確認を行い、取得したモデル ID をモデル欄の選択肢へ反映します。さくらのAI Engine は専用プロバイダ「【API】さくらAIEngine」として用意されており、エンドポイント(https://api.ai.sakura.ad.jp/v1)固定でアカウントトークンとモデルだけを設定します(OpenAI互換側にさくら向け設定が残っていた場合は初回起動時に自動移行されます)。GitHub Copilot 契約を使いたい場合は 【ブリッジ】外部エージェント連携 を参照してください。
3. 使い方 — 主な機能
🤖 AIチャット(Gemini / OpenAI互換)
右下の Chat パネルから AI の function calling で地図を操作。「◯◯へ飛んで」「レイヤを消して」等をAIが実行。52ツールでカメラ・レイヤ・ベースマップ・検索・地形/効果・地下表示・断面クリップ・Flyパス・プロジェクト切替・データ取得/加工・プラグイン生成・資料生成(showReport+パーマリンク)まで網羅(一覧は V3: AI 連携)。AI移動はドローン視点(対象地上+200m・-30°)が既定。管理(⚙)→ AI → チャット で API キー・モデルを設定。Cloudflare/Cloud Run にサーバーキー(/api/gemini)があればキー未設定でも動作
🗺️ Photorealistic 3D Tiles
管理(⚙)→ Google Maps で Maps Platform API キーを設定し、「Photorealistic 3D Tiles」を ON にすると、Google のフォトリアル3Dタイルがレイヤ一覧へ自動追加され表示されます。Map Tiles API は従量課金です
🔍 Maps Platform の検索・ Places ・ Street View
Maps API キーを保存すると、住所検索タブのプロバイダに「Google」が追加されます。Geocoding API と Places テキスト検索を並列で呼ぶハイブリッド検索で、住所・施設名・キーワードのいずれにも対応します。検索結果の「SV」ボタンや「地図をクリック → Street View」でストリートビューを別タブで開き、「候補ラインを表示」で撮影済み道路の青いラインを地図上に重ねられます。AIチャットには searchPlaces(Places テキスト検索)・openStreetView(ストリートビューを別タブで開く)ツールが有効時のみ公開され、「近くのカフェを探して」「この地点のストリートビューを見せて」といった指示に対応します
⚙️ ローカルコマンド
APIキー未設定でも /fly /layers /layer /basemaps /search /camera で地図操作を試せます
🧪 コード実行サンドボックス
runCode ツールでAI生成JSを sandbox iframe(opaque origin)内で実行。集計・加工・座標計算が無料・高速。地図操作は api ブリッジ経由のみ
📜 履歴・透明性
履歴はプロジェクト単位で localStorage に永続化(最大200件・ヘッダーの🗑でクリア)。AIのツール実行は「実行: ...」とログ表示
🔐 セキュリティ
APIキーは localStorage のみ・送信先は Google のAPI(HTTPS)のみ。Google Cloud 側でAPI制限推奨。window.kasugaiApi は開いたブラウザ内からのみ実行可能で外部経路なし。影響の大きい操作(プロジェクト切替・設定適用・停止等)はユーザー明示時のみ
🗂️ データソース(MCP 接続)
管理(⚙)→ AI → データソース でリモート MCP サーバー(Model Context Protocol・Streamable HTTP)を登録すると、そのサーバーのツールが AI チャットへ合成され、「Box の資料を検索して」等の指示で外部データを参照できます。Box は公式リモート MCP(mcp.box.com)専用ボタンがあり、Client ID を入れて OAuth 2.0 + PKCE でブラウザ内認証が完結します(Box Developer Console で Custom App 作成+このアプリの URL をリダイレクト URI に登録が必要。Enterprise は Admin Console での MCP 有効化が前提)。その他の MCP サーバーは URL・Bearer トークン(任意)で追加できます。トークンは BYO として localStorage にのみ保存。読み取り系ツールのみ既定公開で、書き込み系は設定を ON にしても実行ごとに確認ダイアログが出ます。CORS 非対応のサーバーは POST /api/mcp 中継(ローカル版・Workers・Cloud Run で提供・BYO トークン転送のみ)に自動フォールバックします
🧩 AIプラグイン生成(自己拡張)
チャットに「〜するプラグインを作って」と頼むと、AIがコードを生成してブラウザ内 IndexedDB に保存・即時有効化。適用前にコード全文の確認ダイアログが出ます。読み込みエラーはAIへ返るため、修正→再保存の自律ループが回ります。管理(⚙)→ AI → プラグイン で一覧・有効化・コード確認・.kasp 出力/取込・削除が可能。ストレージ保存のため配布物とは分離され、気に入ったものだけ PLUGIN/ に登録して公開できます
📊 データ取得・加工・表示パイプライン
fetchData(外部URL取得・CORS前提)と getLayerGeoJson(読込済みレイヤーのGeoJSON取り出し・描画切り捨て時も全件)でデータを取得し、runCode で任意の加工・集計・変換を行い、addDataLayer で GeoJSON を直接レイヤー表示。feature の properties に simplestyle 属性(marker-color/fill/stroke/description 等)を書けば色分け・ポップアップも制御できます。一時レイヤーは .kasc には含まれません。URL・ファイル指定のレイヤーを .kasc に永続追加する場合は addLayer(geojson/layer/geoparquet/flatgeobuf/gpkg/duckdb/sql の各行タイプに対応、duckdb は where=/limit=/bbox=auto 等のオプション指定可)を使います
🌐 実行環境ティア(公開/ローカルの使い分け)
AI機能は操作の影響範囲で3ティアに分かれます。static(静的配信のみ)と workers(Cloudflare Pages/Workers 公開環境)では、セッション内に閉じる安全な機能(地図操作・runCode・データ加工・IndexedDBプラグイン生成)を誰でも利用可能。local(ローカルサーバー版)では永続化・共有・システムに触れる高権限機能(/api/fetch によるCORS回避の取得プロキシ、/api/plugins による PLUGIN/ へのプラグイン公開、ファイル保存)が使えます。フロントは /api/capabilities で能力を検出してツール・UIを出し分け、バックエンド無しでも安全機能のみで動作します。昇格ルートは「IndexedDB草稿 → .kasp出力 → ローカル版で公開ボタン → PLUGIN/」です
ローカルサーバー版の独自API(公開環境では無効)
GET /api/capabilities → {"tier":"local","features":["fetchProxy","pluginWrite","fileWrite",...]}
GET /api/fetch?url=... → CORS回避のGETプロキシ(http/httpsのみ・30秒・20MB上限)
POST /api/mcp?url=... → リモート MCP サーバーへの中継プロキシ
(Workers/Cloud Run にも同パスあり。Authorization・
セッションヘッダ・ボディをそのまま転送。
SSRF 制限は /api/fetch と同じ・応答32MB上限)
POST /api/plugins → {"id","name","version","description","layer","code"}
PLUGIN/<id>/plugin.js・manifest.json を作成し plugins.json に登録
DELETE /api/plugins/{id} → プラグインの公開取り消し(PLUGIN/<id>/ と plugins.json 登録を削除)
GET /api/files?project= → projects/<project>/DATA/ 内のファイル一覧({name,size,modified}[])
PUT /api/files/{project}/{path} → DATA/ へボディを書き込み(サブフォルダ可・64MB上限)
DELETE /api/files/{project}/{path} → DATA/ 内のファイルを削除
プラグインIDは半角英数・-・_ のみ(64文字まで)。公開・削除は実ファイルを書き換えるため、フロント側では必ず確認ダイアログが出ます。公開環境(Pages/Workers)に同等の無認証書き込みAPIを置かないでください。
4. 注意点・制限 — 未実装・今後の検討項目
- Workers 側の fetch プロキシ:CORS 外の任意 URL を取り込む汎用 fetch プロキシは未実装(AI プロキシ
POST /api/geminiは実装済み — Workers/Pages のシークレットにGEMINI_API_KEYを置けばキー未設定の訪問者でも内蔵AIが使える。BYO = Bring Your Own キーは引き続きどの環境でも利用可) - Workers の共有書き込み:共有 .kasc カタログ・共有プラグインカタログへの書き込みは認証・承認フローが前提で未実装
- サーバーサイドエージェント:Rust 側の長時間エージェントループ・SSE/WebSocket によるサーバー起点の通知・会話メモリ/RAG は未実装(現状のAIループはブラウザ内・最大5ステップ・タブを閉じると停止。外部エージェントへのHTTP転送はプロバイダ「外部エージェント」で設定可能)
- ローカルファイル連携:DATA/ 書き込みは File System Access API(Chromium系)とローカルサーバー版の
/api/filesで実装済み。QGIS/GDAL 呼び出しは未実装 - Cloud Run の長時間処理:
agent/の FastAPI サービス(静的配信・認証・GCS 保存・/api/gemini・Maps キー配布)は実装済みでrun-cloudrun.pyでデプロイできます(詳細は Cloud Run 認証)。長時間エージェントループ・SSE は未実装