Appearance
Wiki 運用ガイド
XIA Wiki は 編集者AI(Claude Code + Notion MCP) が Notion の作業記録を取り込み、 全体を俯瞰しながら配置・統合・補完してくれる仕組みで運用されています。
このページは 手動で更新したい人向けの操作手順 と、 運用方針の背景 をまとめたものです。
なぜ「機械的同期」ではないのか
トップページの謳い文句は 「Notion・Slack・ドキュメント等あらゆるソースからナレッジを収集し、AIが分類・整形・統合」。 さらに記事には3段階のバッジがあります:
| バッジ | 意味 |
|---|---|
| 🟢 再構成済み | 複数ソースを統合して構造を作り直し |
| 🔵 記事補完 | AI が説明や流れを補って読みやすく |
| ⚫ ジャンル分け | カテゴリに振り分けただけ |
機械的な「Notion ページ → Markdown 変換」では 「再構成」「補完」が原理的に作れません。 それは「wiki 全体を読んでいるエージェント」にしか書けない判断だからです。
そのため、編集役を以下の Claude Code スキルに任せています:
.claude/skills/wiki-sync/SKILL.md
動作モード
差分モード(日常運用)
引数なしで起動すると、.wiki-sync.json の last_sync 以降に 編集された Notion ページを自動検出して取り込みます。
/wiki-sync単一ページモード
特定の Notion ページだけ取り込みたいとき:
/wiki-sync page <notion-id-or-url>一括モード(初回 / 大規模再構成)
カテゴリ単位で大量に取り込み・再構成。重いので確認プロンプト付き:
/wiki-sync bulk lkg編集者AI の判断ツリー(簡易版)
あるNotionページが取り込み対象になったら…
1. 既に .wiki-sync.json に notion_hash がある?
├─ Yes → 更新モード(既存記事を編集)
└─ No → 新規モード
↓
2. ページの主題から、wiki 11カテゴリのどれが一次配置か決める
↓
3. 既存の近接記事を grep で探して関連性を確認
↓
4. どの形で取り込むか決める:
├─ 単独記事として作成 (single)
├─ 既存記事に追記・統合 (merge)
└─ 別カテゴリ index にもクロスリンク (cross)
↓
5. ai_treatment を決める:
├─ "categorized" → 分類だけ
├─ "enhanced" → 内容を補完・整形
└─ "restructured" → 統合・大幅な構造変更必ず更新される箇所
新記事 1 件追加で、以下が連動して書き換わります(編集者AIが自動で揃える):
docs/<category>/<slug>.md— 記事本体- 画像があれば R2 へアップロード —
node scripts/_convert_to_webp.mjs && node scripts/_upload_to_r2.mjs docs/<category>/index.md— カテゴリ索引のテーブルに行追加docs/by-author/<author>.md— 著者索引(件数 + 行)docs/index.md— トップの該当カードの件数docs/index.mdの「🆕 最近の更新」セクション — 上位3件を維持.wiki-sync.json— sync state にエントリ追加- (横断ネタなら)関連カテゴリの index にクロスリンクセクション追加
漏れがないか、各 index.md の件数と実際の *.md 数を照合する自己検査が skill に組み込まれています。
自動化(cron トリガー)
手動運用が安定したら、以下のいずれかで定期実行できます:
A. Windows タスクスケジューラ(ローカル PC)
cmd
:: 毎日 9:00 に差分同期
schtasks /create /tn "XIA Wiki Sync" /tr "claude -p \"/wiki-sync\" --cwd C:\wiki\sagyoukiroku" /sc daily /st 09:00⚠️ PC が起きていないと走らないので、業務時間中の更新が前提。
B. GitHub Actions の cron(クラウド常駐)
.github/workflows/wiki-sync.yml を作って claude CLI を叩く構成。 24/7 動くが、Anthropic API キー消費量が予測しにくいので注意。
yaml
on:
schedule:
- cron: '0 0 * * 1-5' # 平日 09:00 JST現状は GitHub Actions 化未実装。手動運用 → ローカル cron → クラウド cron の順で段階的に検証する想定。
Notion MCP の能力(参考)
| やりたいこと | MCP ツール |
|---|---|
| 最近編集されたページの検索 | notion-search(filter: created_date_range、結果の timestamp に最終編集が入る) |
| 単一ページ取得 | notion-fetch(本文 + last_edited_time + ancestor-path で著者特定可能) |
| データソース全列挙 | notion-fetch で DB を取り、<data-source> URL から子ページを辿る |
| ユーザー検索 | notion-search の query_type=user |
制約:
- search に
edited_date_rangeフィルタはない → 編集のみ更新されたページは作成日が古いと拾えない - 対策:
.wiki-sync.jsonの各エントリを定期的に再 fetch してlast_edited_timeを比較
トラブルシューティング
| 症状 | 原因 / 対処 |
|---|---|
デプロイで Invalid commit message ... UTF-8 | wrangler が git log を Cloudflare に送る際の問題。deploy.yml で --commit-message を明示指定済み |
| ビルドエラー(VitePress) | frontmatter の YAML 不正が大半。該当 .md の先頭を見て --- ブロックの構文を確認 |
| sync state とディレクトリがズレた | python scripts/_bootstrap_sync_state.py で再生成(既存 .md の notion_hash から構築) |
| 件数表記が実件数とズレた | find docs/<cat> -maxdepth 1 -name "*.md" ! -name index.md | wc -l で実数を確認、トップ・index を修正 |
| 画像が表示されない(404) | R2 公開 URL https://pub-f9579d7149ac4fdabfd3ecc9d9c85239.r2.dev/... を直接ブラウザで叩いて確認。アップロード漏れなら _upload_to_r2.mjs を再実行 |
| R2 認証情報がない | Cloudflare Dashboard → R2 → Manage R2 API Tokens → Create API token (Object Read & Write) で再発行 |