LLM(大規模言語モデル)を活用したアプリケーション開発が加速する中、エージェントの挙動やワークフローが 複雑になりすぎて管理が大変… と感じたことはありませんか?
「このフロー、どこで分岐してるんだっけ?」
「処理の流れがコードだけでは分かりにくい…」
「変更を加えたけど、ちゃんと動作するか不安…」
そんな悩みを解決するのが LangGraphのMermaid出力機能 です!
LangGraphは、LLMのワークフローを グラフベース で管理できる強力なツールです。そしてMermaid出力機能を使えば、これらのワークフローを 視覚的に可視化 し、フローの理解・管理を劇的にラクにすることができます。
本記事では、
✅ LangGraphの基本とMermaid出力機能の使い方
✅ 実際のコード例と視覚的なフローチャートの生成
✅ スナップショットテストやドキュメント作成への活用方法
✅ 運用する上での注意点とベストプラクティス
といった内容を 開発者目線でわかりやすく解説 します!
LangGraphを使って、LLMアプリケーションのワークフロー管理を より直感的に、スマートに してみませんか?
それでは、早速見ていきましょう! 🚀
【本記事のもくじ】
1. LangGraphとは? 🏗
LangGraphの概要
LangGraphは、LangChainのツール群の一つ で、グラフ構造を用いてLLMの処理フローを管理するためのフレームワーク です。
LLMアプリケーションでは、エージェントが複数のタスクを実行するため、フローが複雑になりがちです。LangGraphを使用することで、エージェントの状態管理や処理の流れを 明確に定義 できます。
LangGraphの主な特徴
✅ 状態管理のサポート
LLMの処理フローをノード(node)として定義し、それらをエッジ(edge)でつなぐことで、動作の流れを管理できます。
✅ 柔軟なフロー制御
通常の順次処理だけでなく、分岐や条件付きの処理も簡単に設定可能です。
✅ LLMと独立した設計
LangGraph自体はLLMの実行に依存せず、どんなワークフローにも適用できます。
2. LangGraphのMermaid出力機能とは? 🎨
LangGraphには、作成したグラフを Mermaidフォーマット で出力する機能があります。
Mermaidとは?
Mermaidは、Markdownのようなシンプルな記法で フローチャートやシーケンス図 を描画できるツールです。
LangGraphのMermaid出力機能を使うと、作成したグラフを簡単に視覚化できます。
例えば、以下のコードでグラフを作成し、Mermaid形式で出力できます。
サンプルコード
from typing_extensions import TypedDict
from langgraph.graph import StateGraph
class State(TypedDict):
value: str
def node(state: State):
return {"value": "1"}
def node2(state: State):
return {"value": "2"}
graph_builder = StateGraph(State)
graph_builder.add_node("node", node)
graph_builder.add_node("node2", node2)
graph_builder.add_edge("node", "node2")
graph_builder.set_entry_point("node")
graph_builder.set_finish_point("node2")
graph = graph_builder.compile()
# Mermaid形式で出力
print(graph.get_graph().draw_mermaid())
出力されるMermaidフロー
%%{init: {'flowchart': {'curve': 'linear'}}}%%
graph TD;
__start__([__start__]):::first
node(node)
node2(node2)
__end__([__end__]):::last
__start__ --> node;
node --> node2;
node2 --> __end__;
classDef default fill:#f2f0ff,line-height:1.2
classDef first fill-opacity:0
classDef last fill:#bfb6fc
このように、コードのワークフローを 即座にフローチャート化 できるのが最大のメリットです。
3. Mermaid出力機能の活用方法 🔍
(1) スナップショットテスト
LangGraphのMermaid出力機能は、スナップショットテスト にも活用できます。
スナップショットテストとは、特定の状態を「スナップショット」として保存し、後の実装変更が意図しない影響を及ぼしていないか確認するテスト手法です。
例えば、以下のように Mermaid形式のスナップショットを保存 し、前回のものと比較することで ワークフローの変更を検出 できます。
def test_graph():
graph = RuleBaseCheckGraph().compile()
mermaid_output = graph.get_graph().draw_mermaid()
expected_mermaid = """
graph TD;
__start__ --> step1;
step1 --> step2;
step2 --> __end__;
"""
assert mermaid_output.strip() == expected_mermaid.strip()
この方法を使えば、意図しないフローの変更を防ぐ ことができます。
(2) 開発ドキュメントの自動生成
Mermaidのグラフを 開発ドキュメントとして活用 することも可能です。
例えば、以下のような方法で GitHubのREADMEやNotion に自動でアップロードすることで、開発者がワークフローをすぐに把握できます。
with open("workflow.md", "w") as f:
f.write("```mermaid\n" + graph.get_graph().draw_mermaid() + "\n```")
開発チーム全体で 仕様を統一しやすくなる ため、コードの可読性とメンテナンス性が向上します。
4. Mermaid出力を行う際の注意点 ⚠️
(1) Mermaidで使用できない文字に注意
Mermaidでは、一部の特殊文字(コロン :
など)が正しくレンダリングされない場合があります。
例えば、次のようなノード名を使用すると問題が発生する可能性があります。
graph_builder.add_node("A: Node a", lambda: {"value": "1"})
このようなケースでは、コロン :
をアンダースコア _
に置き換えるなどの対策が必要です。
(2) 条件付き分岐の扱い
条件分岐を含むフローをMermaidに出力する際は、LangGraphの add_conditional_edges
メソッドの使い方に注意 する必要があります。
例えば、戻り値の型を Literal
に指定しないと、Mermaidの描画結果が不正確になることがあります。
def routing() -> Literal["node_a", "__end__"]:
return "node_a"
もし Literal
を使えない場合は、path_map
を指定する ことで正しいフローを出力できます。
graph_builder.add_conditional_edges(
source="node_c",
path=routing,
path_map=['node_a', '__end__']
)
まとめ 🎯
✅ LangGraphのMermaid出力機能を使えば、LLMワークフローの可視化が簡単にできる
✅ スナップショットテストに活用すれば、意図しないフローの変更を防げる
✅ 開発ドキュメントとしてMermaidグラフを共有すると、チーム全体の生産性が向上する
LLMアプリケーション開発を より直感的に管理したい方 は、ぜひLangGraphのMermaid出力機能を試してみてください! 🚀