TDMO

AIネイティブな個人サイトの作り方 — TDMOの技術構成

結論: これからの個人サイトは「AIが読み書きしやすい、素のテキストファイルの集まり」であるべきだ。このサイトTDMOはその実践であり、CMSもビルドツールも使わず、更新はすべてAIとの対話で行われる。この記事では、その技術構成をすべて公開する。

全体アーキテクチャ

構成は3層だけ。原本はGitHubのプライベートリポジトリ、配信はCloudflare Workers(静的アセット)、編集はAI。人間はAIに日本語で指示を出すだけで、コミットからデプロイまで自動で進む。

人間の指示(日本語)
   ↓
AI が HTML/CSS を直接編集・コミット
   ↓ git push
GitHub(プライベートリポジトリ = 原本・全履歴)
   ↓ 自動ビルド(Workers Builds)
Cloudflare Workers 静的アセット配信(tdmo.org)

なぜCMSでもSSGでもないのか

WordPressのようなCMSは、人間が管理画面から更新するには便利だが、AI運用では逆に足かせになる。コンテンツがデータベースの中に隠れてAIから直接見えず、プラグイン更新やセキュリティ対応という保守コストが永遠に続くからだ。

では静的サイトジェネレータ(SSG)はどうか。MarkdownとテンプレートをHTMLに変換する仕組みは一見AI向きだが、Node.jsやテーマといった依存が生まれ、数年後に「ビルドが通らない」リスクを抱える。AIはテンプレート言語を介さなくてもHTMLを直接正確に書けるので、変換層そのものが不要になった。

残るのは素のHTML/CSSだ。依存ゼロなので10年後もそのまま動き、リポジトリの中身がそのまま公開物になる。壊れる工程が存在しない。

リポジトリ構成

/
├── CLAUDE.md          # AI向け運用マニュアル(このサイトの心臓部)
├── index.html         # トップページ
├── style.css          # 唯一のCSS(ダークモード自動対応)
├── wrangler.jsonc     # Cloudflare Workers 設定
├── llms.txt           # AI向けサイト目次
├── robots.txt / sitemap.xml / feed.xml
├── parts/             # ヘッダー・フッターの正本
├── tools/sync_parts.py # パーツを全ページへ焼き込む同期スクリプト
├── blog/              # 記事(YYYY/slug.html)
├── lab/               # 実験場
└── kids/              # こどもエリア(自己完結・サブドメイン移行可能)

核心は CLAUDE.md だ。記事追加の手順、命名規則、SEOルールといった「AIへの指示書」がサイト本体と同じリポジトリでバージョン管理されている。どのAIに頼んでも同じ品質で運用できるのは、この指示書があるからだ。

パーツの使い回し — ビルドなしのコンポーネント化

素のHTMLにはインクルード機能がない。JavaScriptで動的に読み込む方法もあるが、JSを実行しないAIクローラーからはヘッダーが見えなくなるため採用しなかった。代わりに、parts/ に置いた正本を tools/sync_parts.py が各ページのマーカー区間に焼き込む方式にしている。

<!-- @part:header -->
(ここにparts/header.htmlの内容が同期される)
<!-- @/part:header -->

編集は1箇所、配信されるのは完全な静的HTML。ナビゲーションの現在地表示(aria-current)もスクリプトがページの場所から自動で付与する。ビルドではなく「同期」なので、実行しなくてもサイトは壊れず表示される。

検索エンジンとAIの両方に読まれるために

従来のSEOに加えて、生成AIに正しく引用されるための施策(GEO/LLMO)を最初から組み込んでいる。

構造化データ: 全ページにJSON-LDを埋め込み、トップはWebSite+Person、記事はBlogPostingとして著者・日付・言語をマシンリーダブルにしている。

llms.txt: サイトの定義文と全ページ・全記事の要約付き目次を /llms.txt に置き、LLMが短時間でサイト全体を把握できるようにした。記事を追加するたびにAIがこのファイルも同期する。

robots.txt: GPTBot、ClaudeBot、PerplexityBotなど主要AIクローラーを明示的に許可。Cloudflare側のAI Crawl Controlでもブロックしていない。

文章構造: すべての記事は冒頭に結論を1〜2文で書くルールにしている。AIは記事の冒頭を引用しやすいためだ。

運用コスト

GitHubは無料枠(プライベートリポジトリ無制限)、Cloudflareも無料枠(帯域無制限・月500デプロイ)に収まるため、ランニングコストはドメイン代の年間数千円だけ。アクセスが急増しても課金は発生しない。

まとめ

AIネイティブなサイトの条件は、突き詰めれば3つだと考えている。すべてがテキストファイルであること。履歴がGitにあること。運用ルールがリポジトリ内に書かれていること。この3つを満たせば、サイトはAIにとって「読める・書ける・壊さない」対象になる。TDMOはこの構成の実験場として、これからも運用の記録を公開していく。

← 記事一覧へ