◉CLAUDE LABEN
●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/API & SDK
⬡ API & SDK/2026-04-07上級

Claude API × LangGraph 本番品質ステートフルエージェント構築ガイド — グラフベース設計・永続化・ヒューマンインザループの実装

LangGraphとClaude APIでステートフルエージェントを本番運用するための実装パターン集。from_conn_stringがcompile()で落ちる原因、recursion_limitの既定値変更、interrupt()再開の落とし穴まで、手元で検証した挙動と共に整理します。

LangGraphClaude API128エージェント14ステートフルマルチエージェント6Python22本番運用36

✦ プレミアム記事

取り組みの背景 — なぜ「ステートフル」なエージェントが必要なのか

AIエージェントの開発において、最大の課題のひとつが「状態管理」です。シンプルな質問応答システムであれば、各リクエストを独立したものとして扱えます。しかし現実のビジネスワークフローは、それほど単純ではありません。

たとえば、見積作成から上長承認、最終発注まで複数ステップにわたる承認フローを考えてみてください。あるいは、データ収集・分析・レポート作成と段階を踏む長時間実行の研究タスク。エラー時に途中から再開できる大規模バッチ処理、または人間の判断を適切なタイミングで挟む意思決定プロセス——これらのシナリオでは、エージェントが「今どこまで進んでいるか」「前回の実行でどんなデータを収集したか」を記憶し続ける必要があります。このような要件を満たすのがステートフルエージェントです。

LangGraphは、LangChainチームが開発したグラフベースのエージェントフレームワークです。Pythonの状態機械(ステートマシン)のようにエージェントのワークフローを定義でき、永続化・再開・ヒューマンインザループなどを標準サポートしています。単発のチェーン実行を前提とした従来型の構成や、Cloudflare Durable Objectsでインフラ側に状態を持たせる方法と比べて、LangGraphは「循環・分岐・長期記憶」をアプリケーション層のグラフ定義として扱える点に特徴があります。

Claude APIの高度な推論能力とLangGraphの堅牢な状態管理を組み合わせることで、エンタープライズレベルのAIエージェントが構築できます。ここではこの組み合わせの実装パターンを実際のコードを交えながら深堀りします。

私自身、個人開発で運営しているアプリ群の問い合わせ対応を支援する内部ワークフローに、この構成を小さく導入しております。返金や規約に関わる返信の下書きだけは必ず人間の確認を挟みたい、という要件がまさに interrupt() の出番でした。承認待ちのまま一晩置いてもチェックポイントから正確に再開できる。cronとJSONファイルで状態管理を自作していた頃には得られなかった安心感です。

環境構築とセットアップ

まず必要なパッケージをインストールします。Python 3.11以上を推奨します。

pip install anthropic langgraph langchain-anthropic langgraph-checkpoint-sqlite tenacity

各パッケージの役割を整理します。

  • anthropic — Claude API クライアント(最新SDK)
  • langgraph — グラフベースエージェントフレームワーク
  • langchain-anthropic — LangChain向けClaude統合レイヤー
  • langgraph-checkpoint-sqlite — SQLiteを使ったチェックポイント永続化
  • tenacity — リトライロジックのライブラリ

基本的なセットアップが正しく機能するか確認します。

import os
import sqlite3
from langchain_anthropic import ChatAnthropic
from langgraph.graph import StateGraph, END
from langgraph.checkpoint.sqlite import SqliteSaver
 
# Claude モデルの初期化(temperature=0 で再現性を高める)
model = ChatAnthropic(
    model="claude-sonnet-4-6",
    api_key=os.environ.get("ANTHROPIC_API_KEY"),
    temperature=0,
    max_tokens=4096,
)
 
# SQLiteチェックポインターの設定
#
# ⚠️ SqliteSaver.from_conn_string() は「コンテキストマネージャ」です。
#    memory = SqliteSaver.from_conn_string(":memory:") と代入すると、
#    受け取れるのは _GeneratorContextManager であって SqliteSaver ではありません。
#    この後の compile(checkpointer=memory) が TypeError で落ちます(詳細は後述)。
#
# 本記事では、以降のノード定義・グラフ構築でも同じ checkpointer を
# 使い回すため、接続を自分で保持するコンストラクタ形式を採用します。
conn = sqlite3.connect(":memory:", check_same_thread=False)
memory = SqliteSaver(conn)
 
print("✅ LangGraph × Claude API セットアップ完了")
print(type(memory).__name__)
# 出力:
# ✅ LangGraph × Claude API セットアップ完了
# SqliteSaver

check_same_thread=False は必須です。LangGraph はノードをワーカースレッドで実行することがあり、既定の SQLite 接続はスレッドをまたぐと ProgrammingError を投げます。

短命なスクリプトであれば with SqliteSaver.from_conn_string(":memory:") as memory: の形が最も安全です。ただし with を抜けた時点で接続が閉じられるため、長時間動き続けるWebアプリではコンストラクタ形式のほうが扱いやすくなります。

環境変数 ANTHROPIC_API_KEY に有効なAPIキーを設定しておく必要があります。本番環境では .env ファイルや AWS Secrets Manager などのシークレット管理サービスを使ってください。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦interrupt()承認待ちスレッドがデプロイ後に再開できなくなるステートスキーマ進化問題と、total=False・バージョンキーによる回避パターン
✦SqliteSaver/PostgresSaverのfrom_conn_stringがコンテキストマネージャであるためcompile()がTypeErrorで落ちる問題と、用途別の2つの正しい書き方
✦recursion_limitの既定値が25から10007へ変わったことで暴走ループのリスクが反転した点と、二重上限による打ち切り設計
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⬡ API & SDK2026-09-02
thinking ブロックを弾く 400 が出たとき、会話履歴のどこが書き換わっていたか
Claude Fable 5.1 から、thinking ブロックより前の system・tools・messages を書き換えたリクエストが 400 で弾かれるようになりました。自分のエージェントループが該当するかを1リクエストで確かめる手順と、system の組み立て直し・履歴の切り詰めを書き換えなしのやり方へ移す実装をまとめます。
⬡ API & SDK2026-05-24
Claude API のレスポンスを Cloudflare R2 にアーカイブする実装メモ — 監査・再現性・障害分析の3軸設計
Claude API のリクエストとレスポンスを Cloudflare R2 に保存して、監査・障害分析・本番リプレイの3つに使う設計を、Workers の waitUntil パターンと D1 メタデータインデックス込みで実装メモにまとめました。
⬡ API & SDK2026-05-04
Bun × Claude API で本番運用するエッジAIサービス — Node.js移行の判断軸と落とし穴を回避する実装パターン
Claude APIをBun上で本番運用するための実装ガイド。Node.jsからの移行判断軸・組み込みSQLite/WebSocketの活用・ストリーミング最適化・典型的な落とし穴の回避策まで、動作するコードと実測値で解説します。