flowchart-generator について
flowchart-generator は、構造化されたプロセス定義をフローチャートに変換する Python ツールです。Python DSL、YAML、JSONを入力に使え、複数の形式に出力できます。
主な機能
- 01Python DSL、YAML、JSON入力
- 02標準的なフローチャート記号
- 03複数の担当者向けスイムレーン
- 04スタイルプリセットとレイアウト方向
- 05PNG、SVG、PDF、DOTへの出力
活用シーン
- 01YAML定義からプロセスを図式化
- 02部門間の担当範囲を表示
- 03ワークフロー図をSVGまたはPDFで出力
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dkyazzentwatwa/ chatgpt-skills --skill flowchart-generatorインストール後、Claude Code で/flowchart-generatorを入力して読み込まれたか確認します。
同梱ファイルscripts/flowchart_gen.pyscripts/requirements.txt
詳細
フローチャートジェネレーター
構造化されたプロセス定義から、プロフェッショナルなフローチャートを作成します。標準的なフローチャート記号(開始/終了、処理、判断、入出力)、複数のアクターが関わるプロセス向けのスイムレーン、複数のエクスポート形式に対応しています。
クイックスタート
from scripts.flowchart_gen import FlowchartGenerator
# Using Python DSL
flow = FlowchartGenerator()
flow.start("Start")
flow.process("Step 1", id="s1")
flow.decision("Check?", id="d1")
flow.process("Yes Path", id="yes")
flow.process("No Path", id="no")
flow.end("End")
flow.connect("Start", "s1")
flow.connect("s1", "d1")
flow.connect("d1", "yes", label="Yes")
flow.connect("d1", "no", label="No")
flow.connect("yes", "End")
flow.connect("no", "End")
flow.generate().save("flowchart.png")
# From YAML file
flow = FlowchartGenerator()
flow.from_yaml("process.yaml")
flow.generate().save("process.png")
特長
- 複数の入力ソース:Python DSL、YAML、JSON
- 標準図形:開始/終了、処理、判断、入出力、コネクター
- スイムレーン:複数のアクター/部門が関わるプロセス図
- スタイルプリセット:ビジネス、技術、ミニマルのテーマ
- レイアウトオプション:上から下、左から右など
- エクスポート形式:PNG、SVG、PDF、DOT
API リファレンス
初期化
flow = FlowchartGenerator()
ノードの作成(DSL)
# Start node (oval/ellipse)
flow.start("Start")
flow.start("Begin Process", id="start1")
# End node (oval/ellipse)
flow.end("End")
flow.end("Process Complete", id="end1")
# Process node (rectangle)
flow.process("Process Data")
flow.process("Calculate Total", id="calc")
# Decision node (diamond)
flow.decision("Valid?", id="check")
flow.decision("Amount > 100?", id="d1")
# Input/Output node (parallelogram)
flow.input_output("User Input", id="input1")
flow.input_output("Display Result", id="output1")
# Connector (circle) - for complex flows
flow.connector("A", id="conn_a")
接続
# Basic connection
flow.connect("start", "process1")
# With label
flow.connect("decision1", "yes_path", label="Yes")
flow.connect("decision1", "no_path", label="No")
# Multiple connections from decision
flow.decision("Approved?", id="d1")
flow.connect("d1", "approve_path", label="Yes")
flow.connect("d1", "reject_path", label="No")
ファイルからの読み込み
# From YAML
flow.from_yaml("process.yaml")
# From JSON
flow.from_json("process.json")
スイムレーン
# Define swimlanes
flow.swimlanes([
"Customer",
"Sales Team",
"Fulfillment"
])
# Add nodes to specific lanes
flow.process("Place Order", id="order", lane="Customer")
flow.process("Review Order", id="review", lane="Sales Team")
flow.process("Ship Order", id="ship", lane="Fulfillment")
スタイリング
# Style presets
flow.style("business") # Professional blue theme
flow.style("technical") # Gray technical theme
flow.style("minimal") # Clean minimal theme
flow.style("colorful") # Vibrant colors
# Layout direction
flow.layout("TB") # Top to Bottom (default)
flow.layout("LR") # Left to Right
flow.layout("BT") # Bottom to Top
flow.layout("RL") # Right to Left
# Custom colors
flow.node_colors({
'start': '#2ecc71',
'end': '#e74c3c',
'process': '#3498db',
'decision': '#f39c12',
'io': '#9b59b6'
})
生成とエクスポート
# Generate
flow.generate()
# Save
flow.save("chart.png")
flow.save("chart.svg")
flow.save("chart.pdf")
flow.save("chart.dot") # GraphViz source
# Get DOT source
dot_source = flow.to_dot()
# Show in viewer
flow.show()
データ形式
YAML 形式
# process.yaml
title: Order Processing
layout: TB
style: business
nodes:
- id: start
type: start
label: Start
- id: receive
type: process
label: Receive Order
- id: check_stock
type: decision
label: In Stock?
- id: fulfill
type: process
label: Fulfill Order
- id: backorder
type: process
label: Create Backorder
- id: notify
type: io
label: Notify Customer
- id: end
type: end
label: End
connections:
- from: start
to: receive
- from: receive
to: check_stock
- from: check_stock
to: fulfill
label: "Yes"
- from: check_stock
to: backorder
label: "No"
- from: fulfill
to: notify
- from: backorder
to: notify
- from: notify
to: end
JSON 形式
{
"title": "Order Processing",
"layout": "TB",
"style": "business",
"nodes": [
{"id": "start", "type": "start", "label": "Start"},
{"id": "process1", "type": "process", "label": "Process Data"},
{"id": "decision1", "type": "decision", "label": "Valid?"},
{"id": "end", "type": "end", "label": "End"}
],
"connections": [
{"from": "start", "to": "process1"},
{"from": "process1", "to": "decision1"},
{"from": "decision1", "to": "end", "label": "Yes"}
]
}
スイムレーン YAML 形式
title: Customer Service Process
layout: LR
swimlanes:
- Customer
- Support Agent
- Technical Team
nodes:
- id: submit
type: start
label: Submit Ticket
lane: Customer
- id: review
type: process
label: Review Ticket
lane: Support Agent
- id: technical
type: decision
label: Technical Issue?
lane: Support Agent
- id: escalate
type: process
label: Escalate
lane: Technical Team
- id: resolve
type: process
label: Resolve
lane: Support Agent
- id: close
type: end
label: Close Ticket
lane: Customer
connections:
- from: submit
to: review
- from: review
to: technical
- from: technical
to: escalate
label: "Yes"
- from: technical
to: resolve
label: "No"
- from: escalate
to: resolve
- from: resolve
to: close
CLI の使い方
# From YAML
python flowchart_gen.py --input process.yaml --output flowchart.png
# From JSON with custom layout
python flowchart_gen.py --input process.json --layout LR --output flow.png
# With style preset
python flowchart_gen.py --input workflow.yaml --style business --output workflow.svg
# High resolution
python flowchart_gen.py --input process.yaml --output chart.png --dpi 300
CLI 引数
| 引数 | 説明 | デフォルト |
|---|---|---|
--input | 入力する YAML または JSON ファイル | 必須 |
--output | 出力ファイルのパス | flowchart.png |
--layout | レイアウトの方向(TB、LR、BT、RL) | TB |
--style | スタイルプリセット | business |
--dpi | 画像の解像度 | 96 |
例
シンプルな直線フロー
flow = FlowchartGenerator()
flow.start("Start")
flow.process("Step 1", id="s1")
flow.process("Step 2", id="s2")
flow.process("Step 3", id="s3")
flow.end("End")
flow.connect("Start", "s1")
flow.connect("s1", "s2")
flow.connect("s2", "s3")
flow.connect("s3", "End")
flow.generate().save("linear.png")
判断フロー
flow = FlowchartGenerator()
flow.start("Start")
flow.input_output("Get Input", id="input")
flow.decision("Valid?", id="check")
flow.process("Process", id="proc")
flow.input_output("Show Error", id="error")
flow.end("End")
flow.connect("Start", "input")
flow.connect("input", "check")
flow.connect("check", "proc", label="Yes")
flow.connect("check", "error", label="No")
flow.connect("proc", "End")
flow.connect("error", "input") # Loop back
flow.style("business")
flow.generate().save("decision_flow.png")
ログインプロセス
flow = FlowchartGenerator()
flow.start("Start")
flow.input_output("Enter Credentials", id="creds")
flow.process("Validate", id="validate")
flow.decision("Valid?", id="check")
flow.decision("Attempts < 3?", id="attempts")
flow.process("Login Success", id="success")
flow.input_output("Show Error", id="error")
flow.process("Lock Account", id="lock")
flow.end("End")
flow.connect("Start", "creds")
flow.connect("creds", "validate")
flow.connect("validate", "check")
flow.connect("check", "success", label="Yes")
flow.connect("check", "attempts", label="No")
flow.connect("attempts", "creds", label="Yes")
flow.connect("attempts", "lock", label="No")
flow.connect("success", "End")
flow.connect("lock", "End")
flow.layout("TB")
flow.style("technical")
flow.generate().save("login_flow.png")
スイムレーンを使った注文処理
flow = FlowchartGenerator()
flow.swimlanes(["Customer", "System", "Warehouse"])
flow.start("Order Placed", id="start", lane="Customer")
flow.process("Validate Order", id="validate", lane="System")
flow.decision("In Stock?", id="stock", lane="System")
flow.process("Reserve Items", id="reserve", lane="Warehouse")
flow.process("Backorder", id="backorder", lane="Warehouse")
flow.process("Process Payment", id="payment", lane="System")
flow.process("Ship Order", id="ship", lane="Warehouse")
flow.end("Complete", id="end", lane="Customer")
flow.connect("start", "validate")
flow.connect("validate", "stock")
flow.connect("stock", "reserve", label="Yes")
flow.connect("stock", "backorder", label="No")
flow.connect("reserve", "payment")
flow.connect("backorder", "payment")
flow.connect("payment", "ship")
flow.connect("ship", "end")
flow.layout("TB")
flow.generate().save("order_swimlane.png")
ノードの図形
| 種類 | 図形 | 用途 |
|---|---|---|
start | 楕円 | フローの開始 |
end | 楕円 | フローの終了 |
process | 長方形 | アクションまたはステップ |
decision | ひし形 | はい/いいえの分岐 |
io | 平行四辺形 | 入出力 |
connector | 円 | ページ/フローの接続点 |
スタイルプリセット
| プリセット | 説明 |
|---|---|
business | プロフェッショナルな青系の色調 |
technical | グレー/シルバーの技術的な外観 |
minimal | 黒と白のシンプルなスタイル |
colorful | 鮮やかな多色使い |
依存関係
graphviz>=0.20.0
PyYAML>=6.0
システム要件:システムに Graphviz がインストールされている必要があります。
- macOS:
brew install graphviz - Ubuntu:
apt-get install graphviz - Windows:graphviz.org からダウンロードしてください
制限事項
- 複雑な入れ子の判断には、手動でレイアウトを調整する必要がある場合があります
- スイムレーンの描画は、graphviz のサブグラフ対応に依存します
- 非常に大きなフローチャート(ノードが 50 個以上)は読みにくくなる場合があります
- ノードの正確な位置を細かく制御する機能には限りがあります
コメント
Markdown 対応