English version:
SKILL.en.md
diagram — 図表作成
軽量なスキルで、2つのスクリプトがあります: scripts/mmd2png.py (Mermaid → PNG、デフォルトではローカルの mmdc のみ使用; リモートは明示的に選択した場合のみ) と scripts/chart.py (数値データ → PNG、matplotlib を uv または既存の Python で使用)。ソースファイルは出力ファイルと同じ場所に配置され、既存ファイルを上書きしません。
ユースケース別ルーティング表
| ニーズ | 方法 |
|---|---|
| フローチャート / シーケンス図 / クラス図 / 状態遷移図 / ER図 / ガントチャート / システムアーキテクチャ図 | Mermaid → scripts/mmd2png.py (デフォルトではローカルの mmdc のみ使用) |
| 実データに基づく棒グラフ / 円グラフ / 折れ線グラフ | scripts/chart.py (matplotlib; uv はパッケージがキャッシュにない場合、ネットワークが必要になることがあります) |
.report.docx に埋め込む図表 | PNG + .report.md 内の 、paper スキルと doc レシピで docx に出力 |
| Mermaid/matplotlib の範囲外の図表 (3D、高度なカスタムグラフィックス) | [N/A] — ユーザーに制限を明確に伝え、代替方法を偽装しない |
ルール
- 出力はソースファイルと同じ場所に:
<元のファイル名>.diagram.png(画像) +<元のファイル名>.diagram.mmd(Mermaid ソース、編集可能)。ソースファイルは上書きしません。 - Mermaid:
.mmdファイルに記述し、python3 scripts/mmd2png.py '<f>.mmd' '<f>.diagram.png'でレンダリング。図表のラベルはユーザーの使用言語に合わせます。 - グラフに描画するデータは、ソースからの実際の数値または用語である必要があります (
[fact]/[observed]ラベル付き)。虚偽の数値を描画してはいけません。 - ローカルファースト、ソースを無断で送信しない: デフォルトでは
mmd2png.pyはmmdcのみを使用します。CLI/ブラウザがない場合やエラーが発生した場合は処理を停止し、理由を報告します。ネットワーク経由は行いません。npm i -g @mermaid-js/mermaid-cliと Chrome/Chromium をインストールしてください。ユーザー/エージェントが明示的に選択した場合にのみ、MMD2PNG_BACKEND=remote(Kroki 続いて mermaid.ink)、kroki、またはinkを設定します。chart.pyはローカルで処理します。uv run --with matplotlibは、パッケージがインストール/キャッシュされていない場合、パッケージ取得のためにネットワークが必要になることがあります。そのため、オフライン時は matplotlib がインストール済みの Python か、準備済みのキャッシュを使用してください。 - 引き渡す前に検証:
mmd2png.pyは PNG マジックバイトとファイルサイズ 1KB 以上を自動チェックします。リモートからの JPEG 画像は ImageMagick を使用して実際の PNG に変換します (コンバーターがない場合は<f>.jpgを書き出し、警告を表示。.pngと偽装しません)。レポートに埋め込む際は、DOCX→PDF 変換後にpdfinfo+pdftotextで再確認します (画像が表示され、ページが崩れていないこと)。 - サイズ: 各図表は1つの概念に集中し、フォントは十分に読みやすいサイズにします。図表が広くなりすぎる場合は、エディタで縮小表示されるのを避けるため、分割します。
- 入力言語の反映 — ユーザーの使用言語と同じ言語で応答します。
スクリプト
scripts/mmd2png.py— Mermaid → PNG (デフォルトはローカルのみ; リモートはMMD2PNG_BACKENDでオプトイン):python3 scripts/mmd2png.py '<f>.mmd' '<f>.diagram.png' [--scale 2] [--size 1600] [--theme forest]scripts/chart.py— CSV データ (2列: ラベル, 値) → PNG:uv run --with matplotlib python3 scripts/chart.py '<f>.csv' '<f>.diagram.png' <bar|pie|line>
