graph-colorize について
graph-colorizeは、Obsidianのgraph.jsonを編集し、タグ、フォルダー、可視性、またはカスタム設定でグラフノードに色を付けるスキルです。ファイルをバックアップし、ほかのグラフ設定は保持します。
主な機能
- 01タグ、カテゴリ、可視性でノードを色分け
- 02可視性とタグの色分けを併用
- 03明示的なカスタム色設定を適用
- 04編集前に設定をバックアップ
- 05カラーグループ以外の設定を保持
活用シーン
- 01Obsidianグラフ内のトピックを区別
- 02内部ページやPIIページを強調
- 03Vaultのフォルダーに固定色を設定
- 04色の変更後にグラフ設定を復元
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ar9av/ obsidian-wiki --skill graph-colorizeインストール後、Claude Code で/graph-colorizeを入力して読み込まれたか確認します。
詳細
Graph Colorize — Obsidian グラフビューを色分けする
$OBSIDIAN_VAULT_PATH/.obsidian/graph.jsonを書き換え、Obsidianのグラフビューでノードをタグ、フォルダー、または可視性に応じて色付けします。
Obsidianはグラフの設定を<vault>/.obsidian/graph.jsonに保存します。colorGroups配列は{query, color}のペアのリストです。ノードごとに最初に一致したクエリが適用されます。クエリにはObsidianの検索構文(tag:#foo、path:"concepts"、file:fooなど)を使用します。色は{"a": 1, "rgb": <packed-int>}で、整数値は(R << 16) | (G << 8) | Bです。
開始する前に
- 設定を解決する —
llm-wiki/SKILL.mdの設定解決プロトコルに従います(インラインの@nameによる上書き → CWDから上位へたどって.envを探す → グローバル設定 → セットアップを促す)。これによりOBSIDIAN_VAULT_PATHが得られます。 $OBSIDIAN_VAULT_PATH/.obsidian/が存在することを確認します。存在しない場合、そのVaultはObsidianでまだ開かれていません。VaultをObsidianで一度開いてから、再実行するようユーザーに伝えます。- Obsidianが起動中と思われる場合はユーザーに警告します:Obsidianは終了時に
graph.jsonを上書きします。先にVaultを閉じるよう伝えるか、再読み込み(Cmd/Ctrl+R)を行うまでグラフの設定に触れないよう伝えます。
ステップ1:モードを選ぶ
ユーザーの表現からモードを推測します。曖昧な場合はby-tagを既定にします。
| ユーザーの意図 | モード |
|---|---|
| 「タグごとに色分け」「グラフを色付け」「カラフルにして」(既定) | by-tag |
| 「フォルダーごとに色分け」「カテゴリごとに色分け」「ディレクトリごとに色分け」 | by-category |
| 「可視性を強調」「グラフにinternal/piiを表示」「可視性の色分け」 | by-visibility |
ユーザーが明示的なマッピングを指定(tag:#foo = red、またはJSONの塊) | custom |
| 「タグと可視性を組み合わせる」/「両方」 | combined(先に可視性、次にタグ) |
ステップ2:colorGroups配列を作成する
パレット(色覚多様性に配慮した10色)
以下の順に使用します。グループが色数を超える場合は、2回目の処理で明度を約20%調整して循環させるか、10色までに制限し、残りのタグには「その他」の色を共有させることをユーザーに伝えます。
| # | Hex | rgb(パック済み整数) | 役割 |
|---|---|---|---|
| 0 | #4E79A7 | 5142951 | 青 |
| 1 | #F28E2B | 15896107 | オレンジ |
| 2 | #E15759 | 14767961 | 赤 |
| 3 | #76B7B2 | 7780786 | ティール |
| 4 | #59A14F | 5873999 | 緑 |
| 5 | #EDC948 | 15583048 | 黄 |
| 6 | #B07AA1 | 11565217 | 紫 |
| 7 | #FF9DA7 | 16751527 | ピンク |
| 8 | #9C755F | 10253663 | 茶 |
| 9 | #BAB0AC | 12234924 | グレー |
すべての色は{"a": 1, "rgb": <int>}の形式で指定します。
モード:by-tag
_archives/、_raw/、.obsidian/、node_modules/、index.md、log.md、_insights.mdを除外して、$VAULT_PATH/**/*.mdをGlobで検索します。- 各ページのフロントマターから
tagsを解析します。タグごとに使用数を数えます。 - 使用頻度の一覧から
visibility/*タグを除外します。これらは予約済みのシステムタグであり、by-visibilityまたはcombinedモードでのみ処理します。 - 使用数の多い上位10個のタグを選びます。ユニークなタグが10個未満の場合は、すべて使用します。
- インデックス
iの各タグTに対して、{"query": "tag:#T", "color": palette[i]}を出力します。 - 必要に応じて、タグのないページ用の最後のキャッチオール項目を末尾に追加できます:
{"query": "-[\"tag\":]", "color": palette[9]}— カラースロット9が実際のタグに使われている場合は追加しません。
モード:by-category
実行ごとに色が安定するよう、Vault直下の7つのフォルダーを次の固定順で使用します。
| フォルダー | 色のインデックス |
|---|---|
concepts | 0(青) |
entities | 1(オレンジ) |
skills | 2(赤) |
references | 3(ティール) |
synthesis | 4(緑) |
projects | 5(黄) |
journal | 6(紫) |
存在し、かつ.mdファイルを少なくとも1つ含むフォルダーごとに項目を1つ出力します。各項目は次の形式です:
{"query": "path:\"<folder>\"", "color": {"a": 1, "rgb": <int>}}
モード: by-visibility
次の 3 つのエントリを、この順序で正確に出力します(最初に一致したものが優先されるため、最も制限の厳しいものが先頭になります):
visibility/pii→#E15759(赤、rgb 14767961)visibility/internal→#F28E2B(オレンジ、rgb 15896107)visibility/public→#59A14F(緑、rgb 5873999)
{"query": "tag:#visibility/pii", "color": {"a": 1, "rgb": 14767961}}
visibility/ タグがないページは Obsidian のデフォルト色のままにします — キャッチオールを追加しないでください。
モード: combined
最初に by-visibility のエントリを出力し、その後に by-tag のエントリを出力します。競合時は、リスト内で先に現れる visibility が優先されます。
モード: custom
ユーザーが明示的なマッピングを指定した場合は、それをそのまま尊重します。ユーザーが指定した 16 進数(例: #FF00FF)を int(hex_without_hash, 16) を使ってパックされた int に変換します。それぞれを {"a": 1, "rgb": <int>} としてラップします。
ステップ 3: graph.json へのマージ(上書きしないこと)
-
既存の
$VAULT_PATH/.obsidian/graph.jsonを読み込みます。存在しない場合は、次の最小限のデフォルトから開始します:{ "collapse-filter": true, "search": "", "showTags": false, "showAttachments": false, "hideUnresolved": false, "showOrphans": true, "collapse-color-groups": false, "colorGroups": [], "collapse-display": true, "showArrow": false, "textFadeMultiplier": 0, "nodeSizeMultiplier": 1, "lineSizeMultiplier": 1, "collapse-forces": true, "centerStrength": 0.518713248970312, "repelStrength": 10, "linkStrength": 1, "linkDistance": 250, "scale": 1, "close": true } -
最初にバックアップ: 書き込む前に、既存のファイルを
.obsidian/graph.json.backup-<YYYYMMDD-HHMM>にコピーします。同じ分のバックアップが既に存在する場合は、それを再利用します — 重複を積み上げないでください。 -
colorGroupsフィールドのみを新しい配列に置き換えます。その他のフィールドはすべてそのままにします。これにより、ユーザーのズーム、物理演算、フィルター、検索、表示の設定が保持されます。 -
元のファイルと同じ JSON スタイル(通常はコンパクトな 1 行、または 2 スペースインデント — 存在するものを保持)でファイルを書き戻します。
ステップ 4: レポートとログ
次のようなサマリーを出力します:
Graph colorized → .obsidian/graph.json
Mode: by-tag
Groups: 7 color assignments
Palette: blue, orange, red, teal, green, yellow, purple
Backup: .obsidian/graph.json.backup-20260424-1432
Reload Obsidian (Cmd/Ctrl+R) to see the new colors.
If Obsidian is currently open, close it first OR reload immediately — Obsidian
overwrites graph.json on close and can erase these changes.
$VAULT_PATH/log.md に追記します:
- [TIMESTAMP] GRAPH_COLORIZE mode=<mode> groups=<N> backup=graph.json.backup-<stamp>
エッジケース
by-tagモードで保管庫にタグがない →by-categoryにフォールバックし、ユーザーに伝えます。- ユーザーが元に戻したい → 最新の
graph.json.backup-*から復元し、その旨をlog.mdに記録します。 - ユーザーがすべてのカラーグループをクリアしたい →
colorGroups: []を設定し、バックアップし、GRAPH_COLORIZE mode=clearとしてログに記録します。 .obsidian/が存在しない → 保管庫がまだ Obsidian で開かれていません。一度開いてから再実行するようユーザーに伝えます。.obsidian/を自分で作成しないでください — Obsidian は初回起動時そこに多くのファイルを生成します。- クエリ構文の注意点: スペースを含むフォルダパスは引用符で囲む必要があります(
path:"my folder")。ネストされたスラッシュを含むタグはそのまま機能します(tag:#visibility/internal)。URL エンコードしないでください。 - 編集中に Obsidian が開いている: リスクを明示します — Obsidian は起動時に graph.json を読み込み、終了時にそれを書き換えます。ユーザーがライブで編集している場合は、先に Obsidian を閉じるか、すぐにリロード(Cmd/Ctrl+R)を実行し、それを行う前にグラフ設定を開かないように伝えます。
注意事項
- これは純粋な設定編集です — ページ内容の変更も、frontmatter の書き込みもありません。
- 再実行は安全です: 実行ごとに新しいバックアップが作成され、
colorGroupsのみが書き換えられます。 - ユーザーが保持したい手動でキュレーションしたカラーグループを持っている場合は、
combinedモードを提案するか、上書きする前に確認します。 - ここでのパレットは
wiki-exportのgraph.htmlのコミュニティカラーと一致しているため、Obsidian のグラフとエクスポートされた可視化が一貫して見えます。