mcpField
O
obsidian-canvas

obsidian-canvas

github.com/altshiftstudio生産性340 回インストール37 週間前に更新
リポジトリ

obsidian-canvas について

付属の Python ライブラリを使って、Obsidian Canvas の `.canvas` ファイルを作成・編集するスキルです。生の JSON を直接書かずに、ノード、グループ、ルーティングされたエッジを構成するワークフロー向けです。

主な機能

  1. 01`.canvas` ファイルの作成と操作
  2. 02ノード、グループ、スマートエッジの構築
  3. 03ライブラリの CLI によるファイル生成
  4. 04論理座標を使った要素の配置
  5. 05階層、余白、色のガイドライン適用

活用シーン

  1. 01Obsidian Canvas でプロジェクトフロー図を作成
  2. 02関連ノードをグループ化したトラックに整理
  3. 03JSON を手書きせずにキャンバスを生成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/altshiftstudio/skills --skill obsidian-canvas

インストール後、Claude Code で/obsidian-canvasを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
flowchart.canvas
references/
library_spec.md
spec.md
scripts/
canvas_lib.py

詳細

Obsidian Canvas

このスキルでは、.canvas ファイル(JSON Canvas)の作成と操作を行います。

基本的なワークフロー

  1. ライブラリ:提供されている scripts/canvas_lib.py を必ず使用してください。生の JSON は書き込まないでください。
  2. 実行:JSON ペイロードを作成し、標準入力経由でライブラリスクリプトにパイプします(CLI モード)。一時的な Python スクリプトは作成しないでください。
  3. レイアウト:論理的な座標(x,y)を重視します。ID の生成、ノードの高さ、エッジの経路設定はライブラリが自動で処理します。

リソース

  • ライブラリ:scripts/canvas_lib.py(ノード、グループ、スマートエッジのコアロジック)。
  • CLI 仕様:references/library_spec.md — JSON 形式については必ず参照してください。
  • 仕様:詳細な JSON スキーマについては、references/spec.md を参照してください。
  • 例:assets/flowchart.canvas を参照してください。

レイアウトと美しさ(シニアデザイナー基準)

  • 余白:関連するノードの間には、エッジラベル用の「棚スペース」を確保するため、120px〜180px のゆとりある垂直間隔を設けてください。
  • Z インデックス:Z インデックスの処理はライブラリが行います(グループはノードの背後に描画されます)。トラック固有のコンテンツを囲むには、必ずグループを使用してください。
  • 階層:キャンバスのタイトルには H1(#)、大きなセクションには H2(##)、個々のノードのタイトルには H3(###)を使用してください。
  • 色:
    • 1(赤):摩擦、エラー、提出。
    • 2(オレンジ):やり取り、サポート、アウトリーチ。
    • 3(黄):証拠、ドキュメント、データ。
    • 4(緑):成功、解決、開始。
    • 5(青/シアン):中立、運用。
    • 6(紫):タイトル、メタ情報、成果。
  • エッジ:ラベルは短くしてください。同じ経路を複数のエッジが交差する場合、ライブラリは経路を調整しようとしますが、x を手動で調整すると役立ちます。

出力

新しいキャンバスを作成するには、JSON ペイロードを作成し、ライブラリスクリプトにパイプします。

cat <<EOF | python3 /path/to/skills/obsidian-canvas/scripts/canvas_lib.py
{
  "output": "Project_Flow.canvas",
  "nodes": [
    {"node_id": "start", "text": "Start", "x": 0, "y": 0, "color": "6"},
    {"node_id": "end", "text": "End", "x": 0, "y": 200, "color": "1"}
  ],
  "edges": [
    {"from_node": "start", "to_node": "end"}
  ],
  "groups": [
    {"label": "Phase 1", "nodes_in_group": ["start", "end"], "color": "5"}
  ]
}
EOF

コメント