ascii-diagram について
ascii-diagramは、テキスト図を作成するエージェント向けのスキルです。描画ルールと印刷して確認する手順により、配置の問題を見つけて修正します。
主な機能
- 01Unicode罫線文字を優先
- 02枠幅と余白の統一
- 03接続線と矢印の配置確認
- 04タブと行末空白の検査
- 05ルーラーを使った検証
活用シーン
- 01枠の各行の幅を確認
- 02接続線の隙間やずれを発見
- 03共有前にテキスト図を点検
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ lwlee2608/ agent-skills --skill ascii-diagramインストール後、Claude Code で/ascii-diagramを入力して読み込まれたか確認します。
詳細
ASCII 図を検証する
エージェントが生成する ASCII 図は、角のずれ、境界線の不揃い、接続線の途切れなど、配置に問題が生じることがよくあります。LLM は頭の中で文字数を正確に数えることができません。 このスキルでは、印刷して確認するループを使い、配置の不具合を見つけて修正します。
ルール
- Unicode の罫線文字を優先してください。 角には
┌、┐、└、┘、水平線には─、垂直線には│、接続部には┬、┴、├、┤、┼を使います。ユーザーが明示的に要求した場合、または対象の形式で Unicode を表示できない場合に限り、通常の ASCII(+、-、|)を使ってください。同じ図でスタイルを混在させないでください。 - ボックスの各行は、上辺、内容行、下辺のすべてで幅を完全に揃えてください。
- 内容が短い行にはスペースを追加し、右側の境界線
│がすべての行で同じ列にくるようにしてください。 - 接続線と矢印は、関連するボックスの境界に明確につながるようにしてください。隙間が意図したものか確認してください。
- タブ文字は使わないでください。 タブは表示幅が予測できず、配置を気付かないうちに崩します。スペースのみを使ってください。
- 行末に空白を入れないでください。 見えない行末の空白は幅の不一致を引き起こし、正しく見えても実際にはずれている原因になります。
検証手順
頭の中で文字数を数えて検証しようとしないでください。 代わりに、以下の印刷・確認ループを使ってください。
ステップ 0:サブエージェントに委任するか決める
図が (a)6 行を超え、かつ(b)複数のボックス、または入れ子/接続されたレイアウトを含む場合は、検証ループ全体をサブエージェントに委任してください(Agent ツールを使用)。このループでは大量のルーラー出力と反復作業が発生するため、メインコンテキストに残す必要はありません。
小さな図(単一のボックス、短い表、6 行以下)の場合は、インラインでループを実行してください。サブエージェントを起動するより、そのまま実行するほうが速いためです。
委任する場合は、次のテンプレートを使って引き継いでください(サブエージェントにはこのスキルが読み込まれていません)。
File: <absolute path>
Lines: <start>-<end>
Task: Run the verification loop in skills/ascii-diagram/SKILL.md steps 1-5. Edit the source file in place.
Report: PASS or FAIL, iteration count, and a one-line summary of fixes. Do not paste the diagram back.
サブエージェントから結果が返された後:
- 編集された行を再度読み、要約が実際の変更内容と一致することを確認してください。 サブエージェントの報告は、意図を説明しているものであり、必ずしも差分を正確に反映しているとは限りません。
- FAIL の場合(問題が残ったまま、サブエージェントが 3 回の反復上限に達した場合)、部分的な修正を受け入れるか、具体的な指示を添えて再度委任するか、インラインで仕上げるかを判断してください。FAIL をそのまま完了扱いにしないでください。
ステップ 1:図を一時ファイルに書き込む
Write ツールを使って、図を一時ファイルに書き込んでください。他のセッションのファイルを上書きしないよう、/tmp/diagram-<context>.txt のような一意のパスを使ってください(<context> は、このセッションに固有の具体的な内容に置き換えます。例:/tmp/diagram-auth-flow.txt)。以下のすべてのコマンドで同じパスを使用してください。
ステップ 2:列ルーラー付きで表示する
次の Bash コマンドを実行して、列番号付きで図を表示してください(<path> は一時ファイルのパスに置き換えます)。
awk 'BEGIN{
ruler1=""; ruler2=""
for(i=0;i<120;i++){
ruler1=ruler1 sprintf("%d", int(i/10)%10)
ruler2=ruler2 sprintf("%d", i%10)
}
print " " ruler1
print " " ruler2
}
{printf "%3d: %s\n", NR, $0}' <path>
これにより、各行が行番号とともに表示され、上部には 2 行の列ルーラー(10 の位、1 の位)が出力されます。角、境界線、接続線が正しい列にあるか簡単に確認できます。図の幅が 120 列を超える場合は、ループ内の 120 を大きくしてください。
ステップ 3:見えない問題を確認する
通常の出力では見えない問題を見つけるため、次のチェックを実行してください(<path> は一時ファイルのパスに置き換えます)。
# Tabs (will break alignment silently)
grep -F $'\t' <path> && echo "FAIL: tabs found" || echo "OK: no tabs"
# Trailing whitespace
grep ' $' <path> && echo "FAIL: trailing spaces found" || echo "OK: no trailing whitespace"
見つかった問題をすべて修正してから、次に進んでください。
ステップ 4:ルーラー出力を目視で確認する
表示された出力を見て、次の点を確認してください。
- ボックス幅の一貫性:各ボックスの右側の境界(
│または┐/┘)は、すべての行で同じ列にありますか? ルーラーから列番号を読み取ってください。 - 上辺と下辺の一致:下の角(
└/┘)は、上の角(┌/┐)と同じ列にありますか? - 横並びの配置:隣接するボックスの列位置は一貫していますか?
- 接続線:矢印は実際に境界文字に接していますか?
ステップ 5:修正して再確認する
問題が見つかった場合:
- ファイル内の図を修正します(一時ファイルではありません)。
- 更新した図を同じ一時ファイルに再度書き込みます。
- 再度、目盛りを付けて表示します。
- すべてのチェックに合格するまで、または 3 回繰り返すまで、どちらか先に達するまで繰り返します。3 回繰り返しても問題が残っている場合は、次に進みます。
よくある間違い
-
右端の位置が 1 文字ずれている。
│の前に余分なスペースがある、またはスペースが足りないため、右端が上端/下端の角とは異なる列にずれています。目盛りを使って、すべての行の終端が同じ列にあることを確認します。WRONG: CORRECT: ┌──────────┐ ┌──────────┐ │ hello │ │ hello │ │ world │ ← col 13 │ world │ └──────────┘ ← col 12 └──────────┘ -
下端の幅が一致しない。 下端の
─が上端より多い、または少ないため、閉じる角が誤った列に配置されています。目測ではなく、目盛りを使って数えます。WRONG: CORRECT: ┌──────────┐ ← col 12 ┌──────────┐ │ content │ │ content │ └─────────┘ ← col 11 └──────────┘ -
横並びのボックス間の間隔が不均一。 隣接するボックス間の間隔が行ごとに異なり、2 つ目のボックスの位置がずれています。2 つ目のボックスの角が、すべての行で同じ列にあることを確認します。
WRONG: CORRECT: ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ │ box 1 │ │ box 2 │ │ box 1 │ │ box 2 │ └───────┘ └───────┘ ← extra └───────┘ └───────┘ -
ボックス描画スタイルが混在している。 同じ図の中で ASCII(
+、-、|)と Unicode(┌、─、┐)の文字が混在しています。スタイルを 1 つ選び、一貫して使用します。WRONG: CORRECT: ┌──────────+ ← ASCII + ┌──────────┐ │ content │ │ content │ └──────────┘ └──────────┘ -
接続線がボックスの境界に接していない。 接続先のボックスとの間に隙間があり、矢印や線が浮いています。すべての接続線は、境界文字から始まり、境界文字で終わる必要があります。
WRONG: CORRECT: ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ │ box 1 │ -> │ box 2 │ │ box 1 │──>│ box 2 │ └───────┘ └───────┘ └───────┘ └───────┘ gap ^ ^ gap no gaps