本企画は、Google Apps Script (GAS)
開発における「壊れやすさ」「テストのしにくさ」「SPA連携の難しさ」を一挙に解決するソリューションです。
Webフレームワーク「Hono」をアダプターとして採用し、AI(MCP)が複雑なインフラコードを自律生成。
「1つのコードベース」で、ローカルAPIサーバーとしても、本番GASアプリとしても、完全に同一の挙動を実現します。
「ここまでWeb標準技術(Hono, REST API,
Vite)をフル活用するなら、最初からCloud
RunやAWSを使えば良いのでは?」
技術的には正論ですが、ビジネスと運用の観点からは「あえてGASを選ぶ」強力な理由が4つ存在します。
サーバー代(GAS)もデータベース代(Spreadsheet)も無料。月額0円で永続的に運用可能な環境は、GAS以外に存在しません。
デプロイ時に「ドメイン内ユーザーのみ」を選ぶだけで、堅牢なGoogle認証付き社内ツールが完成します。実装コストはゼロです。
AWSアカウントの引き継ぎは困難ですが、GASなら「シートの共有」だけで管理権限を移譲できます。非エンジニアでもデータ管理が可能です。
本構成はWeb標準技術で書かれているため、GASの限界が来たらコードをそのままCloud Run等へ移行(Exit)可能です。「GASロックイン」を回避します。
GAS特有のdoGetに依存せず、Honoのルーター機能で/api/usersのような標準的なREST
APIを構築。Webアプリからの接続が極めて容易になります。
REST API (Advanced Service) ベースの単一コードにより、ローカルテストでの「書式設定」や「メール送信」までもが本番と完全に一致します。
人間が書くと数十行になる複雑なGoogle APIのリクエストJSONも、AIなら一瞬で生成。面倒なインフラ層はすべてAIにお任せ。
Honoが「入り口」を、Native Fetchが「出口」を担当し、AIがその間を繋ぎます。
役割: ロジック & UI実装
役割: 設計 & Hono実装
役割: 実行環境
src/index.ts (Hono App)src/features/ (Unified Repo)dist/ (Bundle Artifacts)役割: 外部ロボットアーム
AIは「Honoのコントローラー」と「REST APIリポジトリ」をセットで生成し、即座にAPIとして利用可能にします。
index.ts (Route追記)UniversalRepo.tsAIツールは独立したプロジェクトとして管理され、GASアプリに対して外側から操作を行います。
| Tool名 | カテゴリ | 機能詳細 |
|---|---|---|
setup_named_range |
Infrastructure |
対話型・範囲定義ウィザード API経由でスプレッドシートに「名前付き範囲」を設定し、コード内の定数と同期。列の挿入・移動に強い堅牢なデータ基盤を構築する。 |
scaffold_feature |
Hono/Coding |
フルスタックAPI生成 Honoのルーティング定義と、Advanced Service (REST API) を利用したリポジトリクラスを一括生成。Web APIとして即座に疎通可能な状態を作る。 |
sync_local_secrets |
Setup |
環境構築オートメーション GCPプロジェクト設定、API有効化チェック、JSON鍵配置を自動化。ローカル実行に必要な認証周りのトラブルを撲滅する。 |
GAS紐付けプロジェクトを用意
Google Sheets APIをON
JSON鍵を作成 & DL
Botメールアドレスを招待
.gitignore
に追加し、絶対にリポジトリにコミットしないでください。
MCPサーバーを独立したプロジェクト(Sibling Project)として配置し、GASアプリ側はHonoを中心に構成します。
これにより、AIツール自体を別リポジトリとして管理したり、チーム間で共有することが容易になります。
ポイント:
gas-app と
mcp-server は完全に分離されています。AIは
mcp-server から
gas-app 内のファイルを操作します。
GASにデプロイされるのは
gas-app/dist/bundle.js
のみとなり、構成が非常にクリーンです。
Honoが「ルーター」としてリクエストを受け、Unified Repoが「Fetch」でGoogle APIを叩く流れです。
1. Request:
POST /api/highlight (Web標準)
2.
Hono:
ルーティングを解析し、コントローラーを実行
3. Repo: 複雑なJSONを構築し、fetch
でGoogle APIへ送信
4. Response:
c.json({ success: true }) を返却