エージェント基盤・プロトコル

LangChainとは|1社増やすのに5か所直すか、1か所で済ませるか

LangChainとは何をする道具なのか共通の口をはさむと何が変わるのか抽象化の代償は何か

AIのモデルを使う処理を書いていると、提供元ごとに引数も返り値も違うことに気づきます。乗り換えるたびに呼び出し側を直すことになります。

呼び出し箇所が5か所ある状態で1社増やすと、直に書いていれば5か所すべてに手を入れます。共通の口をはさんでいれば1か所です。

この記事の要点

  • LangChainはモデルや部品を共通の口で扱う枠組み
  • 1社増やすとき、直に書けば5か所、共通の口なら1か所
  • 呼び出しが100か所でも、共通の口なら1か所のまま
  • 代わりに片方にしかない機能は抜け道が要る

1社増やすのに5か所直すか、1か所で済ませるか

形の違う2社を実際に用意して確かめました。呼び出しが5か所あるとき、直に書けば5か所、共通の口なら1か所です。

LangChainが掲げる共通の口という考え方が、どれだけ効くのかを実際に書いて確かめました。用意したのは引数も返り値も形の違う2社の応答APIです。

2通りの実装は本当に動かしており、返り値がそろうことも確かめています。変更箇所の数のほうは、呼び出し箇所から数え上げたものです。

javascript
const providerA = {
  name: 'A社',
  call: (o) => ({ output: { text: `A: ${o.prompt}`, tokens: o.prompt.length } }),
};
const providerB = {
  name: 'B社',
  call: (o) => ({ result: [{ content: `B: ${o.input}` }], usage: { total: o.input.length } }),
};

// 共通の口をはさむ。形の違いをここ1か所に閉じ込める
const adapters = {
  A社: (p, prompt) => { const r = p.call({ prompt });
    return { text: r.output.text, tokens: r.output.tokens }; },
  B社: (p, prompt) => { const r = p.call({ input: prompt });
    return { text: r.result[0].content, tokens: r.usage.total }; },
};
text
A社  直に書く: {"text":"A: こんにちは","tokens":5}
      共通の口: {"text":"A: こんにちは","tokens":5}  一致: true
B社  直に書く: {"text":"B: こんにちは","tokens":5}
      共通の口: {"text":"B: こんにちは","tokens":5}  一致: true

方式          変更する箇所  内訳
直に書く             5か所  問い合わせの分類・議事録の要約・請求書の点検・見積の下書き・日報の整形
共通の口             1か所  adapters に1つ足すだけ

呼び出し箇所  直に書く  共通の口
       5か所       5か所       1か所
      20か所      20か所       1か所
      50か所      50か所       1か所
     100か所     100か所       1か所

返り値はどちらの方式でもそろいました。差が出るのは、次の1社を足すときです。

違いが呼び出し側に散る

直に書く方式では、output.text なのか result[0].content なのかという判断が、呼び出し箇所ごとに書かれます。5か所あれば5か所に散ります

共通の口をはさむと、その判断は1か所に閉じ込められます。呼び出し側は { text, tokens } だけを見ればよくなります。

箇所が増えるほど開く

この差は箇所の数に比例します。100か所あれば100か所と1か所です。LangChainも、最小限のコード変更でモデルを切り替えられ、要件が変わってもアプリケーションを持ち運べる状態に保てるとしています。

つなぎ先の数が増えるほど共通化が効く、という構造はMCPの記事でも同じでした。あちらは12本が7本、規模を広げて1000本が70本という数字が出ています。

呼び出し箇所が増えても、共通の口なら触るのは1か所のまま。

手を入れる箇所の数10005か所20か所50か所100か所直に書く共通の口をはさむ呼び出し箇所の数から数え上げたもの。返り値がそろうことは実際に動かして確かめた。
図1 ── 1社増やすときに手を入れる箇所
出典Docs by LangChain「LangChain overview」2026-08-18 確認
Switch models with minimal code changes and keep your application portable as requirements evolve.
原文Docs by LangChain「LangChain overview」 この内容の有効期限2027-02-18

LangChainとは何をする道具なのか

提供元ごとに違う呼び方を1つの口にそろえ、そこに機能を足していく枠組みです。実行の面倒は別の層が見ています。

LangChainは、提供元ごとに違うモデルの呼び方を1つの口にそろえる枠組みです。そのうえに、道具の呼び出しや検査といった機能を足していきます。

そろえる範囲

公式の説明では、提供元をまたいで、対話用のモデルや埋め込みなどに1つの口を使うとされています。モデルだけでなく、周辺の部品も同じ考え方で扱われます。

前の節で書いた adapters のような部分を、あらかじめ用意してあるものだと考えると分かりやすいはずです。

足していく形

全部入りの道具ではありません。最小限の骨組みから始めて、必要な機能を少しずつ足していく形が案内されています。

足せるものとして挙げられているのは、検査や再試行、振り分け、道具の扱いに関する決まりなどです。検査の置き方はガードレールの記事で扱っています。

LangGraphとの関係

名前が並ぶので整理しておきます。LangChainのエージェントはLangGraphの上に作られていると明記されており、状態の持ち回りや再開といった実行の面倒はそちらが見ています。

つまり層が違います。実行の土台の話はLangGraphの記事で扱っています。

余談 そろえたい範囲を先に決める

使ってみて感じたのは、何をそろえたいのかを先に決めないと、枠組みの形に引きずられるということでした。モデルの呼び出しだけそろえたいのか、道具の扱いまでそろえたいのか。範囲を決めておくと、足す機能を選びやすくなります。

出典Docs by LangChain「LangChain overview」2026-08-18 確認
Use one interface for chat models, embeddings, and more across providers.
原文Docs by LangChain「LangChain overview」 この内容の有効期限2027-02-18

共通の口をはさむことの代償

片方にしかない機能が通しにくくなります。抜け道を書くことになるので、そろえた意味がその分だけ薄れます。

LangChainのような共通の口には代償があります。すべての提供元にある機能しか、素直には通せません

片方にしかない機能

前の節の実演では、A社だけにある機能を2つ、B社だけにある機能を1つ置きました。合計3件は共通の口の形に収まりません

こうした機能を使いたい場合、共通の口をすり抜ける書き方をすることになります。すると、その箇所だけ提供元に縛られます。

縛られる箇所を数えておく

  1. どの提供元にもある機能だけを使う箇所。共通の口に寄せる
  2. 提供元固有の機能を使う箇所。個別に書く前提で切り分ける
  3. どちらか分からない箇所。まず調べる
  4. 全部を共通の口に押し込む。抜け道が散らばって収拾がつかなくなる

4番目を避けてください。抜け道が散らばると、そろえた意味がなくなります。前の節の5か所が1か所になるという効果も、抜け道の数だけ目減りします。

入れるかどうか

呼び出し箇所が1つか2つなら、直に書くほうが速く終わります。共通の口を用意する手間は、最初の1か所では回収できません

この構造は他の共通化とも同じで、MCPの記事でも小規模では差が出ないという結果が出ています。

全部を共通の口に押し込むと、抜け道が散らばって元に戻る。

充足 2 / 4呼び出し箇所が複数ある5か所で1社増やすと5か所を直す。共通の口なら1か所で済む使う機能がどの提供元にもある共通の口の形に収まるので、抜け道を書かずに済む提供元固有の機能を多く使っている実演では3件が共通の口に収まらなかった。その分だけ効果が目減りする呼び出し箇所が1か所しかない共通の口を用意する手間を回収できない。直に書くほうが速い形の違う2社を実際に書いて確かめた実演にもとづく。返り値は両方式でそろった。
図2 ── 共通の口に寄せるかどうかの点検項目
そろえても中身は変わる呼び方をそろえても、返ってくる中身は提供元ごとに違います。同じ依頼で違う答えが返るので、乗り換えたら結果を測り直してください。測り方はシミュレーション評価の記事で扱っています。
出典Docs by LangChain「LangChain overview」2026-08-18 確認
LangChain’s agents are built on top of LangGraph.
原文Docs by LangChain「LangChain overview」 この内容の有効期限2027-02-18

よくある質問

モデルの乗り換えは本当に楽になりますか
呼び出し側を触らずに済みます。ただし片方にしかない機能を使っている場合は、その部分だけ個別に書くことになります。
LangGraphとは何が違いますか
役割が違います。LangChainのエージェントはLangGraphの上に作られていると明記されており、実行の面倒はそちらが見ています。
最初から入れるべきですか
呼び出し箇所が1つか2つなら、直に書くほうが速く終わります。効いてくるのは箇所が増えてからです。
全部を任せる道具ですか
違います。最小限の骨組みから始めて、必要な機能だけを足していく形が案内されています。

まとめ

  • LangChainは提供元ごとの違いを共通の口に吸収する枠組み
  • 1社増やすときに触る箇所は5か所から1か所
  • 呼び出しが増えるほど差は開き、100か所でも1か所
  • 代償は片方にしかない機能が通しにくくなること

今日から始められること

  1. AIのモデルを呼んでいる箇所が何か所あるかを数える
  2. そのうち提供元固有の機能を使っている箇所に印を付ける
  3. 印の付かない箇所だけを共通の口に寄せる
  4. 印の付いた箇所は、個別に書く前提で切り分けておく

実務で組んだLangChainのワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る