AIツール比較

LangGraphとLangChainの違い7選|使い分け【2026年10月】

LangGraphとLangChainの違い7選|使い分け【2026年10月】

この記事の結論

langgraph langchain 違いを2026年10月4日時点の公式情報で整理。役割・状態管理・人手承認など7観点とコード例から、LangChain、LangGraph、併用の判断基準が分かります。

社内の注文照会エージェントを作り、モデルと検索ツールまではつながった。

ところが「重要な処理だけ担当者の承認を挟みたい」「障害後に保存した状態から再開したい」となった瞬間、LangChainのまま進めるか、LangGraphを直接使うかで設計会議が止まります。

LangGraphとLangChainの違いは、2026年10月4日時点では「標準的なエージェントを素早く組み立てる高水準フレームワーク」と「状態を持つ実行フローを細かく制御する低水準ランタイム」の違いです。

検索意図への直答:モデル、ツール、プロンプト、ミドルウェアを標準APIで組み合わせたいならLangChainが第一候補です。独自の状態、分岐、反復、停止・再開、人手承認を実行フローとして設計したいならLangGraphを直接使います。

  • LangChain:create_agentを中心に、一般的なツール利用エージェントを短く組み立てる
  • LangGraph:StateGraphなどで、状態と遷移をノード単位に制御する
  • 併用:LangChainのエージェントはLangGraph上で動くため、両者は競合というより高水準と低水準の関係にある

迷ったらLangChainから始め、標準のエージェントループでは表現しにくい制御が出た部分だけLangGraphへ降りるのが実務的です。単発のモデル呼び出しや固定変換だけなら、どちらも使わず各社SDKと通常のアプリケーションコードで足りる場合もあります。

30秒で選ぶなら、見るべきは「複雑さ」ではなく制御権

30秒で選ぶなら、見るべきは「複雑さ」ではなく制御権
30秒で選ぶなら、見るべきは「複雑さ」ではなく制御権

「処理が複雑そうだからLangGraph」という選び方では、必要以上に設計を重くしがちです。判断基準は、アプリ側がどこまで実行順序と状態を所有したいかです。

要件 第一候補 判断理由
モデルに複数のツールを選ばせたい LangChain create_agentで標準的なモデル・ツールループを組みやすい
プロンプト、モデル、出力整形を順につなぎたい LangChainのコンポーネント Runnableとして小さな処理を合成しやすい
条件分岐や戻り先をコードで固定したい LangGraph State、Node、Edgeとして遷移を明示できる
承認待ちで止め、後から再開したい LangGraph、またはLangChainの承認ミドルウェア 任意位置の制御ならLangGraph、ツール実行前の標準承認ならLangChainでも対応できる
標準エージェントの一部分だけ独自制御したい 併用 LangGraphのノード内でLangChainのモデルやツールを利用できる
単発のモデル呼び出しだけ どちらも不要な場合がある 抽象化を増やすより、提供元SDKで十分なことがある

AIエージェント全体の選択肢を先に俯瞰したい場合は、AIエージェント構築ツール比較ガイドもあわせて確認してください。

「チェーン対グラフ」だけでは現在の違いを説明できない

「チェーン対グラフ」だけでは現在の違いを説明できない
「チェーン対グラフ」だけでは現在の違いを説明できない

LangChainは高水準のエージェントフレームワーク

LangChain公式は、現在のLangChainをエージェントフレームワークと位置づけています。中心となるcreate_agentは、モデル、ツール、システムプロンプト、ミドルウェアをまとめ、モデルが必要なツールを呼びながら完了まで進む標準ループを提供します。モデルプロバイダーの違いを吸収するインターフェースや、ツール定義、構造化出力、ガードレールなどを同じ考え方で扱えるのが強みです。

歴史的にLangChainは「コンポーネントを鎖のようにつなぐ」説明で広まりました。しかし、公式のLangChain v1移行ガイドでは、旧来のLLMChainやConversationChainなどはlangchain-classicへ移されています。2026年の比較で「LangChainは直線的なチェーンしか扱えない」と書くのは不正確です。

LangGraphは状態を持つオーケストレーションランタイム

LangGraphは、長時間動くステートフルなエージェント向けの低水準オーケストレーションフレームワーク兼ランタイムです。共有状態をState、処理をNode、遷移をEdgeとして表し、決定論的な業務ロジックとLLMによる判断を同じグラフに置けます。公式のLangGraph overviewは、耐久実行、ストリーミング、人手介入、永続化を主要な能力として挙げています。

LangGraphの公式例はLangChainのモデルやツールをよく使いますが、LangChainは必須ではありません。各社SDKや独自関数もNodeに置けます。Graph APIのほかにFunctional APIもあります。

現在はLangChainの下でLangGraphが動く

公式の製品レイヤー解説では、LangChainをエージェントフレームワーク、LangGraphをオーケストレーションランタイムとして区別しています。LangChainのエージェントはLangGraph上に構築されるため、二者択一ではありません。

LangGraphとLangChainの違い7選

LangGraphとLangChainの違い7選
LangGraphとLangChainの違い7選
比較軸 LangChain LangGraph
1. 主な役割 エージェントの部品と標準ハーネスを提供 状態を持つ実行フローを制御
2. 抽象度 高水準。少ない構成要素から始めやすい 低水準。制御の代わりに設計項目が増える
3. 中心API create_agent、モデル、ツール、ミドルウェア StateGraph、State、Node、Edge、interrupt()
4. フロー制御 標準的なエージェントループを任せやすい 分岐、反復、再試行、並列、終了条件を明示しやすい
5. 状態と再開 標準エージェントでは内部のLangGraph能力を利用 チェックポイントとスレッドを直接設計できる
6. 人手介入 ミドルウェアでツール実行前の承認を設定できる 任意ノードで停止し、入力後に再開できる
7. 向く状況 標準パターンを速く立ち上げたい 実行順序と状態をアプリ要件どおりに所有したい

1. 役割:部品と標準ハーネスか、実行制御か

LangChainはモデルやツールを共通インターフェースで組み、一般的なエージェントを立ち上げます。LangGraphは「次にどこへ進むか」「何を状態に残すか」を制御します。

2. 抽象度:速い着手か、細かな設計か

LangChainは標準のエージェントループを提供します。LangGraphは状態スキーマや遷移の設計が増える一方、処理経路をレビューしやすくなります。独自制御の必要量で選びます。

3. API:create_agentか、State・Node・Edgeか

LangChainではモデル、ツール、プロンプト、ミドルウェアをcreate_agentへ渡します。LangGraphではState、Node、Edgeを定義してコンパイルするため、フローが暗黙のループに隠れにくくなります。

4. フロー:モデルに任せる範囲が違う

一般的なツール選択はLangChainに任せられます。「結果が不足なら検索へ戻る」「規程に該当したら人へ渡す」のように、業務規則で遷移先を固定するならLangGraphが自然です。

5. 状態:会話履歴だけでなく業務状態を持つか

LangGraphのStateには、メッセージだけでなく判定結果、取得済みデータ、承認状態、エラー種別などを保持できます。ただし、状態を定義しただけで永続化されるわけではありません。公式のPersistenceガイドにあるとおり、短期のスレッド状態にはcheckpointer、スレッドをまたぐ長期データにはstoreを使い分けます。

6. 人手介入:標準承認か、任意位置の停止か

「送信ツールを呼ぶ前に承認する」といった標準的な用途はLangChainのHuman-in-the-loopミドルウェアでも構成できます。生成文を見せて編集してもらい、その値で別ルートへ進むなど、停止位置と再開後の遷移を細かく決めるならLangGraphのinterrupt()が向きます。「人手介入があるから必ずLangGraph」とは限りません。

7. 学び方:まず高水準、必要なら低水準へ

初めてならLangChainでモデル・ツール・メッセージの流れを理解します。承認、障害復旧、複数経路が要件として確定しているなら、LangGraphで状態から設計します。既存のLangChain部品はNode内で再利用できます。

使い分けを決める5つの質問

使い分けを決める5つの質問
使い分けを決める5つの質問

ツール名から選ばず、次の順で要件を確認すると判断しやすくなります。

  1. モデルがツールを選ぶ標準ループで足りるか。 足りるならLangChainを優先します。
  2. 次の処理を業務ルールで固定する必要があるか。 複数の条件分岐や戻り先を持つならLangGraphが候補です。
  3. プロセスをまたいで状態を復元する必要があるか。 必要ならcheckpointerとthread_idを含む永続化設計が要ります。
  4. 人が確認する位置はツール実行前だけか。 標準承認ならLangChain、任意位置の停止や編集ならLangGraphを検討します。
  5. 独自制御の範囲は一部分か。 一部分なら、全体を作り直さずLangChainとLangGraphを併用できます。

事例区分:想定シナリオ

社内規程を検索して回答するだけならLangChainのコンポーネントで十分です。必要に応じて検索ツールを選ばせるならcreate_agentを使います。回答の根拠が不足したら再検索へ戻り、外部操作の前に担当者承認を挟み、後日同じ案件を再開するならLangGraphを直接設計します。

同じ業務で比べる3つの実装例

同じ業務で比べる3つの実装例
同じ業務で比べる3つの実装例

ここでは注文照会を題材に、固定処理、標準エージェント、承認付きグラフの順で構造を比較します。コードは公式の現行APIを基準にした最小構成です。

例1:固定処理ならLangChainのRunnableを合成する

入力を正規化してチケット文面へ変換するだけなら、状態グラフは不要です。

動作環境:Python 3.10以上、langchain-core

from langchain_core.runnables import RunnableLambda

# 注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。
def normalize_order(data: dict) -> dict:
    return {
        "order_id": data["order_id"].strip(),
        "requires_review": bool(data["requires_review"]),
    }

def build_ticket(data: dict) -> str:
    review = "要確認" if data["requires_review"] else "自動処理可"
    return f"注文 {data['order_id']} / {review}"

pipeline = RunnableLambda(normalize_order) | RunnableLambda(build_ticket)
result = pipeline.invoke({"order_id": " A-001 ", "requires_review": True})
print(result)

ポイント:処理順が固定され、途中停止や分岐を業務状態として保存しないなら、この程度の合成で読みやすさを保てます。

例2:標準的なツール利用ならLangChainのcreate_agent

モデルが質問内容を見て注文検索ツールを使う構成です。モデル名は環境変数に置き、鍵をコードへ埋め込みません。

動作環境:Python 3.10以上、langchainと利用するモデルプロバイダーの公式連携パッケージ

import os
from langchain.agents import create_agent
from langchain.tools import tool

# 注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。
@tool
def lookup_order(order_id: str) -> str:
    """承認済みの業務システムから注文状態を取得する。"""
    return f"{order_id}: 確認待ち"

agent = create_agent(
    model=os.environ["LANGCHAIN_MODEL"],
    tools=[lookup_order],
    system_prompt="注文照会に必要な場合だけツールを使ってください。",
)

result = agent.invoke({
    "messages": [
        {"role": "user", "content": "注文A-001の状態を確認して"}
    ]
})
print(result["messages"][-1].content)

ポイント:標準的なツール選択を任せる段階では、独自グラフを先に書く必要はありません。認証、権限、タイムアウト、エラー処理は業務要件に合わせて追加してください。

例3:任意位置で承認待ちにするならLangGraph

入力フラグで処理を分け、確認が必要な案件だけinterrupt()で止めます。再開には同じthread_idを使います。

動作環境:Python 3.10以上、langgraph

from typing import Literal, TypedDict
from langgraph.checkpoint.memory import InMemorySaver
from langgraph.graph import END, START, StateGraph
from langgraph.types import Command, interrupt

# 注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。
class ReviewState(TypedDict):
    request: str
    requires_review: bool
    status: str

def inspect_request(state: ReviewState) -> dict:
    return {"status": "確認済み"}

def choose_path(state: ReviewState) -> Literal["review", "auto"]:
    return "review" if state["requires_review"] else "auto"

def review(state: ReviewState) -> dict:
    approved = interrupt({"question": "この処理を承認しますか?"})
    return {"status": "承認" if approved else "却下"}

def auto(state: ReviewState) -> dict:
    return {"status": "自動処理可"}

builder = StateGraph(ReviewState)
builder.add_node("inspect", inspect_request)
builder.add_node("review", review)
builder.add_node("auto", auto)
builder.add_edge(START, "inspect")
builder.add_conditional_edges(
    "inspect", choose_path, {"review": "review", "auto": "auto"}
)
builder.add_edge("review", END)
builder.add_edge("auto", END)

graph = builder.compile(checkpointer=InMemorySaver())
config = {"configurable": {"thread_id": "review-example"}}
graph.invoke(
    {"request": "注文A-001", "requires_review": True, "status": "受付"},
    config,
)
result = graph.invoke(Command(resume=True), config)
print(result["status"])

ポイント:InMemorySaverは学習用です。公式ドキュメントは、プロセス再起動をまたぐ本番用途では永続チェックポインターを使うよう案内しています。また、割り込みを含むノードは再開時に先頭から再実行されるため、割り込み前の外部送信やレコード追加は避けるか、冪等に設計してください。

LangGraphのStateGraphをさらに掘り下げる場合は、LangGraph完全ガイド|StateGraph実装とv1.2新機能を参照してください。LangChain側の実装は、LangChainでAIエージェントを構築する完全ガイド【2026年最新版】で詳しく扱っています。

併用するときはLangGraphを骨格、LangChainを部品にする

併用時は、LangGraphのNodeにLangChainのモデル、ツール、Retriever、あるいはcreate_agentで作ったエージェントを置きます。LangGraphは「次にどのNodeを動かすか」を担当し、各Node内のLLM呼び出しはLangChainに任せる構成です。

たとえば、規程検索エージェント、回答評価処理、人間の承認、外部システム更新を別Nodeにします。検索エージェントの内部はLangChainで短く保ち、評価が不十分なら検索へ戻すEdgeと、承認後だけ更新へ進むEdgeをLangGraphに持たせます。この分担なら、モデル統合と業務制御を同じ層へ押し込まずに済みます。

LangGraph以外の選択肢も含めて比較したい場合は、Agents SDKか、LangGraphか|2026年のフレームワーク選定指針も判断材料になります。

2026年10月4日時点で押さえる現行仕様

LangChainの現行公開版は1.4.3

PyPIではLangChain 1.4.3が2026年9月28日に公開された現行版として表示されています。Python要件は3.10以上4未満です。固定された古い記事のimport文をそのまま移さず、langchain.agents.create_agentと現行の連携パッケージを公式ドキュメントで確認してください。

LangGraphの現行公開版は1.2.12

PyPIではLangGraph 1.2.12が2026年9月21日に公開された現行版です。公式リリースでは、interrupt()へ再開時入力のresponse_schemaを指定する機能などが記録されています。直近2週間の更新まで確認すると、人手介入は現在もLangGraphの主要な改善領域だと分かります。

create_react_agentではなくcreate_agentを基準にする

LangGraph v1ではlanggraph.prebuilt.create_react_agentが非推奨となり、LangChainのcreate_agentが推奨されています。古いサンプルを読むときは、どの世代のAPIかを先に確認しましょう。なお、LangGraphを直接使うStateGraphまで非推奨になったわけではありません。

LangSmithは別の観測・評価プラットフォーム

LangSmithはトレース、デバッグ、評価、プロンプト管理、デプロイを扱う別製品です。LangChainやLangGraphのコードに接続できますが、LangGraphをインストールするだけでクラウドのGUIやマネージド実行環境が自動的に付くわけではありません。ライブラリ選定と運用基盤選定は分けて考えてください。

選び方を誤りやすい4パターン

失敗1:エージェントなら最初からすべてLangGraphで書く

❌ よくある判断:ツールを使う時点でStateGraphを自作する。

⭕ 見直し方:標準的なモデル・ツールループならLangChainのcreate_agentから始める。独自遷移が要件になった部分だけLangGraphへ移す。

状態項目とEdgeを増やすほど、テスト対象も増えます。制御権が不要な部分まで低水準で書かないことがポイントです。

失敗2:LangChainとLangGraphを排他的な選択肢と考える

❌ よくある判断:LangGraphへ移るならLangChainのツールやRetrieverを捨てる。

⭕ 見直し方:LangGraphのNode内で既存のLangChainコンポーネントを再利用する。

役割が異なるため、置き換えより責任分担で考える方が自然です。

失敗3:InMemorySaverで障害復旧までできると思う

❌ よくある判断:メモリ上のcheckpointerを本番の永続化として扱う。

⭕ 見直し方:開発用と本番用の保存先を分け、再起動後に必要な状態が戻るかをテストする。

InMemorySaverとMemorySaverはプロセス再起動でチェックポイントを失います。永続化は明示的な設計項目です。

失敗4:interruptの前に非冪等な外部操作を置く

❌ よくある判断:レコード作成や外部送信の後で承認待ちにし、再開時の再実行を考慮しない。

⭕ 見直し方:承認を外部操作より前へ置くか、外部操作を別Nodeへ分け、同じ入力が来ても重複しない設計にする。

Interrupts公式ガイドは、再開時にNodeの先頭から再実行される点と、副作用を冪等にする必要性を説明しています。

よくある質問

Q1. LangGraphとLangChainの一番大きな違いは何ですか?

LangChainはモデル、ツール、ミドルウェアを使って標準的なエージェントを組み立てる高水準フレームワークです。LangGraphは状態、分岐、停止、再開を低水準で制御するランタイムです。

Q2. LangGraphを使うにはLangChainが必須ですか?

必須ではありません。LangGraphは単体で利用でき、各社SDKや独自関数をNodeに置けます。ただし、公式例ではモデルやツールの統合にLangChainコンポーネントを使うことが多く、併用は自然です。

Q3. LangChainとLangGraphは併用できますか?

できます。LangGraphで全体の遷移を制御し、各Node内でLangChainのモデル、Retriever、ツール、標準エージェントを使う構成が可能です。

Q4. LangChainのcreate_agentとLangGraph直接利用の違いは何ですか?

create_agentは一般的なモデル・ツールループを高水準APIとして提供します。LangGraphを直接使う場合は、State、Node、Edge、チェックポイント、割り込み位置をアプリ側が定義します。

Q5. LangChainとLangGraphとLangSmithの違いは何ですか?

LangChainはエージェントフレームワーク、LangGraphはオーケストレーションランタイム、LangSmithはトレースや評価などを扱うプラットフォームです。LangSmithはLangChainやLangGraph以外のアプリにも接続できます。

Q6. RAGだけならどちらを選ぶべきですか?

文書を検索して回答する固定的なRAGなら、LangChainのRetrieverやRunnableで足りることが多いでしょう。検索結果の評価、不足時の再検索、複数Retrieverへの分岐、承認後の再開まで制御するならLangGraphが候補です。

Q7. 人間の承認があるならLangGraphが必要ですか?

ツール実行前の標準的な承認はLangChainのHuman-in-the-loopミドルウェアでも設定できます。任意のNodeで止め、状態を編集し、承認結果で遷移先を変えたい場合はLangGraphを直接使う方が設計しやすくなります。

Q8. マルチエージェントなら必ずLangGraphですか?

必ずではありません。既成のハーネスで要件を満たせる場合もあります。複数エージェント間の受け渡し、共有状態、並列実行、失敗時の戻り先を独自に決めたいときにLangGraphの価値が高まります。

Q9. 既存のLangChainコードはLangGraphで再利用できますか?

モデル、ツール、Retriever、RunnableなどはNode内で再利用できます。ただし、旧来のLLMChainなどはlangchain-classicへ移っているため、現行v1へ寄せるか互換パッケージを使うかを先に判断してください。

Q10. 初心者はどちらから学ぶべきですか?

まずLangChainでモデル、ツール、メッセージ、エージェントループを理解するのが近道です。その後、状態遷移、チェックポイント、割り込みが必要になった時点でLangGraphを学ぶと、抽象化の違いを捉えやすくなります。

運営元 Uravation よりAIエージェントを構想から本番運用まで進める順番と、体制・KPIの決め方をまとめた資料を無料で公開しています。 AIエージェント導入ロードマップを受け取る(無料)

参考・出典

結論と次の一歩

LangGraphとLangChainの違いは、機能の多さではなく抽象度と制御権です。標準的なエージェントを速く組むならLangChain、独自の状態遷移や停止・再開を設計するならLangGraph、両方の要件があるなら併用します。

  1. 処理フローを一文で書く:「モデルがツールを選べば終わる」のか、「条件で戻る・止まる・再開する」のかを切り分けます。
  2. 最小構成を選ぶ:標準ループならcreate_agent、固定処理ならRunnableまたは通常コードで始めます。
  3. 状態を設計する:独自制御が必要なら、Stateに残す値、Nodeの責任、Edgeの終了条件、承認前後の副作用を明文化してからStateGraphへ進みます。

あわせて読みたい:

この記事を読んで導入イメージが固まってきた方へ

UravationではAIエージェント導入の研修・コンサルを行っています。

この記事はAIgent Lab編集部がお届けしました。

Need help moving from reading to rollout?

この記事を読んで導入イメージが固まってきた方へ

Uravationでは、AIエージェントの要件整理、PoC設計、社内導入、研修まで一気通貫で支援しています。

この記事をシェア

X Facebook LINE

※ 本記事の情報は2026年10月時点のものです。サービスの料金・仕様は変更される可能性があります。最新情報は各サービスの公式サイトをご確認ください。

関連記事