Skip to content

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.jsonlast_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が自動で揃える):

  1. docs/<category>/<slug>.md — 記事本体
  2. 画像があれば R2 へアップロードnode scripts/_convert_to_webp.mjs && node scripts/_upload_to_r2.mjs
  3. docs/<category>/index.md — カテゴリ索引のテーブルに行追加
  4. docs/by-author/<author>.md — 著者索引(件数 + 行)
  5. docs/index.md — トップの該当カードの件数
  6. docs/index.md の「🆕 最近の更新」セクション — 上位3件を維持
  7. .wiki-sync.json — sync state にエントリ追加
  8. (横断ネタなら)関連カテゴリの 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-searchquery_type=user

制約:

  • search に edited_date_range フィルタはない → 編集のみ更新されたページは作成日が古いと拾えない
  • 対策: .wiki-sync.json の各エントリを定期的に再 fetch して last_edited_time を比較

トラブルシューティング

症状原因 / 対処
デプロイで Invalid commit message ... UTF-8wrangler が 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) で再発行