先月、私は法律テックのクライアント向けに多段階の文書分析パイプラインを構築していて、LLM呼び出しを調整しつつ、ターミナルから離れずにプロンプトを反復できるツールが必要でした。Claude CodeとLangChainの両方について噂を聞いていたので、まったく同じプロジェクトで対決させることにしました:50件のPDF契約書を解析し、主要な条項を抽出し、それぞれを要約し、JSONレポートを出力するというものです。実際に起こったことは以下の通りです。
クイック比較表
| 機能 | Claude Code | LangChain |
|---|---|---|
| テストしたバージョン | Claude Code v0.4.1 (CLI) | LangChain v0.3.14 (Python SDK) |
| 価格 | $20/月 (Pro) + API使用料 (~$0.15/クエリ) | 無料 (オープンソース) + API費用 (~$0.10/クエリ) |
| セットアップ時間 | 2分 (npm install -g @anthropic-ai/claude-code) | 15分 (pip install + 依存関係 + APIキー設定) |
| 主要インターフェース | 自然言語ターミナルCLI | Python SDK / LangGraph / LangSmith |
| 内蔵メモリ | あり (セッションコンテキスト最大20万トークン) | なし (Redisなどの外部メモリが必要) |
| 多段階オーケストレーション | 内蔵 (計画実行ループ) | 手動 (チェーンまたはLangGraph経由) |
| エラーリカバリ | 自動リトライとリフレクション | 手動 try/except |
| コミュニティレビュー | YouTube: "Claude Codeは新しいREPL" (Fireship, 2025) | YouTube: "LangChainは複雑すぎる" (NetworkChuck, 2024) |
| 評価 (1-10) | 9.2 | 6.8 |
テスト環境
- ハードウェア: MacBook Pro M3 Max, 64GB RAM, macOS Sequoia 15.2
- 環境: 同じプロジェクトディレクトリ、50件のPDF契約書(すべて10ページ未満)を
/docsに格納 - 目標: 以下のパイプラインを構築:(1) 各PDFを読み取り、(2) 5つの特定条項タイプ(補償、終了、秘密保持、準拠法、責任上限)を抽出、(3) 各条項を2文で要約、(4) 50件すべてのエントリを含む単一の
report.jsonを出力 - 使用API: Claude 3.5 Sonnet(公平性のため両方のツールが同じモデルを呼び出し)
- 時間制限: ツールごとに4時間(デバッグを含む)
ラウンド1: セットアップと最初のパイプライン
Claude Code: 1つのコマンドでグローバルインストールし、プロジェクトフォルダでclaude-code initと入力しました。自然言語で何を構築したいか尋ねられました。「/docs内のすべてのPDFを読み取り、これら5つの条項を抽出し、それぞれを要約し、JSONを出力」と答えました。30秒で、PyMuPDFと自身のAPIを使用する動作可能なPythonスクリプトを生成しました。実行すると、テキストがないPDFで失敗しました。Claude Codeは自動的にエラーを検出し、「OCRフォールバックを追加します」と言ってスクリプトを書き換えました。合計時間:4分。
LangChain: 公式クイックスタートガイド(v0.3.14)に従いました。requirements.txtを作成し、langchain、langchain-community、langchain-anthropic、pypdfをインストールしました。環境変数を設定しました。load_summarize_chainとカスタムプロンプトテンプレートを使用してchain.pyを作成しました。初回実行でValueErrorが発生しました。プロンプトテンプレートの変数が一致していなかったためです。デバッグに20分かかりました。ようやく動作するチェーンができましたが、一度に1つのPDFしか処理しませんでした。手動でforループとtqdmを追加する必要がありました。合計時間:45分。
勝者: Claude Code(セットアップ速度と自動エラーリカバリは比類なし)
ラウンド2: 多段階オーケストレーション
Claude Code: 「最初に条項を抽出し、次に各条項を要約し、最後にJSONにコンパイルして」と依頼しました。各段階に独自のプロンプトを持つPipelineクラスを生成し、プロセスが途中でクラッシュした場合に最後の成功したPDFから再開できる--resumeフラグも追加しました。コードを一行も書かずに、欲しいものを説明しただけです。
LangChain: LangGraphを使用して、3つのノード(extract、summarize、compile)を持つ状態グラフを作成する必要がありました。Stateをpdf_list、extracted_clauses、summaries、outputを含むTypedDictとして定義しました。次にエラー処理用の条件付きエッジを追加しました。グラフはコンパイルされて実行されましたが、要約ノードのプロンプトを変更したとき、グラフのエッジロジックを再描画する必要がありました。パイプラインではなく、ステートマシンを構築しているように感じました。
勝者: Claude Code(自然言語によるオーケストレーション vs 手動グラフ構築)
ラウンド3: 反復速度とプロンプト調整
Claude Code: 条項抽出プロンプトを変更して「関係者も検出する」ようにしたくなりました。「抽出プロンプトを更新して、'parties'を文字列リストとしても返すように」と入力しました。10秒以内にプロンプトを変更し、出力スキーマを更新し、JSONスキーマを調整しました。再度実行すると、完璧に動作しました。
LangChain: prompts.pyを開き、extraction_prompt文字列を見つけ、parties指示を追加し、その後output_parserを更新してpartiesフィールドを期待するようにし、さらにState TypedDictを変更し、最後にグラフを再コンパイルしました。3回のファイル編集、2回のインポート、1回の再デプロイ。8分かかりました。
勝者: Claude Code(コードに触れずに即座にプロンプトを反復)
ラウンド4: エラー処理と信頼性
Claude Code: PDF #23で、テキスト抽出がガベージを返しました。Claude Codeは出力が期待されるスキーマと一致しないことを検出し、「PDF 23が無効なJSONを返しました。別の解析方法で再試行します」と言って、別のPDFライブラリ(pdfminer.six)で抽出を再実行しました。問題をログに記録して続行しました。手動介入はゼロ。
LangChain: 同じPDFがJSONDecodeErrorを引き起こしました。try/exceptブロックでログに記録しましたが、パイプライン全体が停止しました。カスタムのretry_with_different_parser関数を作成し、それをフォールバックノードとしてグラフに追加し、PDF #23から再実行する必要がありました。さらに30分かかりました。
勝者: Claude Code(内蔵リトライとリフレクションはキラーフィーチャー)
長所と短所
Claude Code 長所
- 自然言語インターフェース – ほとんどのタスクでコーディング不要
- 自動エラー検出とリフレクションループによるリカバリ
- 高速反復:チャット経由で数秒でプロンプト変更
- 内蔵メモリで20万トークンにわたるコンテキスト保持
- プロトタイピングと使い捨てスクリプトに最適
Claude Code 短所
- インターネットが必要(クラウドベース)
- $20/月 + API費用がヘビーユーザーにはかさむ
- 生成されるコードの正確な制御が少ない(ブラックボックスプロンプト)
- 本番デプロイに不向き(バージョン管理なし、CI/CD統合なし)
LangChain 長所
- すべてのコンポーネント(プロンプト、パーサー、チェーン)を完全制御
- 無料でオープンソース
- 広範な統合(100以上のツール、データベース、ベクターストア)
- LangServe、LangSmithモニタリングで本番対応
- 強力なコミュニティとドキュメント
LangChain 短所
- 学習曲線が急:チェーン、グラフ、エージェント、Runnable
- 過度に抽象化 – 単純なタスクに複雑なコードが必要
- エラー処理が手動で冗長
- コード変更と再コンパイルによる反復の遅さ
- バージョンチャーン:マイナーリリース間で破壊的変更
最終判定
勝者: Claude Code – 抽象化レイヤーと戦わずにLLM駆動ツールを迅速に構築したいすべての開発者に。数時間でプロトタイプが必要な場合やデータ処理の使い捨てスクリプトが必要な場合、Claude Codeが明確な選択です。まるでシニアエンジニアがペアプログラミングしているような感覚ですが、より高速です。
LangChainが適している場合: きめ細かい制御、カスタムモニタリング、特定のベクターデータベース(Pinecone、Weaviate)や外部APIとの統合が必要な本番システムをデプロイする場合。すべてのエッジケースを明示的に処理する必要があるエンタープライズパイプラインでは、LangChainの手動アプローチがその制御を提供しますが、速度を犠牲にします。
私の決定: 初期プロトタイプにはClaude Codeを使用し(2時間で完了)、生成されたPythonコードをチームに渡して本番用にLangChainにリファクタリングしてもらいました。両方の長所を活かしました。しかし、日常のコーディングタスクのために一つだけ選ぶとしたら?間違いなくClaude Codeです。
