mcpField
G
graph-colorize

graph-colorize

github.com/ar9avデザイン・UI3.6k2.8k 回インストール1 日前に更新
リポジトリ

graph-colorize について

graph-colorizeは、Obsidianのgraph.jsonを編集し、タグ、フォルダー、可視性、またはカスタム設定でグラフノードに色を付けるスキルです。ファイルをバックアップし、ほかのグラフ設定は保持します。

主な機能

  1. 01タグ、カテゴリ、可視性でノードを色分け
  2. 02可視性とタグの色分けを併用
  3. 03明示的なカスタム色設定を適用
  4. 04編集前に設定をバックアップ
  5. 05カラーグループ以外の設定を保持

活用シーン

  1. 01Obsidianグラフ内のトピックを区別
  2. 02内部ページやPIIページを強調
  3. 03Vaultのフォルダーに固定色を設定
  4. 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です。

開始する前に

  1. 設定を解決する — llm-wiki/SKILL.mdの設定解決プロトコルに従います(インラインの@nameによる上書き → CWDから上位へたどって.envを探す → グローバル設定 → セットアップを促す)。これによりOBSIDIAN_VAULT_PATHが得られます。
  2. $OBSIDIAN_VAULT_PATH/.obsidian/が存在することを確認します。存在しない場合、そのVaultはObsidianでまだ開かれていません。VaultをObsidianで一度開いてから、再実行するようユーザーに伝えます。
  3. 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色までに制限し、残りのタグには「その他」の色を共有させることをユーザーに伝えます。

#Hexrgb(パック済み整数)役割
0#4E79A75142951青
1#F28E2B15896107オレンジ
2#E1575914767961赤
3#76B7B27780786ティール
4#59A14F5873999緑
5#EDC94815583048黄
6#B07AA111565217紫
7#FF9DA716751527ピンク
8#9C755F10253663茶
9#BAB0AC12234924グレー

すべての色は{"a": 1, "rgb": <int>}の形式で指定します。

モード:by-tag
  1. _archives/、_raw/、.obsidian/、node_modules/、index.md、log.md、_insights.mdを除外して、$VAULT_PATH/**/*.mdをGlobで検索します。
  2. 各ページのフロントマターからtagsを解析します。タグごとに使用数を数えます。
  3. 使用頻度の一覧からvisibility/*タグを除外します。これらは予約済みのシステムタグであり、by-visibilityまたはcombinedモードでのみ処理します。
  4. 使用数の多い上位10個のタグを選びます。ユニークなタグが10個未満の場合は、すべて使用します。
  5. インデックスiの各タグTに対して、{"query": "tag:#T", "color": palette[i]}を出力します。
  6. 必要に応じて、タグのないページ用の最後のキャッチオール項目を末尾に追加できます:{"query": "-[\"tag\":]", "color": palette[9]} — カラースロット9が実際のタグに使われている場合は追加しません。
モード:by-category

実行ごとに色が安定するよう、Vault直下の7つのフォルダーを次の固定順で使用します。

フォルダー色のインデックス
concepts0(青)
entities1(オレンジ)
skills2(赤)
references3(ティール)
synthesis4(緑)
projects5(黄)
journal6(紫)

存在し、かつ.mdファイルを少なくとも1つ含むフォルダーごとに項目を1つ出力します。各項目は次の形式です:

{"query": "path:\"<folder>\"", "color": {"a": 1, "rgb": <int>}}
モード: by-visibility

次の 3 つのエントリを、この順序で正確に出力します(最初に一致したものが優先されるため、最も制限の厳しいものが先頭になります):

  1. visibility/pii → #E15759(赤、rgb 14767961)
  2. visibility/internal → #F28E2B(オレンジ、rgb 15896107)
  3. 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 へのマージ(上書きしないこと)

  1. 既存の $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
    }
    
  2. 最初にバックアップ: 書き込む前に、既存のファイルを .obsidian/graph.json.backup-<YYYYMMDD-HHMM> にコピーします。同じ分のバックアップが既に存在する場合は、それを再利用します — 重複を積み上げないでください。

  3. colorGroups フィールドのみを新しい配列に置き換えます。その他のフィールドはすべてそのままにします。これにより、ユーザーのズーム、物理演算、フィルター、検索、表示の設定が保持されます。

  4. 元のファイルと同じ 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 のグラフとエクスポートされた可視化が一貫して見えます。

コメント