Shuichiro Ogawa
English

アーキテクチャ

AI システムとデザインシステムを、一人で設計して運用する。

このサイトは、コンテンツを作る AI エージェント群、Web を配信するシステム、見た目を決めるデザインシステムの 3 つを、一人で設計して運用している実例です。

設計の判断はコードとノートに残し、検査は編集のたびに自動で走らせています。何を決め、なぜそうし、どう確かめているかを、数字とともに公開します。

全体像

  1. 01

    AI エージェント群

    Claude Code の 9 体のサブエージェントが収集と討議を担い、親セッションがその結果をノートとして書いて公開する。成果は LLM Wiki(LLM が一次ソースから書き、相互リンクで保守する知識ベース)に蓄積し、週次と月次の定点観測は自動で回る。

  2. 02

    配信システム

    Astro で静的生成し、Cloudflare Workers の単一の Worker で配信する。同じランタイムの Workers AI が「ノートに聞く」チャットを動かす。無料枠内で運用。

  3. 03

    デザインシステム

    DESIGN.md を正本に、色と字と余白をトークン 3 層で実装する。編集のたびにコントラストと整合を機械検査し、仕上げにレビューエージェントが定性検査する。

番号の順に、エージェントが書いたノートを配信システムが公開し、その見た目をデザインシステムが決める。3 つを結ぶ 4 つの接続点はページ末尾に示す。

サブエージェント
9 体
公開ノート
JA 155 件、EN 152 件
hook(自動検査)
6 本
コントラスト検査
7 組 × 2 テーマ
運用コスト
無料枠内

この構成で担当できること

4 点のうち、クラウド構成と生成 AI の組み込みは案件にも実績がある。デザインシステムの自動検査とエージェント群の統制は、このサイトが最初の実例である。

  • AI を使うシステムの設計

    モデルの使い分け、エージェントの役割分担、書き込みの規律、安全策の設計。生成 AI を業務に入れるときの構成と統制を、動く形で組める。

    根拠: 領域 01 、生成 AI の案件

  • 配信と運用の基盤

    クラウド(Cloudflare Workers)上の構成、CI/CD(コードを変えるたびに自動で検査して公開する仕組み)、コストの上限を決めた運用。小さく確実に公開し続ける基盤を設計できる。

    根拠: 領域 02 、クラウド構成の案件

  • デザインシステムの構築と自動検査

    正本、トークン、コンポーネントの 3 層と、編集のたびに走る機械検査とレビュー。デザインの判断を検証可能な形にできる。

    根拠: 領域 03 、デザインシステムのノート

  • 両者をつなぐ設計

    デザインの検査を開発フローに組み込み、ナレッジを公開ページとチャットの両方に流す。デザインとシステムの境目の判断を、一人で持てる。

    根拠: 接続点 、ノートに聞く

領域 01

AI エージェント群

研究と調査の成果をノートとして積み上げる仕組み。人が計画と検収を担い、実作業はサブエージェントに委ねる。

決めたこと
  • 依頼はスキル(手順書)で受け、実作業は 9 体のサブエージェントに委ね、ファイルに書くのは親セッションだけにする
  • 討議は Claude の Opus、収集と検査は軽い Sonnet に割り当て、最大の Fable は都度の指定にとどめる
  • 成果は LLM Wiki の 3 層(一次ソース、wiki、スキーマ)に蓄積し、公開ノートは末尾に参照文献を必ず載せる
なぜ
論証の深さとトークンのコストは両立しない。役割ごとにモデルを分け、出典を台帳で追跡できる形にすると、討議の結論を後から検証できる。
どう確かめるか
  • hook(ツール実行の前後に走る検査)が、不変領域への書込、シークレットの読み書き、指定漏れの起動をブロックする
  • wiki の健全性検査(7 種)が 0 件になるまで、Stop hook がセッションの終了を止める
  • 討議は一巡で終え、根拠は事前に固定し、エージェント別の消費を討議録に残す

依頼の流れ

「論文を集めて」という依頼が完了するまでの手順。

  1. 「論文を集めて」と依頼する
  2. source-collection スキルが受け、mode: academic で進める
  3. 親セッションが prompt の 1 行目に dispatch header を書き、サブエージェントを起動する(欠けていれば hook が止める)
  4. source-researcher(profile: scholarly)が候補を集め、paper-screening-agent が包含基準で選別する
  5. ノートを書く前に、source-researcher を検証モードで起動し、主要な主張を支える書誌、数値、引用の未確認を解消する
  6. 親セッションが source/review にコーパス、wiki/note にノートと英語版を書く
  7. 編集のたびに PostToolUse hook が検査し、終了時に Stop hook が wiki:lint を走らせる
  8. 索引と更新記録を更新し、違反 0 件で完了(G1)
詳細(スキル、エージェント、フック)

スキル

スキルは依頼の型ごとの手順書で、依頼の言い方で起動し、必須入力で分岐する。

スキル依頼の型必須入力呼ぶエージェント
source-collection論文、AI 動向、業界情報の収集mode(academic、ai-frontier、industry)source-researcher ほか
critical-reviewノートの批判的検討lens(design-theory、pedagogy、industry-career)academic-critic
industry-perspective産業ペルソナでの役割論persona(design-firm、strategy-consulting、independent-office)practice-auditor、industry-lead
designer-role-roundtable産学合同討議問い、対象ノート、年範囲討議系の 4 体
wiki-ingest素材の wiki 取り込み素材と対象ページなし
wiki-lintwiki の健全性検査なしなし
doc-writedocs の手順書保存先、検証済みの事実doc-writer
ui-design-implementationUI の制作と改修対象ページdesign-reviewer
design-system-checkデザインの検証なしdesign-reviewer

エージェント

エージェントは読み取り専用で結果を返し、書くのは親セッションにする。役割は prompt の 1 行目の dispatch header で切り替える。

エージェント系統モデルdispatch header
industry-lead討議Opuspersona(design-firm、strategy-consulting、independent-office)
practice-auditor討議Opuslens(revenue-viability、differentiator-reality、evidence-methodology、liability-provenance、demand-side)
disruption-provocateur討議Opusaxis(historical-disruption、global-arbitrage、platform-power、end-user-indifference)
academic-critic討議Opuscanon(design-theory、design-education、design-industry)
source-researcher収集Sonnetprofile(scholarly、vendor-primary、official、analyst、developer-voice、expert-commentary、labor-market)
paper-screening-agent収集Sonnetなし
docs-researcher収集Sonnetなし
design-reviewerレビューSonnetmode(system-health、ui-analysis)
doc-writer文書Sonnetなし(docs に書く)

フック

フックは Claude Code がツール実行やセッション終了の前後に走らせる検査で、操作を止めるものと、次の行動を促すものがある。

イベントフック何をする
PreToolUseguard-pathsraw/ への書込、シークレットの読み書き、未公開研究を含むノートの非公開指定(draft か so_theory)のない書込をブロック
PreToolUsedispatch-header-gateheader が無いか許容外の値の起動をブロック
PostToolUsedesign-system-gateCSS や画面の編集後に機械検査を実行し、結果を返す
PostToolUseclaude-assets-sync、readme-sync.claude や README に関わる編集後に、一覧と README の更新を促す
Stopstop-wiki-gatewiki/ に変更があれば wiki:lint を実行し、違反が残れば終了をブロック(G1)

領域 02

配信システム

ノートとチャットを、低コストで止まらずに届ける基盤。

決めたこと
  • Astro で静的生成し、Cloudflare の単一 Worker で配信する
  • 「ノートに聞く」チャットは同じ Worker の Workers AI で動かす(Llama 3.3 70B)
  • 無料枠の範囲で運用し、外部サービスへの接続は Workers AI の 1 つだけにする
なぜ
配信と API を同じランタイムに置くと、構成が 1 つの設定ファイルに収まり、ローカルと CI のどちらからも同じ手順で公開できる。
どう確かめるか
  • main への push と PR ごとに CI が wiki の健全性検査、型検査、ビルドを実行する
  • デプロイ設定は git 管理のコードで、公開は 1 コマンド
  • 公開ノートの外部リンクは週次で到達性を検査し、定点観測が 7 日を超えて空けば通知する
詳細(構成、ノートに聞く、自動の仕事)

構成

配信と API を 1 つの Worker に置き、設定は git 管理のコードで持つ。

部品役割なぜそれか
Astro 6静的生成の Web フレームワーク。既定で JS を出さないノート中心のサイトに静的生成が合い、Cloudflare アダプタで Worker にそのまま載る
Cloudflare Workers(Static Assets)ビルド済みの静的アセットを単一の Worker で配信し、/api/chat だけをサーバー側で動かす配信と API を同じランタイムに置け、無料枠(10 万リクエスト/日)で足りる
Workers AI「ノートに聞く」の生成モデル(Llama 3.3 70B)を動かす同じ Worker から binding 1 つで呼べ、無料枠(10,000 Neurons/日)で運用できる
wrangler名前、互換日付、ルート、AI binding を 1 つの設定ファイルに集約して公開するデプロイ構成を git に置き、ローカルと CI で同じ手順にする
Custom Domainapex ドメインを Worker に直接割り当てるDNS と証明書を Cloudflare が自動で作り、更新する
GitHub ActionsCI の検査と、自動ウォッチの後の公開を実行するPC の起動状態に左右されずに更新と公開を続ける
Tailwind CSS 4トークンを @theme で定義し、ユーティリティで組むトークンとクラス名が 1:1 で対応する
TypeScript 6astro check による型検査完了ゲート G3 と CI の検査に使う
mermaid 11ノート内の図をクライアントで描画する図のあるページだけ読み込み、失敗時はソースを見せる
p5.js 2 と CodeMirror 6トップのヒーロー用のスケッチとコード編集(現在は非表示)使うモジュールだけ動的に読み込む

ノートに聞く

チャットは検索と生成の 2 段で、外部の検索基盤は使わない。日本語の公開ノートだけが対象になる。

段階何をするどこで動く
取り込み日本語の公開ノートをビルド時にバンドルへ埋め込む。draft と秘匿ブロックは除くastro build
検索文字 bigram の一致に英数語と完全一致の加点で採点し、上位 4 件を選ぶ。依存ライブラリなしWorker の /api/chat
生成4 件の抜粋(各約 2,400 字)を system prompt に注入し、Llama 3.3 70B が答えるWorkers AI(無料枠 10,000 Neurons/日)

自動の仕事

定点観測と検査は GitHub Actions で回し、人の PC に依存しない。

仕事起動内容成果物
週次 AI 動向ウォッチ毎週月曜の朝source-collection(mode: ai-frontier)で直近 7 日の「AI とデザイン」の動向を、3 ティアの出典で集める週次ノート(日本語と英語版)と出典台帳。push と公開まで自動
月次学術ウォッチ毎月第 1 月曜、週次の前source-collection(mode: academic)で直近 1 か月の査読論文とプレプリントを集め、選別する月次ノート(日本語と英語版)とコーパス
欠落の検知週次ウォッチの前(発報は公開の後)前回の週次ノートから 7 日を超えていれば、公開を終えてからジョブを失敗させるGitHub の失敗通知
リンクの到達性週次ウォッチの前公開ノートの外部リンクを検査する。失敗しても続けるログ(差し替えは人が判断)
CI の検査main への push と PR のたびwiki の健全性検査、型検査、ビルド合否

領域 03

デザインシステム

見た目の判断を 1 か所に集め、実装と検査を対応させる仕組み。

決めたこと
  • DESIGN.md(Pinterest のデザイン分析)を正本にし、実装の値はすべてそこへ対応づける
  • 色、字、余白を 3 層のトークン(値の定義、意味づけ、部品)で実装する
  • 正本にない判断(ダークテーマ、hover、和文の書体)は、根拠をコードのコメントに残す
なぜ
正本と実装が 1:1 だと、見た目の判断を後から追跡できる。判断の根拠がコードに残ると、AI エージェントも同じ規律で編集できる。
どう確かめるか
  • CSS や画面を編集するたびに hook が機械検査を走らせる(両テーマで 7 組のコントラスト、トークンの整合、色の直書き)
  • 仕上げは design-reviewer エージェントが定性検査し、合否を返す
詳細(正本とトークン、テーマと型、検査)

正本とトークン

DESIGN.md(Pinterest のデザイン分析)が正本で、色と字と余白を 3 層のトークンで実装する。ページは semantic 層だけを参照し、primitive を直接使わない。

層役割例
primitiveDESIGN.md の色、書体、角丸の値をそのまま転記する。Tailwind の @theme に置く--color-primary #e60023、--color-surface-card、--radius-md 16px
semantic用途別の名前を付け、ライトとダークで値を切り替える単一の場所。:root と .dark に置く--background、--foreground、--muted-foreground、--link
component部品のクラスに semantic を束ねる。@layer components に置く.btn-primary、.tag、.link、.prose、.t-headline

テーマと型

正本にない判断(ダーク、和文、hover)はサイト拡張として足し、根拠をコードのコメントに残す。

項目決めたこと根拠
ライトとダークhtml の dark クラスで切り替え、保存が無ければ OS の設定に従う。床は surface-dark #262622、本文リンクは明るい赤に差し替えるDESIGN.md。ブランド赤は暗い床で 3.2:1 しか取れず、文字は 4.5:1(WCAG AA)を保つ
書体Inter Variable と Zen Kaku Gothic New をセルフホストし、コードだけ JetBrains Mono。階層は色でなくウェイトで作るPin Sans の代替指定(DESIGN.md)、階層はウェイト
和文の組み文節単位で折り返し、行頭に小書き仮名や長音を置かない。行間は欧文より広く 1.7OS 任せだと環境ごとに声が変わる。文節改行は Chrome の auto-phrase
色の使い方Pinterest Red は CTA、現在地、ワードマークにだけ使い、文字色には回さないDESIGN.md
形と影角丸は 16px と 32px の 2 値。影はカードに置かず、モーダルだけDESIGN.md
余白と幅8px 単位。最大幅 1280px、行長 60ch と 75ch。区切りは影でなく罫DESIGN.md

検査

検査は編集のたびに機械で走り、仕上げにエージェントが定性で見る。

検査対象いつ走るか
コントラスト文字 4 組が 4.5:1 以上、面と罫 3 組が 3:1 以上を、ライトとダークの両方でCSS、.astro、DESIGN.md の編集後に PostToolUse hook が実行する
トークンの整合主要な semantic トークン 5 つが :root に定義され、.dark で上書きされているか同じ hook
色のベタ書きsrc 以下の .astro にある hex、rgb、hsl、oklch の直書き同じ hook(警告として返す)
定性レビュー3 層が保たれているか、正本と実装が一致しているか、両テーマで読めるか、未定義のクラスがないかdesign-system-check スキルから design-reviewer(mode: system-health)が実行し、機械検査の exit 0 と「合格」がそろえば合格
UI 分析対象ページをタイポグラフィ、レイアウト、色、レスポンシブ、一貫性の 5 観点でui-design-implementation スキルから design-reviewer(mode: ui-analysis)が実行し、5 段階で評価

領域どうしはどこで結ばれているか

領域ごとに担当が分かれていると、境目で判断が落ちる。このサイトでは境目を 4 か所に絞り、それぞれを仕組みにした。

  • デザイン × AI

    デザインの検査が開発フローの中で走る

    CSS や画面を編集した瞬間に hook が機械検査を実行し、結果を編集中のエージェントに返す。デザインシステムの規律が、人の目を待たずに実装へ効く。

  • AI × 配信

    ノートが公開ページとチャットの両方に流れる

    エージェントが書いたノートは、ビルド時に公開ページになり、同時にチャットの検索コーパスになる。非公開の下書きと秘匿ブロックは、両方から同じ規則で除かれる。

  • 配信 × デザイン

    デザインの資産を配信物に同梱する

    和文と欧文の書体はセルフホストして Worker の静的アセットとして配信し、テーマの初期化は描画前のインラインスクリプトで行う。見た目が外部の CDN や後読みに依存しない。

  • デザイン × AI

    デザインの判断も wiki に記録する

    UX レビューやデザインシステムの検討は、会話で終えずノートとして残し、索引と更新記録に載せる。次のセッションのエージェントが同じ判断を繰り返さないための記録である。