mcpField
F
flowchart-generator

flowchart-generator

github.com/dkyazzentwatwaドキュメント12469 回インストール29 週間前に更新
リポジトリ

flowchart-generator について

flowchart-generator は、構造化されたプロセス定義をフローチャートに変換する Python ツールです。Python DSL、YAML、JSONを入力に使え、複数の形式に出力できます。

主な機能

  1. 01Python DSL、YAML、JSON入力
  2. 02標準的なフローチャート記号
  3. 03複数の担当者向けスイムレーン
  4. 04スタイルプリセットとレイアウト方向
  5. 05PNG、SVG、PDF、DOTへの出力

活用シーン

  1. 01YAML定義からプロセスを図式化
  2. 02部門間の担当範囲を表示
  3. 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 個以上)は読みにくくなる場合があります
  • ノードの正確な位置を細かく制御する機能には限りがあります

コメント