d2 について
d2は、直近のやり取りから情報を取り出してD2図にし、インライン表示用のPNGを生成するエージェント向けスキルです。Emacsの前景色と背景モードに合わせて図のスタイルを設定します。
主な機能
- 01直近の文脈から図のデータを抽出
- 02D2ソースファイルの作成
- 03Emacsの外観に応じたテーマ設定
- 04PNGをMarkdown画像として出力
活用シーン
- 01会話で話した手順の図解
- 02直近の文脈に含まれる情報の可視化
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ xenodium/ emacs-skills --skill d2インストール後、Claude Code で/d2を入力して読み込まれたか確認します。
詳細
D2 で図を作成する
直近のやり取りのコンテキストから D2 を使って図を作成します。PNG 画像を生成し、インラインで表示されるように Markdown 画像として出力します。
図の作成方法
- 現在のコンテキストから、図にできるデータを抽出または導出します。
- このセッションで以前に作成した図から Emacs の前景色と背景モードがすでに分かっていない場合は、次を問い合わせます。
1 つ目はemacsclient --eval '(face-foreground (quote default))' emacsclient --eval '(frame-parameter nil (quote background-mode))'"#eeffff"のような 16 進数の色を返します。2 つ目はdarkまたはlightを返します。後続の図でも、この 2 つを再利用します。 - 前景色を使って、一時ファイルに D2 ファイルを書き込みます。
- 背景モードが
darkの場合は--theme 200、lightの場合は--theme 0を指定して D2 を実行します。 - 結果を Markdown 画像として、単独の行に出力します。

# Use --theme 200 for dark, --theme 0 for light
d2 --theme 200 --pad 40 /tmp/agent-diagram-XXXX.d2 /tmp/agent-diagram-XXXX.png
D2 テンプレート
Emacs の背景モードに基づき、dark の場合は --theme 200、light の場合は --theme 0 を使用します。問い合わせた前景色を、ノードとエッジの style.font-color および style.stroke に適用します。
direction: right
node1: Label {
style.font-color: "#eeffff"
style.fill: "#2d3748"
style.stroke: "#eeffff"
}
node2: Label {
style.font-color: "#eeffff"
style.fill: "#2d3748"
style.stroke: "#eeffff"
}
node1 -> node2: label {style.stroke: "#eeffff"; style.font-color: "#eeffff"}
ルール
- セッションごとに Emacs の前景色を一度問い合わせ、その後のすべての図で再利用します。色がまだ分かっていない場合に限り、再度問い合わせてください。
(frame-parameter nil 'background-mode)を使って、セッションごとに Emacs の背景モードを一度問い合わせます。darkの場合は--theme 200、lightの場合は--theme 0を使用します。必ず--pad 40を指定してください。- ファイル名には必ずタイムスタンプを使用してください(例:
/tmp/agent-diagram-$(date +%s).png)。説明的な名前は使用しないでください。 - ユーザーの Emacs の背景でも図が読みやすくなるよう、すべてのノードとエッジの
style.font-colorおよびstyle.strokeに、問い合わせた前景色を設定します。 - 要素の種類を区別するため、意味のある塗りつぶし色を使用します。
- D2 の実行に成功したら、Markdown 画像(
)を単独の行に出力します。 - データに適したレイアウトの方向と構造を選びます。
- 明確になる場合は、エッジにラベルを付けます。
- 直近のコンテキストに図にできるデータがない場合は、その旨をユーザーに伝えます。
コメント
Markdown 対応