ドキュメント=プロダクト化 — docs が公開ブログ・API・自動デプロイを担う設計
「docs はおまけ」という時代の終わり
ほとんどのリポジトリで docs/ は後回しだ。コードが完成してから「README書かないと」となる。
でも、docs/ の設計を最初から考えると、ドキュメントそのものがプロダクトになる。
このブログ(furoku/furoku)はその実例だ。docs/ ディレクトリひとつが:
- ✅ 公開ブログ(Jekyll + GitHub Pages)
- ✅ 記事データ API(
/api/articles.json) - ✅ AI向け情報ファイル(
llm.txt、mcp.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.txt、mcp.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との共同運用が自然にフィットする。