Communityコーディング&開発github.com

shenwuyue841/obsidian-excalidraw

Obsidian Excalidraw 図面を Markdown(.excalidraw.md)形式で生成・編集します。ナレッジマップ、決定木、数式ボード、教育用キャンバスなどに最適です。このスキルは、特に LaTeX 数式を含む場合、既存のノートとテーマや色を揃える必要がある場合、または以前生成したキャンバスが白紙や色落ちして表示される場合に使用します。

obsidian-excalidraw とは?

このスキルは、Obsidian Excalidraw プラグインで正しく開く `.excalidraw.md` ファイルを生成・編集するためのものです。ナレッジマップ、決定木、数式ボードなど、視覚的なキャンバスをコードから作成します。特筆すべき点は、LaTeX 数式を画像要素として扱い、専用の埋め込みファイルセクションで管理すること、テーマと背景色の違いを理解して適切な色設定を行うことです。生成スクリプトは、ハッシュベースの安定した ID を生成し、上書き前にファイルを削除することで、Obsidian 上で開いているキャンバスとのマージバグを防ぎます。スキルには、検査スクリプト(要素数、数式と画像の一致、配色の監査)、ヘッドレスプレビューレンダラー、およびレイアウト、LaTeX、トラブルシューティングに関する詳細なリファレンスが含まれています。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/shenwuyue841/obsidian-excalidraw-skill/tree/HEAD

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Obsidian Excalidraw キャンバスビルダー

Obsidian Excalidraw プラグインで正しく開く .excalidraw.md ファイルを生成します。手書きの LaTeX ブロック、バインドされた矢印、テーマに沿った色を含みます。

使用するタイミング

  • ボールト内にナレッジマップ/決定木/数式ボードを Excalidraw キャンバスとして作成する
  • Markdown のアウトラインやノートを視覚的なキャンバスに変換する
  • 画像が壊れて表示される、テキストが透明、数式が巨大、背景が白または黒になるなどの問題があるキャンバスを修正する
  • 新しいキャンバスを、同じボールト内の既存キャンバスのビジュアル言語に一致させる

スタンドアロンの .excalidraw JSON(Web アプリ用)や PNG/SVG のレンダリングには使用しないでください。その区別が必要な場合は references/when-not-to-use.md を参照してください。

黄金のルール(苦労して学んだ教訓)

  1. LaTeX はテキストではない。数式は type: "image" の要素であり、そのソースは ## Embedded Files セクションに <40-hex-id>: $$tex$$ として存在します。対応する Embedded Files エントリがない画像要素は、壊れた画像としてレンダリングされます。references/latex.md を参照してください。
  2. このプラグインでは、テキスト要素内に手動で $$...$$ を書かないでください。生のソースが表示されます。プラグインは Embedded Files に存在する数式のみをレンダリングします。
  3. シーンのテーマは信頼できない。プラグインは appState.theme をアプリレベルのテーマで上書きします。したがって、キャンバスの色は viewBackgroundColor から決まりますが、ライトテーマは関係なく白で塗りつぶします。references/theme-and-color.md を参照してください。
  4. 色をでっち上げる前に、同じボールト内の既存のキャンバスからパレットをコピーする。scripts/inspect_canvas.mjs でキャンバスを解凍し、そのストローク色とフォントファミリーを読み取り、それらを再利用します。
  5. 数式の高さを揃え、幅は長さに基づいて決める。固定の大きな幅は短い数式を巨大に引き伸ばします。references/layout.md を参照してください。
  6. プラグインは compressed-json (LZString base64、約120文字ごとに折り返し) として再保存する。保存されたファイルをパッチする代わりに、ジェネレータースクリプトからキャンバスを再生成してください。読み取りには解凍が必要です。scripts/inspect_canvas.mjs がそれを行います。
  7. 成功を主張する前に検証する。インスペクトスクリプトを実行し、確認してください:数式の数が画像の数と一致すること、ダングリングバインディングがないこと、テーマ/背景が意図通りであること。
  8. 「見た目が良い」は測定可能である。コンテナ比率 ≤ 30%、フォントサイズ ≤ 4種類、数式の高さの分散 0、重なり数 0。scripts/inspect_canvas.mjs はこれらを aesthetic warnings として表示するようになりました。すべての警告を欠陥として扱い、好みの問題として無視しないでください。references/design-metrics.md を参照してください。
  9. 最初に削除してから、安定した ID で一度だけ書き込む。要素 ID はコンテンツ(テキスト/TeX/ラベルのハッシュ)から派生させる必要があり、ランダムであってはなりません。そして、対象ファイルを書き込む前にリンクを解除してください。この両方を行わないと、Obsidian で現在開いているキャンバスを再生成すると、新しい要素がライブシーンにマージされ、すべてが二重になり、プラグインが二重になったシーンを自動保存してしまいます。references/troubleshooting.md の「要素が二重/三重になる」を参照してください。
  10. 提供する前にレンダリングする。scripts/render_preview.mjs はファイルをヘッドレス(Node、ブラウザ不要)でラスタライズします。PNG を見てください。JSON の監査は構造をチェックしますが、「間隔がおかしい」と判断できるのはピクセルだけです。そのプレビューでは LaTeX は空白になります(MathJax は Obsidian プラグイン内にあり、レンダラーにはありません)。したがって、レイアウトは PNG で、数式の正しさは ## Embedded Files で判断してください。
  11. $$ レイヤーは一つだけ。データモデル内の TeX は裸です (A=\int…);デリミタは ## Embedded Files の行を出力するときだけ追加されます。生成されたファイル内の $$$ は二重ラップのバグであり、リテラルのドル記号としてレンダリングされます。

二つのレイアウト流派 — 描画開始前に選択する

表格派 (Column grid)结构派 (Lines as structure)
形状列ボックス + 行区切り線幹線 + ドロップライン + 自由浮動テキスト
コンテナ比率高い(列ごとにボックス)ほぼ 0
読み味検索表、厳密講義ボード、軽量
最も適している場面セルごとに確認する多数の同レベル行分岐、または相互に派生する列
失敗モード「スライドテンプレートのようだ」枝が多すぎる → 線が交差する

経験則: 兄弟列 → 表格派;ある列が他の列から派生する → 结构派。 どちらの例も design-metrics.md に同じ内容(第十講のキャンバス)で存在するので、選択前に比較できます。

ワークフロー

  1. 対象ボールトの規約を読む。ユーザーが気に入っている既存の .excalidraw.md を見つけ、node scripts/inspect_canvas.mjs <ファイル> を実行し、以下を記録する:テーマ、viewBackgroundColor、支配的なストローク色、fontFamily、roughness、典型的なフォントサイズ。
  2. 内容を列または行として設計する(references/layout.md 参照)— 数量/ステップのファミリーごとに1列、数式ごとに1行、そして実際に同じ数量のものだけをグループ化する。上の表に従ってレイアウト流派(表格派 vs 结构派)を選択する。
  3. scripts/gen_canvas.mjs をモデルにジェネレータースクリプトを書く:その CONFIG ブロック(タイトル、列、行)を編集して実行する。30 kB の JSON を手動編集しない。スクリプトに付属する二つの安全機構(コンテンツ由来の ID、writeFileSync の前の rmSync)を維持する。
  4. 結果を scripts/inspect_canvas.mjs で検査する、数/色/バインディングを修正する。また、ファイル内に $$$ がないこと、要素数がジェネレーターが出力した数と一致することを確認する(倍数ならマージバグが発生している)。次に、scripts/render_preview.mjs でレンダリングし、実際に PNG を確認する。報告前に間隔/重なり/短い線を修正する。
  5. ユーザーが Obsidian で何をすべきかを報告する(ファイルを閉じて開き直す、または「現在の Excalidraw ファイルを解凍」コマンドを使用する)— プラグインはファイルが再度開かれたときだけ再読み込みします。

リファレンスマップ

ファイル内容
references/file-format.md正確な .excalidraw.md の骨格、両方のエンコーディング、セクション順序、ヘッダーコメント
references/element-schema.md要素タイプごとの必須フィールド、バインドテキスト、矢印バインディング、index 順序
references/latex.mdEmbedded Files の契約、\color、サイジング、テスト済みの3つのレンダリングバリアント、失敗の兆候
references/theme-and-color.mdキャンバスが白く開く理由、matchThemeAlways、パレット抽出、このボールトで確立された色
references/layout.md列/行のジオメトリ、数式サイジングのヒューリスティック、キャンバスが未完成に見える理由
references/script-engine.mdプラグイン内の JS スクリプトエンジン:スクリプトの配置場所、何ができるか、ExcalidrawAutomate API、テーブルの作成可否、ファイルレベル生成とのトレードオフ
references/design-metrics.md定量化された美学:コンテナ比率、フォントレベルの数、数式の分散、余白、意味的な色;二つのレイアウト流派;レンダラーなしでの検証方法
references/troubleshooting.mdこれまでに見られたすべての失敗に対する症状 → 原因 → 修正の表
scripts/gen_canvas.mjs設定駆動のキャンバスジェネレーター(テキスト、ラテックス、矩形、水平線、矢印)
scripts/inspect_canvas.mjs解凍 + 監査:テーマ、カウント、数式/画像の一致、バインディング、フォント、美的メトリクス。--describe はコンパクトな ID/位置/ラベル/接続のインベントリを出力;--dump は生のシーン JSON を出力
scripts/render_preview.mjsmcp-excalidraw-server render によるヘッドレス PNG プレビュー(ブラウザ不要)。LaTeX は空白でレンダリングされる — レイアウトのみ
evals/evals.json回帰プロンプト:実際に発生した失敗モードごとに1つ
examples/ea-table.md矩形とテキストからテーブルを構築する、実行可能なアプリ内スクリプト

既存のキャンバスの編集

  1. 解凍して現在の状態を理解する(inspect_canvas.mjs --dump <ファイル> がシーン JSON を出力します)。
  2. ジェネレータースクリプトからの再生成を優先する。ユーザーが保存したい手動編集を行っている場合は、キャンバス全体を書き換えるのではなく、スコープ付き変換(シーンの読み取り → 特定の要素の変更 → 非圧縮での再シリアライズ)を記述する。
  3. キャンバスを中途半端な状態のままにしない:すべての画像に数式が対応しているか、まったくないかのいずれか。

このボールトのサイズとタイポグラフィのデフォルト

  • ボディテキスト fontFamily: 6、roughness: 0、strokeWidth: 1。
  • タイトル 28–30 px、列ヘッダー 19–22 px、行ラベル 15–16 px、数式画像の高さ 50–52 px。
  • 行間隔 116–130 px;列幅 320–340 px;ギャップ 28–40 px。
  • キャンバス背景 #ffffff;インク #1e1e1e;ミュート #868e96;ヘアライン #e9ecef。

関連スキル