LangChain.jsとは|JavaScript/TypeScriptでLLM・エージェントを作る導入と使い方
LangChain.jsは、LLMアプリやAIエージェントをJavaScript/TypeScriptで構築するためのフレームワークです。PythonのLangChainと同じ抽象(モデル呼び出し、プロンプト、チェーン、ツール、エージェント)を、Node.jsやブラウザ・エッジ環境で扱えます。2025年にv1.0が正式リリースされ、エージェント構築の中心APIがcreateAgentに整理されました。この記事では、npmでの導入から実際のコード、Python版との使い分けまでを最新のパッケージ構成に沿って解説します。
まとめ:LangChain.jsの要点
- LangChain.jsはLangChainのJavaScript/TypeScript実装で、
@langchain/coreが提供する基本抽象はPython版と共通。 - 導入は使うプロバイダだけを足す方式。例:
npm install langchain @langchain/openai zod。 - v1.0でエージェント構築は
createAgentに統一され、旧APIは@langchain/classicへ分離された。 - Node.jsバックエンドやNext.js/エッジで動かすならJS版が有利。実験的な新機能はPython版が先行する場合がある。
- LangGraphとの違いやv1の詳細な変更点は、末尾の関連記事で個別に解説している。
LangChain.jsとは(JavaScript/TypeScript版の位置づけ)
LangChain.jsは、LLMを呼び出す共通インターフェースと、プロンプト・出力パーサ・ツール・エージェントといった部品を提供します。土台となる@langchain/coreがRunnableインターフェースとLCEL(LangChain Expression Language)を持ち、その上に各機能とプロバイダ連携が乗る構造です。Python版のポーティングではなくJS/TSネイティブに設計されているため、型定義がそのまま効き、Node.jsやフロントエンドのコードベースに無理なく組み込めます。用途はチャットボット、RAG(検索連携)、ツールを呼ぶ自律エージェントなど、Python版と重なります。
Python版との違いと使い分け
両者は同じ設計思想を共有しますが、実行環境と機能反映の速度が判断の分かれ目です。
| 観点 | JavaScript/TypeScript版 | Python版 |
|---|---|---|
| 実行環境 | Node.js・ブラウザ・エッジ | Python・サーバー |
| 型 | TypeScriptで静的型付け | 型ヒント |
| 新機能の反映 | やや遅れる場合あり | 先行しやすい |
| 連携が厚い領域 | Next.js・Vercel等のWeb | データ処理・ML資産 |
JavaScript/TypeScript版を選ぶべき場面
フロントエンドやBFFがすでにJavaScript/TypeScriptで書かれているなら、LLM処理も同じ言語に寄せるべきです。Next.jsのRoute HandlerやCloudflare Workers、Vercelのエッジ関数にそのまま載せられ、型でツールの入出力を固定できる利点は、言語を跨ぐ運用コストを上回ります。
Python版を選ぶべき場面(つまずくパターン)
逆に、公開直後の実験的なRetrieverや連携が必須の要件、あるいはデータ前処理・機械学習の資産がPythonに集まっている場合はPython版が無難です。JS版のドキュメントだけを見て「この機能が無い」と行き詰まるのは典型的な失敗で、機能の有無は必ず両版のリファレンスで確認してから言語を決めます。
LangChain.jsの導入(npmインストールとパッケージ構成)
v1.0のパッケージ分割構成
v1.0では役割ごとにパッケージが分かれています。主要なものは次のとおりです。
langchain:createAgentやツールなど高レベルの構築部品。@langchain/core:Runnable・LCEL・基本型など土台。全パッケージが依存。@langchain/openai、@langchain/anthropicなど:プロバイダ別に分離。使うものだけ導入。@langchain/community:サードパーティ連携をまとめた拡張。@langchain/classic:v1で本体から外れた旧来の機能を収容。@langchain/langgraph:状態を持つ複雑なワークフロー向け。
注意点として、複数パッケージを混在させるときは@langchain/coreのバージョンを揃えます。異なるインスタンスが混ざると型の照合(instanceof判定)がずれて実行時エラーの原因になります。
インストールと最小セットアップ
OpenAIを使う最小構成は次の1行です。
npm install langchain @langchain/openai zod
APIキーは環境変数OPENAI_API_KEYに置きます。TypeScriptプロジェクトなら追加設定なしでインポートでき、型がそのまま補完されます。
LangChain.jsの基本的な使い方(コード例)
チャットモデルの呼び出し
まずはチャットモデルを直接呼ぶ最小例です。
import { ChatOpenAI } from "@langchain/openai";
const model = new ChatOpenAI({ model: "gpt-4o-mini" });
const res = await model.invoke("LangChain.jsを一文で説明して");
console.log(res.content);
LCELでのチェーン構成
プロンプト・モデル・パーサを.pipe()で連結するのがLCELです。各部品はRunnableとして同じinvoke/streamのインターフェースを持ちます。
import { ChatPromptTemplate } from "@langchain/core/prompts";
const prompt = ChatPromptTemplate.fromTemplate("{topic}を初心者向けに一文で");
const chain = prompt.pipe(model);
const out = await chain.invoke({ topic: "ベクトル検索" });
console.log(out.content);
createAgentによるエージェント構築
v1.0では、ツールを自律的に呼ぶエージェントはcreateAgentに統一されました。モデルとツール(必要なら会話メモリや振る舞いを差し込むミドルウェア)を渡すだけで構成できます。ツールはtool()ヘルパーとzodスキーマで定義します。
import { createAgent, tool } from "langchain";
import * as z from "zod";
const getWeather = tool(({ city }) => `${city}は晴れです`, {
name: "get_weather",
description: "指定都市の天気を返す",
schema: z.object({ city: z.string() }),
});
const agent = createAgent({
model: "openai:gpt-4o-mini",
tools: [getWeather],
});
const result = await agent.invoke({
messages: [{ role: "user", content: "東京の天気は?" }],
});
モデルは"openai:gpt-4o-mini"のようにプロバイダ接頭辞付きの文字列で指定します。分岐や状態管理を細かく制御したい場合は@langchain/langgraphに踏み込みます。両者の役割分担はLangChainとLangGraphの違い|v1.0で逆転した関係と使い分けで整理しています。
実務で気をつけたいJavaScript版特有の落とし穴
JS/TSならではの注意点を、つまずきやすい順にまとめます。
- coreのバージョン統一:前述のとおり
@langchain/coreを全パッケージで揃える。lockファイルで固定すると事故が減る。 - APIキーの露出:ブラウザやエッジで直接LLMを呼ぶとキーが漏れる。必ずサーバー側(Route Handler等)を経由させる。
- ストリーミング:逐次出力は
invokeではなく.stream()を使い、チャンクを順に流す。 - v1移行:
createReactAgentなど旧APIは@langchain/classicへ移った。移行時はインポート元の変更で対応できることが多い。
パッケージは「全部入り」を避け、使うプロバイダだけを入れるのが結局は軽くて壊れにくい構成です。
公式ドキュメントと学習リソース
一次情報は公式ドキュメント(docs.langchain.com のJavaScript向けセクション)とAPIリファレンス、ソースはGitHubの langchain-ai/langchainjs リポジトリです。日本語の入門記事やチュートリアルも増えていますが、v1.0で構成が変わっているため、公開日が新しいものを選ぶと差分でつまずきにくくなります。v1で何が変わったかはLangChain v1.0とは|create_agent・ミドルウェア・langchain-classicを実装例で解説にまとめています。
よくある質問
LangChain.jsはPython版と同じことができますか?
モデル呼び出し・チェーン・ツール・エージェントといった@langchain/coreの抽象は共通で、主要ユースケースはカバーできます。ただし公開直後の実験的な連携はPython版が先行する場合があるため、必須機能は両版のリファレンスで確認してください。
npmでどのパッケージを入れればよいですか?
高レベル部品のlangchainと、使うプロバイダ(例:@langchain/openai)、ツールのスキーマ用にzodが基本セットです。
LangChain.jsはTypeScriptで使えますか?
型定義が同梱されており、TypeScriptからそのままインポートして使えます。ESM前提の設定が推奨です。
LangChainとLangGraphの違いは何ですか?
LangChainは部品とエージェントの高レベルAPI、LangGraphは状態を持つワークフローの制御に向きます。詳細はLangChainとLangGraphの違いを参照してください。
最新のv1.0で何が変わりましたか?
エージェントがcreateAgentに一本化され、旧来の機能は@langchain/classicに分離されました。移行手順はLangChain v1.0とはで解説しています。