これは何か
この Wiki は Quartz で静的サイト化し、GitHub Pages に公開している(build は quartz.config.ts / quartz.layout.ts、deploy は .github/workflows/deploy-pages.yml)。本ページは、公開サイト上で各ページがどう表示されるか(URL と表示タイトル、Explorer のラベル)の規約をまとめる。source-codeより
URL と表示タイトルを分離する
- URL は Markdown ファイル名由来の slug。英語 slug のまま変えない(既存リンク・被リンクを壊さないため)。
- 表示タイトル は frontmatter の
title。Quartz の FrontMatter transformer は「titleがあればそれ、無ければfile.stem(=英語 slug)」を表示名に採用する。 - この表示名はページ見出し (ArticleTitle) と Explorer 左ペインのページ名の両方が使う(Explorer のツリーノード
displayNameがdata.title由来)。したがってtitleを 1 つ足すだけで両方が同時に日本語化され、URL は不変のまま。 - 運用: 全ページに日本語 1 行
titleを付ける。未設定だと英語 slug が見出しに出るので、新規作成・rename 時は必ず付ける。日付つき snapshot はタイトル末尾に日付 (YYYY-MM-DD) を残す。用語は用語ルール(広聴AI / LLM grouping / Jigsaw Sensemaker 等)に従う。source-codeより
Explorer のフォルダ見出しは mapFn で日本語化する
ページ(ファイル)の表示名は title で決まるが、分類フォルダ(concepts / entities / sources / analyses)の見出しはフォルダ slug のまま残る。これは quartz.layout.ts の Explorer mapFn で node.displayName を上書きして日本語化している。
| フォルダ slug | 表示 |
|---|---|
| concepts | 概念 |
| entities | 人物・ツール |
| sources | ソース要約 |
| analyses | 考察・分析 |
Explorer の並び順は同ファイルの sortFn(sortByRecency、配下ページの最新更新日で新しい順)。source-codeより
落とし穴: Explorer の mapFn / sortFn は client 側で再評価される
Explorer に渡した mapFn / sortFn は、サーバで .toString() により文字列化され、client 側で new Function によりグローバルスコープで再評価される(quartz/components/scripts/explorer.inline.ts)。このため関数は自己完結でなければならない:
- inner named 関数を置かない。esbuild の
--keep-namesが注入する__name(...)参照が、再評価時に未定義になって壊れる。 - 外部変数を閉じ込めない(object literal と built-in のみ)。
- 実装は top-level の
const 名前 = (引数) => {...}形にして Explorer に渡す(sortByRecency/mapFolderLabelsが実例)。
検証は実ビルドで行う: pnpm build が通れば直列化は成功、生成 HTML の data-data-fns に(日本語は \uXXXX エスケープで)関数が埋まる。source-codeより
関連ファイル / CI gate
quartz.config.ts— locale=ja-JP、フォント、theme、plugin 構成。quartz.layout.ts— Explorer のsortFn/mapFn、各ペインの構成。scripts/check_pages_links.py— 生成物(public/)の内部リンク検査。deploy-pages.ymlの CI gate。scripts/build_index_txt.py— frontmattersummaryから AI 向けカタログindex.txtを生成(titleは使わない。表示用と AI カタログ用は別物)。
二層運用の全体像は wiki-driven-workflow、コントリビュート手順は contributing を参照。source-codeより
Updates
- 2026-10-14:
sortByRecency(Explorer を更新新しい順)の前提を 2 点補足。- client 側ソートには
contentIndex.tsxで date を残す必要がある。emitter はデフォルトで client 用 index(static/contentIndex.json)からdateを削除する(delete content.date、RSS 用途だけ残す設計)。これを外さないと client のFileTrieNode.data.dateが undefined になり、全ページが同点=実質アルファベット順に戻る。今回この削除をやめて date を保持した。「更新日」はdefaultDateType=modified≒git 最終コミット時刻で、一括コミットは多数ページを同日に揃えるため同点は辞書順にフォールバックする。 - 「
pnpm buildが通れば OK」では検証不十分。__nameの落とし穴は client 再評価時のReferenceErrorで、build(Node 側に__nameがある)は通ってしまう。確実な確認は、生成 HTML のdata-data-fnsからsortFn/mapFn文字列を取り出し、new Function("return "+s)()でグローバルスコープ再評価して throw しないことを見る(Node でそのまま呼ぶと素通りする)。source-codeより
- client 側ソートには