この記事は、ある自治体向けのSNS分析ダッシュボードを、フルAI駆動・実働1日・8コミットで、ログイン付きの本番まで作り上げた制作事例だ。チャート7種を外部ライブラリなしで実装し、その設計判断ごと開示する。[3]
「これ、作るのに数ヶ月かかりますよね」——新しいものを前にすると、つい口をついて出る言葉だ。この記事は誰かと速さを競う話ではない。"数ヶ月かかる"という見積もりの常識に、いま何が起きているのかを、実物で示すのが目的だ。
面白いのは、ここに「距離」があることだ。「投稿を集めて並べるだけのツール」と「意思決定に使える本番ダッシュボード」——見た目は似ているが、別物だ。世間はしばしば、その両方を同じ「SNS分析」という一語でくくる。だからこそ出発点で、何が"使える道具"なのかを実物で見極める。作る速さの前に、まず見極める目がいる。

01何を作ったか:"見るだけ"から"使える道具"へ
作ったのは、任意のキーワードを入れると4つのSNS(X / Instagram / Facebook / Threads)を横断して投稿を集め、分析して見せる本番Webアプリだ。投稿を並べるだけのモックとの違いは、「見える」ではなく「意思決定に使える」こと。
ログイン(招待制)→ キーワード検索 → ダッシュボード、という一連の業務フローの上に、次の機能群が載る。表に整理する。
| 分類 | 含まれる機能 |
|---|---|
| KPI(4種) | 総投稿数・感情スコア・ポジティブ率・エンゲージ |
| 可視化 | 時系列推移/プラットフォーム別構成/感情の内訳/頻出キーワード/上位投稿者/時間帯ヒートマップ/地域分布マップ |
| 操作系 | 複数キーワードの比較/検索履歴/CSV書き出し/印刷対応/レスポンシブ(モバイル・タブレット・デスクトップ) |
「ある自治体の名前」で叩けば、その街がSNS上でどう語られているかが一望できる。施策の反響、苦情の兆し、話題のピーク——勘ではなくデータで掴める。しかも構造は汎用で、キーワードを変えれば他の自治体にもそのまま横展開できる。一件のために作り込むのではなく、資産として再利用できる形で残す。これも、人月の「使い捨て」とは違う作り方だ。
02出発点は、モック1枚だった
出発点として手元にあったのは、ノーコードツールで作られたイメージ用のモックURLが1つ。そこにある「やりたいこと」を、まず本番に必要な要件へ翻訳するところから始めた。司令塔が、設計仕様を一気通貫で固める。
DESIGN.md(ダーク+緑のモダンUI・配色トークン・参考プロダクト)SPEC.md/TASKS.md/ 初期指示書(フェーズ分解)
ここで効くのが、「言語化が、そのまま設計図になる」という進め方だ。何を作るかを曖昧なまま手を動かすのではなく、画面・データ・フェーズを先に言葉で確定する。モックは「気分」を伝えるが、仕様は「合意」をつくる。出発点の解像度が、その後のスピードを決めた。
03司令塔とつくり手を分け、さらに並走させる
CAGの開発は、考える主体(司令塔)と手を動かす主体(つくり手)を分ける。今回はさらに、UIデザインと環境構築を"並走"させて時間を圧縮した。
- レーンA:デザインAIで画面のビジュアルを生成。
- レーンB:つくり手が、リポジトリ・フレームワーク・DB・デプロイ基盤の土台(Phase 0)を同時に立ち上げる。
- デザインが固まったらハンドオフで合流し、土台の上に実装を載せる。
直列なら「デザイン待ち→実装開始」で半日が溶ける。並走なら、待ち時間がほぼゼロになる。AIを一台で抱え込むのではなく、役割で束ねてチームとして動かす——これがCAGのAI駆動開発の芯だ。
そしてもう一つ、今回はっきりした役割分担の鉄則がある。実装の細部——SDKの暗黙仕様、認証ミドルウェアの挙動、テンプレ変数の展開——は、司令塔が"動くはず"で推測してはいけない。そこはつくり手が実コードを読んで確定する領域だ。司令塔は設計・分解・検証に徹し、コードを読まないと分からない部分はつくり手へ一本化する。役割の境界を引くほど、引き継ぎは曖昧な口頭でなく構造化された指示になり、手戻りが消える。
047画面とチャート7種を、外部依存ゼロで
実装フェーズで効いたのは、「足し算を最小にする」判断だ。グラフ描画ライブラリも地図ライブラリも入れず、スパークライン・面グラフ・ドーナツ・円・折れ線・ヒートマップ・地図の7種を、すべて手書きのSVGで描いた。
狙いは二つ。ひとつはバンドルを軽く保ち、表示を速くすること。グラフや地図のライブラリは便利だが重く、初回表示を遅らせる。入れない判断は、そのまま体感速度になる。もうひとつは、Phase 2で本格的な可視化に差し替える余地を残すこと——いまは軽い自作で十分、必要になったら差し替える、という順番だ。
ここでもブランド規約は徹底した。絵文字アイコンは使わず、英大文字の機械的なラベルは日本語に("LIVE"→「速報」)、純黒・純白のベタは避け、角丸は意味で使い分ける。速いだけでなく、最初から"作品"として整っている。"とりあえず動く"と"納品できる"のあいだにある距離を、最初の一日で詰めておく。
05「動かない時も、動く」よう設計する
チーム開発とPreview駆動には、ひとつの現実がある——外部サービス(DBや認証)が、まだ使えない時間帯がある。権限が下りていない、キーが揃っていない。そこで止まらないよう、最初から逃げ道を設計に組み込んだ。
- 未設定フォールバック3層:DBのキーが無くても、画面はモックデータで200を返して動く。Preview URLが常に"見られる"状態を保つ。
- モック⇄本番のトグル:外部APIを本番で叩く前に、フロントを完成形で確認できる(
USE_APIFY_MOCK)。 - 24時間キャッシュ+定時再取得:DBスケジューラで期限切れだけを毎時更新し、外部APIの実費を運用で吸収する。
ただし、逃げ道が本物のエラーを隠してはいけない。レビューで「フォールバックが500の本当の失敗まで握りつぶす」点を見つけ、フォールバックは401(未認証)だけに絞った。安全に倒すことと、失敗を見えなくすることは別だ。この一線を引けるかどうかが、"動くデモ"と"本番で使える道具"を分ける。
06外部連携の罠を、設計で殺す
本番DBと認証をつなぐ最終盤で、立て続けに壁が出た。だがどれも"力技"ではなく"設計"で抜けた。
- 秘密情報をDB設定に埋めない。 当初は鍵をDBの設定値に入れようとしたが、これは資格情報の漏えい経路になりかねない。自動化の安全機構がこれを自主的に拒否し、暗号化された金庫(Vault)に保管して参照する方式へ切り替えた。「便利だが危ない」を、仕組みが止めてくれる。
- 権限の壁は、正規の関数で越える。 マネージドDBでは直接の設定変更や行削除が拒否される。スケジューラの削除は専用関数(
cron.unschedule)経由に。横着せず、用意された作法に乗る。 - 認証の"沈黙の失敗"を、実コードで根治。 パスワード再設定が通らない事故では、推測で当てにいくのをやめ、実装を読みにいった。原因は3つの複合バグ——SDKがトークン形式を自動処理しない/認証済みだと再設定ページから追い出される/保険の導線が無い。3つを同時に塞いで、一発で通した。
外部SaaSの「動くはず」は、たいてい動かない。推測でピンポンするより、実コードを読みにいくほうが速い。
07何日でできたか——人月では、届かない速度
ここまでを、もう一度時間で見てみる。設計ヒアリング、UI生成、土台構築、7画面実装、認証、外部連携、本番疎通——これらを実働1日・8コミットで、ログインから検索、4SNS取得、ダッシュボード表示までの一連が動く状態にした[3]。アクセシビリティ(WCAG 2.1 AA[1])も、運用コストを吸収するキャッシュ設計[2]も入っている。
「1日」と言っても魔法ではない。中身は、土台構築 → UI移植(7画面)→ 認証とデータ取得基盤 → 仕上げ(アクセシビリティ・レスポンシブ)→ UX磨き → 本番DB接続 → 認証フロー根治、という段階を踏んだ8つのコミットだ。一足飛びではなく、各段で動く状態を確かめながら積み上げている。
同じものを従来の人月で積めば、要件定義・設計・実装・テストで軽く数週間〜数ヶ月のレンジに入る。差を生んだのは才能ではない。「人数 × 時間」で価値を測るのをやめ、AIに時間を圧縮させ、人は判断に集中した——それだけだ。
08速さは、誠実さと両立する
誤解しないでほしい。これは「人力は無価値だ」という話ではない。手を動かして試行錯誤する時間にはちゃんと価値があるし、私たちも要所では必ず人間が判断を握る(HITL)。変わったのは"単位"だ。時間を売るのをやめ、AIで時間を圧縮し、人は評価・設計・検証という、人間にしかできない判断に集中する。
だからこそ、速くても雑にならない。逃げ道は用意するが本物のエラーは隠さない。秘密情報は仕組みで守る。レビューで自分の穴を潰す。——速さと、透明さと、品質は、同時に成り立つ。
仕上げの誠実さもここに含まれる。開発の過程で残った私たち側のメモや内部のやり取りは、リポジトリを引き継ぐ前に丁寧に取り除いた。納品物だけを、きれいな状態で渡す。速く作ることと、丁寧に手放すことは、矛盾しない。冒頭で触れた「見極める目」も同じだ——AIの出力を鵜呑みにせず人が検証するのと、"数ヶ月かかるはず"という常識を鵜呑みにせず実物で確かめるのは、まったく同じ姿勢の表と裏でしかない。それを、言葉ではなく動くもので示したかった。次にあなたが「これ、作るのに何ヶ月かかるんだろう」と思ったもの。まず、言葉にしてみてほしい。
数ヶ月の人力 vs 1日のAI駆動。同じ成果物を、どう作るか——要点を一枚に。
| 観点 | 従来(人力・人月) | 電脳技巧集団(AI職人ギルド) |
|---|---|---|
| 所要 | 数週間〜数ヶ月 | 実働1日(8コミット) |
| 成果物 | 工数都合で"集めて並べる"段階に留まりやすい | ログイン付き・4SNS横断の本番分析ダッシュボード |
| 品質 | 作り手の経験に依存 | WCAG 2.1 AA・レスポンシブ・規約準拠を標準装備 |
| 外部依存 | ライブラリ追加でバンドル肥大 | チャート7種を手書きSVG・追加ライブラリ0 |
| 運用 | 都度コストが読めない | 24hキャッシュ+定時再取得で実費を吸収 |
| 横展開 | 個別作り込み | キーワード差し替えで他案件にも汎用 |
※ 「実働1日・8コミット」は本事例の自社開発記録。「数週間〜数ヶ月」は同等の成果物を従来の人月で積んだ場合の一般的な目安。依頼者・自治体・組織名は匿名化している。
出典・脚注
- WCAG 2.1 AA=W3C「Web Content Accessibility Guidelines 2.1」レベルAA。本事例ではコントラスト比・キーボード操作・
prefers-reduced-motion・スキップリンク等を実装。w3.org/TR/WCAG21/ - 4SNS(X / Instagram / Facebook / Threads)のデータ取得は外部スクレイピング基盤を利用。1,000件あたり最大十数ドル規模の従量課金を、24時間キャッシュ+定時再取得で吸収する設計(Actor構成・単価は選定時点の自社概算)。
- 「実働1日・8コミット」は本事例の自社開発記録、「数週間〜数ヶ月」は同等の成果物を従来の人月で見積もった場合の一般的なレンジ。特定顧客・自治体・組織は匿名化したケーススタディであり、固有名・社内識別子・シークレットは伏せている。









