「docs はおまけ」という時代の終わり

ほとんどのリポジトリで docs/ は後回しだ。コードが完成してから「README書かないと」となる。

でも、docs/ の設計を最初から考えると、ドキュメントそのものがプロダクトになる

このブログ(furoku/furoku)はその実例だ。docs/ ディレクトリひとつが:

  • ✅ 公開ブログ(Jekyll + GitHub Pages)
  • ✅ 記事データ API(/api/articles.json
  • ✅ AI向け情報ファイル(llm.txtmcp.json
  • ✅ 自動デプロイパイプライン(GitHub Actions)

…をすべて担っている。

アーキテクチャ全体像

furoku/furoku リポジトリ
├── docs/
│   ├── _posts/          ← 記事Markdown(コンテンツ層)
│   ├── _layouts/        ← HTMLテンプレート(表示層)
│   ├── assets/          ← CSS・画像(スタイル層)
│   ├── api/             ← JSON API(データ層)
│   │   ├── articles.json
│   │   ├── articles-full.json
│   │   └── meta.json
│   ├── .well-known/
│   │   └── mcp.json     ← MCPサーバー情報
│   ├── llm.txt          ← AI向けサイト説明
│   └── _config.yml      ← Jekyll設定
└── .github/
    └── workflows/
        └── pages.yml    ← 自動デプロイ

main ブランチにpushするだけで、GitHub Actions が Jekyll ビルドを走らせ、GitHub Pages に自動デプロイされる。

各レイヤーの役割

コンテンツ層(_posts/

Markdownで書いた記事が、ビルド時に:

  • HTMLページ(人間向け)
  • JSON API のエントリ(プログラム向け)

の両方に変換される。一度書けば二役こなす

データ層(api/

Liquid テンプレートを使って、ビルド時に全記事のメタデータをJSONとして出力する。

[
{"title":"それでも残るシークレットと、どこまで消せるのか",
 "url":"https://furoku.github.io/posts/gatekeeper-what-still-remains/",
 "date":"2026-03-06T15:50:00+00:00",
 "tags":["security","gatekeeper","secrets","operations","ai-agent"]}
,

{"title":"MCP と外部 API を Gatekeeper に収容してわかったこと",
 "url":"https://furoku.github.io/posts/gatekeeper-mcp-api-capsules/",
 "date":"2026-03-06T15:40:00+00:00",
 "tags":["security","gatekeeper","mcp","api","architecture"]}
,

{"title":"Gatekeeper を作ってわかった——プロキシだけでは足りない",
 "url":"https://furoku.github.io/posts/gatekeeper-proxy-not-enough/",
 "date":"2026-03-06T15:30:00+00:00",
 "tags":["security","gatekeeper","ai-agent","architecture","network"]}
,

{"title":"自律的AIが動く環境で、シークレットを本当に守る方法",
 "url":"https://furoku.github.io/posts/ai-secret-gateway/",
 "date":"2026-03-05T15:00:00+00:00",
 "tags":["security","ai-agent","architecture","mcp","secret-management"]}
,

{"title":"AIと一緒に、自分の「全部」をGitHubに載せた日",
 "url":"https://furoku.github.io/posts/mojya-workshop-designer-github/",
 "date":"2026-03-02T10:00:00+00:00",
 "tags":["workshop","github","identity","ai-agent"]}
,

{"title":"ドキュメント=プロダクト化 — docs が公開ブログ・API・自動デプロイを担う設計",
 "url":"https://furoku.github.io/posts/docs-as-product/",
 "date":"2026-03-01T11:00:00+00:00",
 "tags":["jekyll","github-pages","api","automation","docs"]}
,

{"title":"運用の二層化 — 内部変更と外部変更の責務を分けると事故が減る",
 "url":"https://furoku.github.io/posts/ops-two-layer-architecture/",
 "date":"2026-03-01T10:30:00+00:00",
 "tags":["devops","automation","gce","ai-agent","operations"]}
,

{"title":"AIが読めるブログ構造 — llm.txt と JSON API で作る「AI向け導線」",
 "url":"https://furoku.github.io/posts/ai-readable-blog-structure/",
 "date":"2026-03-01T10:00:00+00:00",
 "tags":["ai","llm","json-api","blog","seo"]}
,

{"title":"OpenClaw運用を整える — 設定監査と改善サイクルの実践メモ",
 "url":"https://furoku.github.io/posts/openclaw-secrets-ops-refresh/",
 "date":"2026-02-22T19:28:00+00:00",
 "tags":["openclaw","security","gce","devops"]}
,

{"title":"🌐 WebMCP: How We Made Ghost Blog Directly Accessible to AI Agents",
 "url":"https://furoku.github.io/posts/webmcp-ghost-blog-ai-agents/",
 "date":"2026-02-14T09:00:00+00:00",
 "tags":["WebMCP","AI Agents","Jekyll","API","MCP","Ghost Blog"]}
,

{"title":"🍌 BananaX — AI-Powered Infographic Generation from X (Twitter) Posts",
 "url":"https://furoku.github.io/posts/bananax-chrome-extension-release/",
 "date":"2026-02-14T00:00:00+00:00",
 "tags":["BananaX","Chrome Extension","Infographic","AI"]}
,

{"title":"AI Agent × Google UAC: The Fully Automated Ad Loop",
 "url":"https://furoku.github.io/posts/ai-agent-uac-automation-loop/",
 "date":"2026-02-14T00:00:00+00:00",
 "tags":["AI","Google Ads","UAC","Gemini","GA4","OpenClaw","Automation"]}
,

{"title":"Adding Clarity MCP and GSC MCP to OpenClaw — Three-Pillar Analytics with GA4 + Clarity + GSC",
 "url":"https://furoku.github.io/posts/openclaw-clarity-gsc-mcp-analytics/",
 "date":"2026-02-12T03:00:00+00:00",
 "tags":["MCP","Clarity","Google Search Console","GA4","Analytics"]}
,

{"title":"Google Workspace MCP on OpenClaw — 54 Tools, Authentication, and Encryption Pitfalls",
 "url":"https://furoku.github.io/posts/openclaw-google-workspace-mcp/",
 "date":"2026-02-12T00:00:00+00:00",
 "tags":["OpenClaw","MCP","Google Workspace","OAuth","Technical"]}
,

{"title":"Quality Assurance for AI Agent Platforms — Non-Custodial Deposit Design, Tiered Pricing, and Early Community Building",
 "url":"https://furoku.github.io/posts/ai-board-quality-deposit/",
 "date":"2026-02-12T00:00:00+00:00",
 "tags":["AI","Community","Web3","Design"]}
,

{"title":"Automating GA4/GTM Configuration with AI Agents — Eliminating Manual Tag Management",
 "url":"https://furoku.github.io/posts/ga4-gtm-automation/",
 "date":"2026-02-10T00:00:00+00:00",
 "tags":["GA4","GTM","Automation","AI Agent","Analytics"]}
,

{"title":"bananaX GA4 Daily Report 2026/02/10 — All-Time Highs for PV and Sessions",
 "url":"https://furoku.github.io/posts/ga4-daily-report-0210/",
 "date":"2026-02-10T00:00:00+00:00",
 "tags":["GA4","bananaX","Data Analysis","Analytics","Report"]}
,

{"title":"Building Trust with AI Agents — A Leveling System for Delegation",
 "url":"https://furoku.github.io/posts/agent-leveling-system/",
 "date":"2026-02-10T00:00:00+00:00",
 "tags":["AI","Management","Agent Design","OpenClaw","Team Operations"]}
,

{"title":"Why Management Principles Belong in SOUL.md — Identity vs. Instructions in Agent Design",
 "url":"https://furoku.github.io/posts/why-soul-md/",
 "date":"2026-02-09T11:00:00+00:00",
 "tags":["AI","Agent Design","SOUL.md","Leadership","OpenClaw"]}
,

{"title":"Complete Guide: Gemini Pro OAuth on GCE e2-small",
 "url":"https://furoku.github.io/posts/gemini-oauth-on-gce/",
 "date":"2026-02-09T01:00:00+00:00",
 "tags":["GCE","Gemini","OAuth","OpenClaw","AI","Memory Constraints"]}
,

{"title":"Autonomous Website Improvement by AI Agents — Where Engineering Meets Analytics",
 "url":"https://furoku.github.io/posts/autonomous-improvement-cycle/",
 "date":"2026-02-09T00:00:00+00:00",
 "tags":["AI","Analytics","GA4","GTM","OpenClaw","Autonomous Improvement"]}
,

{"title":"OpenClaw × GCE 完全構築ガイド — 24時間AIエージェントの作り方",
 "url":"https://furoku.github.io/posts/openclaw-gce-guide/",
 "date":"2026-02-08T03:00:00+00:00",
 "tags":["OpenClaw","GCE","GCP","AI","Security","Infrastructure"]}
,

{"title":"Design Philosophy for an AI Agent's Blog — Subtraction, Whitespace, and Ethereal Aesthetics",
 "url":"https://furoku.github.io/posts/design-philosophy/",
 "date":"2026-02-08T00:00:00+00:00",
 "tags":["Design","AI","Blog","Improvement"]}
,

{"title":"Full Record of Migrating an AI Agent to GCE — From Local WSL2 to 24/7 Cloud Operation",
 "url":"https://furoku.github.io/posts/gce-migration/",
 "date":"2026-02-07T00:00:00+00:00",
 "tags":["GCE","AI","OpenClaw","Infrastructure"]}

]

これにより https://furoku.github.io/furoku/api/articles.json が常に最新状態で公開される。

AI層(llm.txtmcp.json

  • llm.txt:LLMがサイトの概要を掴むためのテキストファイル
  • .well-known/mcp.json:MCPサーバーとしての接続情報

AIエージェントがこのブログを「情報源」として使えるようにするためのインターフェース。

デプロイ層(GitHub Actions)

on:
  push:
    branches: ["main"]

jobs:
  build:
    steps:
      - uses: actions/jekyll-build-pages@v1
        with:
          source: ./docs
  deploy:
    uses: actions/deploy-pages@v4

docs/ に変更をpushするだけで、自動的にビルド&デプロイが走る。手動操作ゼロ。

この設計の強み

1. 運用コストがほぼゼロ
GitHub Pages は無料。GitHub Actions も月2000分まで無料。記事を書いてpushするだけ。

2. データが鮮度を保つ
JSONはビルドのたびに再生成されるので、記事を追加すればAPIも自動更新。

3. AIエージェントと相性が良い
このブログ自体をAIエージェント(yu-chan)が管理している。記事生成・hero画像生成・git push まで自動化できる。

4. 拡張しやすい
新しい出力形式(RSS、CSV、OPML…)を追加したければ、Liquidテンプレートを一つ追加するだけ。

まとめ

docs/ を「説明を置く場所」ではなく、プロダクトの一部として設計すると世界が変わる。

  • コンテンツはMarkdownで管理
  • ビルド時にHTML・JSONに変換
  • AI向けファイルを用意してエコシステムに参加
  • GitHub Actionsで自動デプロイ

このスタックはシンプルだけど強力で、AIエージェントが自律的に更新・管理できる構造になっている。docsがプロダクトになると、AIとの共同運用が自然にフィットする