generate-workflow-diagram
À propos
Cette compétence génère des diagrammes de flux Mermaid thématiques à partir de données de workflow, proposant 9 thèmes (dont 4 options adaptées aux daltoniens) et plusieurs modes de sortie. Elle prend en charge des fonctionnalités interactives comme des nœuds cliquables et permet d'intégrer les diagrammes dans des documents README, Quarto ou R Markdown. Utilisez-la pour visualiser des workflows annotés, régénérer des diagrammes après des modifications, ou adapter les visuels pour différents publics.
Installation rapide
Claude Code
Recommandénpx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/generate-workflow-diagramCopiez et collez cette commande dans Claude Code pour installer cette compétence
Documentation
ワークフロー図の生成
putiorワークフローデータからテーマ付きMermaidフローチャート図を生成し、ドキュメントに埋め込む。
使用タイミング
- ソースファイルのアノテーション後に視覚的な図を生成する準備ができた時
- ワークフロー変更後に図を再生成する時
- 異なるオーディエンスのためにテーマや出力形式を切り替える時
- README、Quarto、またはR Markdownドキュメントにワークフロー図を埋め込む時
入力
- 必須:
put()、put_auto()、またはput_merge()からのワークフローデータ - 任意: テーマ名(デフォルト:
"light"; オプション: light, dark, auto, minimal, github, viridis, magma, plasma, cividis) - 任意: 出力先: コンソール、ファイルパス、クリップボード、または生文字列
- 任意: インタラクティブ機能:
show_source_info、enable_clicks
手順
ステップ1: ワークフローデータの抽出
3つのソースのいずれかからワークフローデータを取得する。
library(putior)
# From manual annotations
workflow <- put("./src/")
# From manual annotations, excluding specific files
workflow <- put("./src/", exclude = c("build-workflow\\.R$", "test_"))
# From auto-detection only
workflow <- put_auto("./src/")
# From merged (manual + auto)
workflow <- put_merge("./src/", merge_strategy = "supplement")
ワークフローデータフレームにはアノテーションからの node_type 列が含まれる場合がある。ノードタイプはMermaidの図形を制御する:
node_type | Mermaid図形 | 用途 |
|---|---|---|
"input" | スタジアム ([...]) | データソース、設定ファイル |
"output" | サブルーチン [[...]] | 生成されたアーティファクト、レポート |
"process" | 長方形 [...] | 処理ステップ(デフォルト) |
"decision" | ひし形 {...} | 条件分岐ロジック |
"start" / "end" | スタジアム ([...]) | エントリ/ターミナルノード |
各 node_type は、テーマベースのスタイリング用に対応するCSSクラス(例: class nodeId input;)も受け取る。
期待結果: id、label を含み、任意で input、output、source_file、node_type 列を含む1行以上のデータフレーム。
失敗時: データフレームが空の場合、アノテーションまたはパターンが見つからなかった。まず analyze-codebase-workflow を実行するか、put("./src/", validate = TRUE) でアノテーションが構文的に有効であることを確認する。
ステップ2: テーマとオプションの選択
ターゲットオーディエンスに適したテーマを選択する。
# List all available themes
get_diagram_themes()
# Standard themes
# "light" — Default, bright colors
# "dark" — For dark mode environments
# "auto" — GitHub-adaptive with solid colors
# "minimal" — Grayscale, print-friendly
# "github" — Optimized for GitHub README files
# Colorblind-safe themes (viridis family)
# "viridis" — Purple→Blue→Green→Yellow, general accessibility
# "magma" — Purple→Red→Yellow, high contrast for print
# "plasma" — Purple→Pink→Orange→Yellow, presentations
# "cividis" — Blue→Gray→Yellow, maximum accessibility (no red-green)
追加パラメータ:
direction: 図のフロー方向 —"TD"(上から下、デフォルト)、"LR"(左から右)、"RL"、"BT"show_artifacts:TRUE/FALSE— アーティファクトノード(ファイル、データ)を表示; 大きなワークフローではノイズが多くなる可能性がある(例: 16以上の追加ノード)show_workflow_boundaries:TRUE/FALSE— 各ソースファイルのノードをMermaidサブグラフで囲むsource_info_style: ソースファイル情報のノード上での表示方法(例: サブタイトルとして)node_labels: ノードラベルテキストのフォーマット
期待結果: テーマ名が出力される。文脈に基づいて1つを選択する。
失敗時: テーマ名が認識されない場合、put_diagram() は "light" にフォールバックする。スペルを確認する。
ステップ3: put_theme() によるカスタムパレット(任意)
9つの組み込みテーマがプロジェクトのパレットに合わない場合、put_theme() でカスタムテーマを作成する。
# Create custom palette — unspecified types inherit from base theme
cyberpunk <- put_theme(
base = "dark",
input = c(fill = "#1a1a2e", stroke = "#00ff88", color = "#00ff88"),
process = c(fill = "#16213e", stroke = "#44ddff", color = "#44ddff"),
output = c(fill = "#0f3460", stroke = "#ff3366", color = "#ff3366"),
decision = c(fill = "#1a1a2e", stroke = "#ffaa33", color = "#ffaa33")
)
# Use the palette parameter (overrides theme when provided)
mermaid_content <- put_diagram(workflow, palette = cyberpunk, output = "raw")
writeLines(mermaid_content, "workflow.mmd")
put_theme() は input、process、output、decision、artifact、start、end のノードタイプを受け付ける。各タイプは名前付きベクトル c(fill = "#hex", stroke = "#hex", color = "#hex") を取る。未設定のタイプは base テーマから継承される。
期待結果: カスタムclassDefラインを含むMermaid出力。node_type による図形は保持され、色のみが変更される。すべてのノードタイプは stroke-width:2px を使用 — put_theme() によるオーバーライドは現在サポートされていない。
失敗時: パレットオブジェクトが putior_theme クラスでない場合、put_diagram() は説明的なエラーを発生させる。生のリストではなく put_theme() の戻り値を渡していることを確認する。
フォールバック — 手動classDef置換: put_theme() が提供する以上の細かい制御が必要な場合(例:タイプごとのストローク幅)、ベーステーマで生成してclassDefラインを手動で置換する:
mermaid_content <- put_diagram(workflow, theme = "dark", output = "raw")
lines <- strsplit(mermaid_content, "\n")[[1]]
lines <- lines[!grepl("^\\s*classDef ", lines)]
custom_defs <- c(" classDef input fill:#1a1a2e,stroke:#00ff88,stroke-width:3px,color:#00ff88")
mermaid_content <- paste(c(lines, custom_defs), collapse = "\n")
ステップ4: Mermaid出力の生成
希望の出力モードで図を生成する。
# Print to console (default)
cat(put_diagram(workflow, theme = "github"))
# Save to file
writeLines(put_diagram(workflow, theme = "github"), "docs/workflow.md")
# Get raw string for embedding
mermaid_code <- put_diagram(workflow, output = "raw", theme = "github")
# With source file info (shows which file each node comes from)
cat(put_diagram(workflow, theme = "github", show_source_info = TRUE))
# With clickable nodes (for VS Code, RStudio, or file:// protocol)
cat(put_diagram(workflow,
theme = "github",
enable_clicks = TRUE,
click_protocol = "vscode" # or "rstudio", "file"
))
# Full-featured
cat(put_diagram(workflow,
theme = "viridis",
show_source_info = TRUE,
enable_clicks = TRUE,
click_protocol = "vscode"
))
期待結果: flowchart TD(または方向に応じて LR)で始まる有効なMermaidコード。ノードがデータフローを示す矢印で接続されている。
失敗時: 出力がノードのない flowchart TD の場合、ワークフローデータフレームが空である。接続が欠落している場合、ノード間で出力ファイル名が入力ファイル名と完全に一致していることを確認する。
ステップ5: ターゲットドキュメントへの埋め込み
適切なドキュメント形式に図を挿入する。
GitHub README(```mermaidコードフェンス):
## Workflow
```mermaid
flowchart TD
A["Extract Data"] --> B["Transform"]
B --> C["Load"]
```
Quartoドキュメント(knit_childによるネイティブmermaidチャンク):
# Chunk 1: Generate code (visible, foldable)
workflow <- put("./src/")
mermaid_code <- put_diagram(workflow, output = "raw", theme = "github")
# Chunk 2: Output as native mermaid chunk (hidden)
#| output: asis
#| echo: false
mermaid_chunk <- paste0("```{mermaid}\n", mermaid_code, "\n```")
cat(knitr::knit_child(text = mermaid_chunk, quiet = TRUE))
R Markdown(mermaid.js CDNまたはDiagrammeR使用):
DiagrammeR::mermaid(put_diagram(workflow, output = "raw"))
期待結果: ターゲット形式で図が正しくレンダリングされること。GitHubはmermaidコードフェンスをネイティブにレンダリングする。
失敗時: GitHubが図をレンダリングしない場合、コードフェンスが正確に ```mermaid を使用していることを確認する(追加属性なし)。Quartoの場合、{mermaid} チャンクでの直接変数補間はサポートされていないため、knit_child() アプローチが使用されていることを確認する。
バリデーション
-
put_diagram()が有効なMermaidコードを生成する(flowchartで始まる) - 期待されるすべてのノードが図に表示される
- 接続されたノード間にデータフロー接続(矢印)が存在する
- 選択したテーマが適用されている(出力のinitブロックでテーマ固有の色を確認)
- ターゲット形式(GitHub、Quartoなど)で図が正しくレンダリングされる
よくある落とし穴
- 空の図: 通常
put()が行を返さなかったことを意味する。アノテーションが存在し構文的に有効であることを確認する - すべてのノードが切断: 出力ファイル名がノード間で入力ファイル名と完全に一致する必要がある(拡張子を含む)。
data.csvとData.csvは異なる - GitHubでテーマが見えない: GitHubのmermaidレンダラーはテーマサポートが限定的である。
"github"テーマはGitHubレンダリング用に特別に設計されている。%%{init:...}%%テーマブロックは一部のレンダラーで無視される場合がある - Quartoのmermaid変数補間: Quartoの
{mermaid}チャンクはR変数を直接サポートしない。ステップ5で説明したknit_child()テクニックを使用する - クリック可能なノードが機能しない: クリックディレクティブはMermaidインタラクションイベントをサポートするレンダラーが必要。GitHubの静的レンダラーはクリックをサポートしない。ローカルMermaidレンダラーまたはputior Shinyサンドボックスを使用する
- 自己参照メタパイプラインファイル: 図を生成するビルドスクリプトを含むディレクトリをスキャンすると、重複するサブグラフIDとMermaidエラーが発生する。
excludeパラメータを使用してスキャン時にスキップする:workflow <- put("./src/", exclude = c("build-workflow\\.R$", "build-workflow\\.js$")) show_artifacts = TRUEがノイズ過多: 大きなプロジェクトでは多くのアーティファクトノード(10-20以上)が生成され、図が散らかる。show_artifacts = FALSEを使用し、node_typeアノテーションに依存して主要な入出力を明示的にマークする
関連スキル
annotate-source-files— 前提条件: 図の生成前にファイルがアノテーションされている必要があるanalyze-codebase-workflow— 自動検出が手動アノテーションを補完できるsetup-putior-ci— CI/CDでの図の再生成を自動化するcreate-quarto-report— Quartoレポートに図を埋め込むbuild-pkgdown-site— pkgdownドキュメントサイトに図を埋め込む
Dépôt GitHub
Compétences associées
content-collections
MétaCette compétence propose une configuration éprouvée en production pour Content Collections, un outil axé sur TypeScript qui transforme des fichiers Markdown/MDX en collections de données typées de manière sûre avec une validation Zod. Utilisez-la lors de la création de blogs, de sites de documentation ou d'applications Vite + React riches en contenu pour garantir la sécurité de typage et la validation automatique du contenu. Elle couvre tout, de la configuration du plugin Vite et de la compilation MDX à l'optimisation des déploiements et la validation des schémas.
polymarket
MétaCette compétence permet aux développeurs de créer des applications avec la plateforme de marchés prédictifs Polymarket, incluant l'intégration d'API pour le trading et les données de marché. Elle fournit également une diffusion de données en temps réel via WebSocket pour surveiller les transactions en direct et l'activité du marché. Utilisez-la pour mettre en œuvre des stratégies de trading ou pour créer des outils traitant les mises à jour de marché en direct.
creating-opencode-plugins
MétaCette compétence aide les développeurs à créer des plugins OpenCode qui s'interconnectent avec plus de 25 types d'événements tels que les commandes, les fichiers et les opérations LSP. Elle fournit la structure du plugin, les spécifications de l'API événementielle et les modèles d'implémentation pour les modules JavaScript/TypeScript. Utilisez-la lorsque vous avez besoin d'intercepter, de surveiller ou d'étendre le cycle de vie de l'assistant IA OpenCode avec une logique personnalisée pilotée par les événements.
sglang
MétaSGLang est un framework de service LLM haute performance spécialisé dans la génération rapide et structurée pour les workflows JSON, regex et agentiques grâce à son cache de préfixe RadixAttention. Il offre une inférence nettement plus rapide, particulièrement pour les tâches avec des préfixes répétés, ce qui le rend idéal pour les sorties complexes et structurées ainsi que les conversations multi-tours. Choisissez SGLang plutôt que des alternatives comme vLLM lorsque vous avez besoin d'un décodage contraint ou que vous construisez des applications avec un partage étendu de préfixes.
