UbuntuでLangChainを使ってLLMアプリを開発する方法

ローカルLLM

「LangChainって聞いたことはあるけど、Ubuntuで実際にどうやって使い始めればいいの?」というのが、最初の疑問ですよね。本記事では、Ubuntu 24.04 LTS に LangChain をインストールして、ローカルLLMでチャットアプリを動かせる環境を整えるまで、実際のコマンド出力とスクリーンショット付きでまるごと解説します。

バックエンドには無料で動かせるローカルLLM「Ollama」を使うので、OpenAIのAPIキーは不要です。本記事の数値は、2026-06-15 に Docker の ubuntu:24.04 公式イメージで実際にインストールし、ローカルの Ollama(llama3.2:1b)に対して本当にチェーンを実行して取得したものです。

この記事のポイント

  • Ubuntu 24.04 では pip installvenv が必須(PEP 668)— 知らないと externally-managed-environment で必ず詰まる
  • 2026-06-15 に実測した最新版は langchain 1.3.9 / langchain-core 1.4.7 / langchain-ollama 1.1.0(Python 3.12.3)
  • LangChain の現代的な書き方 LCEL(prompt | llm | parser を実行結果付きで解説
  • ローカルLLM(Ollama)と接続し、会話履歴を覚えるチャットを実際に動かす
  • Gradio でブラウザUIを追加し、実際に質問→応答した画面のスクリーンショットを掲載

LangChainとは

LangChain は、Python で LLM(大規模言語モデル)を使ったアプリを作るためのフレームワークです。「LLMに文章を生成させる」「会話の履歴を保持する」「外部ツール(検索・電卓・データベース)を呼び出す」といった機能を、部品として組み合わせて使えます。

2024〜2026年の LangChain の大きな変化は、LCEL(LangChain Expression Language)というパイプ記法が主流になったことです。コンポーネントを | でつなぐだけでチェーンが作れます。さらに 2026 年現在は langchain 1.x 系がリリースされ、書き方も整理されました。

用途 LangChainの機能 具体例
テキスト生成 ChatModel ChatOllama / ChatOpenAI など
プロンプト管理 ChatPromptTemplate 変数埋め込み・マルチターン構造
チェーン連結 LCEL(| 演算子) prompt | llm | parser
会話記憶 ChatMessageHistory InMemoryChatMessageHistory
外部ツール Tools / Agents 検索・電卓・ファイル操作

前提環境

本記事は以下の環境で検証しています。インストールのコマンドは Docker の ubuntu:24.04 公式イメージで実行しており、VPS でもそのまま使えます。

項目 バージョン / 設定 備考
OS Ubuntu 24.04.4 LTS Docker ubuntu:24.04 / VPS どちらでも可
Python 3.12.3 Ubuntu 24.04 に標準搭載
langchain 1.3.9 2026-06-15 実測(venv 経由でインストール)
langchain-core 1.4.7 自動インストール
langchain-ollama 1.1.0 Ollama 接続用・明示的に指定
LLMバックエンド Ollama(ローカル / llama3.2:1b) APIキー不要・完全無料

Ollamaのセットアップが必要です

本記事の後半ではLLMバックエンドに Ollama を使います。まだインストールしていない場合は、先に「Ollama on Ubuntu インストールガイド」をご覧ください。ollama pull llama3.2:1b 等でモデルをダウンロードしてから続きを進めてください。

インストール手順

手順1:python3-venv をインストールする

Ubuntu 24.04 では PEP 668 という仕様により、システムに直接 pip install するとエラーになります。正直、これを知らずに詰まる人がとても多いです。実際にコンテナで pip3 install langchain を打つと、次のように弾かれました。




ubuntu@linuxlab: ~ (ubuntu:24.04)
$ python3 –version
Python 3.12.3
$ pip3 install langchain
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to install.

解決策は仮想環境(venv)を使うことです。まず必要なパッケージを入れます。




ubuntu@linuxlab: ~
$ sudo apt update && sudo apt install -y python3 python3-pip python3-venv python3-full
Reading package lists… Done
Setting up python3-venv (3.12.3-0ubuntu2) …
Setting up python3-full (3.12.3-0ubuntu2) …

手順2:仮想環境を作成して有効化する

~/langchain-env という名前の仮想環境を作ります。source activate を実行してからでないと、インストールしたパッケージが隔離されません。ここだけは順番を間違えると動きません。




ubuntu@linuxlab: ~
$ python3 -m venv ~/langchain-env
$ source ~/langchain-env/bin/activate
(langchain-env) $
# プロンプトに (langchain-env) が表示されたらOK

手順3:LangChain をインストールする

2026年時点の最新構成でインストールします。langchain-ollama はローカルLLMと接続するためのパッケージで、これは明示的に指定しないと入りません




ubuntu@linuxlab: ~ (langchain-env)
(langchain-env) $ pip install langchain langchain-core langchain-ollama
Collecting langchain …
Collecting langchain-core …
Collecting langchain-ollama …
Successfully installed langchain-1.3.9 langchain-core-1.4.7
langchain-ollama-1.1.0 langsmith-0.8.15
ollama-0.6.2 pydantic-2.13.4 httpx-0.28.1 …
(langchain-env) $ python3 -c “import langchain; print(langchain.__version__)”
1.3.9
Ubuntu 24.04 への LangChain インストール実ログ(2026-06-15 実測・PEP 668 エラーも再現)
Ubuntu 24.04 への LangChain インストール実ログ(2026-06-15 実測・PEP 668 エラーも再現)

langchain-community は依存に入りません

以前は pip install langchain-community が定番でしたが、2026年現在は各サービス専用の統合パッケージ(例: langchain-ollama)を使うのが推奨です。実際、pip install langchain langchain-core langchain-ollama を実行しても langchain-community は自動では入らないことを確認しました。新規プロジェクトでは専用パッケージを使いましょう。

手順4:インストールを確認する

2026-06-15 に ubuntu:24.04(Python 3.12.3)の venv で実際に解決されたバージョン一覧です。langchain 本体だけでなく、langchain-corelangsmithpydanticollama など複数の依存が同時に入ります。




ubuntu@linuxlab: ~ (langchain-env)
(langchain-env) $ pip show langchain langchain-core langchain-ollama | grep -E ‘Name|Version’
Name: langchain
Version: 1.3.9
Name: langchain-core
Version: 1.4.7
Name: langchain-ollama
Version: 1.1.0
pip install langchain で実際に入る主要パッケージ一覧(2026-06-15 実測)
pip install langchain で実際に入る主要パッケージ一覧(2026-06-15 実測)

LCEL(LangChain Expression Language)の基礎

LangChain の現代的な書き方が LCEL です。コンポーネントを |(パイプ演算子)でつなぐことで、チェーンを簡単に組み立てられます。実際に組み立てると、できあがるオブジェクトの型は RunnableSequence になります(これも実行して確認しました)。

LCEL チェーンの構造 prompt | llm | parser(概念図)
LCEL チェーンの構造 prompt | llm | parser(概念図)

①ChatPromptTemplate — プロンプトを構造化する

プロンプトを文字列ではなく「システムメッセージ + ユーザーメッセージ」の構造で定義します。invoke() すると、実際に2件のメッセージに展開されることが確認できます。




ubuntu@linuxlab: ~ — python3
>>> from langchain_core.prompts import ChatPromptTemplate
>>> prompt = ChatPromptTemplate.from_messages([
… (“system”, “あなたはLinuxの専門家です。日本語で簡潔に答えてください。”),
… (“human”, “{question}”),
… ])
>>> result = prompt.invoke({“question”: “Ubuntuとは何ですか?”})
>>> print(len(result.messages), “messages”)
2 messages
>>> print(result.messages[0].content)
あなたはLinuxの専門家です。日本語で簡潔に答えてください。

②LCEL チェーンを組み立てて実行する(prompt | llm | parser)

LCEL の真髄は | でつなぐチェーンです。以下は Ollama の llama3.2:1b と接続した例で、実際に chain.invoke() したときの本物の応答です。手元の環境では 応答までおよそ 1.87 秒でした。




ubuntu@linuxlab: ~ — lcel_chain.py
(langchain-env) $ cat lcel_chain.py
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_ollama import ChatOllama

# LLM: ローカルの Ollama を使用(APIキー不要)
llm = ChatOllama(model=”llama3.2:1b”, base_url=”http://localhost:11434″)

prompt = ChatPromptTemplate.from_messages([
(“system”, “あなたはLinuxの専門家です。日本語で簡潔に答えてください。”),
(“human”, “{question}”),
])

# LCEL チェーン: | でつなぐだけ
chain = prompt | llm | StrOutputParser()
answer = chain.invoke({“question”: “Ubuntuでインストール済みパッケージを一覧するコマンドは?”})
print(answer)
(langchain-env) $ python3 lcel_chain.py
以下は、Ubuntuでインストール済みパッケージを一覧する方法です。
1. `dpkg -l`:パッケージのリストを表示します。
2. `apt list –all`:すべてのパッケージを一覧します。
著者アイコン
著者アイコン

prompt | llm | StrOutputParser() の1行が LCEL の核心です。昔の LangChain では LLMChain という専用クラスを使っていましたが、今は | でつなぐだけで同じことができます。できあがる型は RunnableSequence で、コードが格段にシンプルになりました。

会話履歴を覚えるチャットにする

1回ごとに独立した質問ではなく、前の会話を踏まえて答えさせたい場合は会話履歴を持たせます。langchain 1.x では InMemoryChatMessageHistory にメッセージを溜めて、MessagesPlaceholder でプロンプトに差し込むのが現代的なやり方です。

ConversationBufferMemory は古い書き方です

ネット上の古い記事では from langchain.memory import ConversationBufferMemory を使う例が多いですが、これは langchain 0.x 時代の API です。langchain 1.x では langchain_core.chat_history.InMemoryChatMessageHistory を使う本記事の方法が推奨されます。

まず、履歴に4件(ユーザー2件・AI2件)を溜めて、正しく蓄積されるか実際に確認しました。




ubuntu@linuxlab: ~ — python3
>>> from langchain_core.chat_history import InMemoryChatMessageHistory
>>> history = InMemoryChatMessageHistory()
>>> history.add_user_message(“私の名前はTaroです”)
>>> history.add_ai_message(“こんにちは、Taroさん!”)
>>> history.add_user_message(“私の名前を覚えていますか?”)
>>> history.add_ai_message(“はい、あなたはTaroさんです。”)
>>> len(history.messages)
4
>>> for m in history.messages:
… print(type(m).__name__, “:”, m.content[:14])
HumanMessage : 私の名前はTaroです
AIMessage : こんにちは、Taroさん!
HumanMessage : 私の名前を覚えていますか?
AIMessage : はい、あなたはTaroさんです。

次に、この履歴を MessagesPlaceholder でプロンプトに差し込み、ローカルLLMが前のターンの情報を本当に参照するか試しました。「私の名前はKentaです」と伝えた後に「私の名前は何でしたか?」と聞くと、ちゃんと “Kenta” を返してきました。履歴がLLMに渡っている証拠です。




ubuntu@linuxlab: ~ — chat_with_memory.py
(langchain-env) $ cat chat_with_memory.py
from langchain_ollama import ChatOllama
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.output_parsers import StrOutputParser
from langchain_core.chat_history import InMemoryChatMessageHistory

llm = ChatOllama(model=”llama3.2:1b”)
prompt = ChatPromptTemplate.from_messages([
(“system”, “あなたは親切なアシスタントです。日本語で短く答えてください。”),
MessagesPlaceholder(variable_name=”history”),
(“human”, “{input}”),
])
chain = prompt | llm | StrOutputParser()

h = InMemoryChatMessageHistory()
h.add_user_message(“私の名前はKentaです。”)
h.add_ai_message(“こんにちは、Kentaさん。”)
print(chain.invoke({“history”: h.messages, “input”: “私の名前は何でしたか?”}))
(langchain-env) $ python3 chat_with_memory.py
私が持っている情報では、Kentaです。
LCEL チェーンと会話履歴をローカルOllamaで実行した実測結果(2026-06-15 実測)
LCEL チェーンと会話履歴をローカルOllamaで実行した実測結果(2026-06-15 実測)

Gradio でWebUIを追加する

コマンドライン動作を確認したら、Gradio を使うとブラウザから使えるチャットUIを数行で追加できます。まずインストールします。




ubuntu@linuxlab: ~ (langchain-env)
(langchain-env) $ pip install gradio
Successfully installed gradio-6.18.0
(langchain-env) $ cat app.py
import gradio as gr
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_ollama import ChatOllama

llm = ChatOllama(model=”llama3.2:1b”)
prompt = ChatPromptTemplate.from_messages([
(“system”, “あなたは親切なLinuxアシスタントです。日本語で簡潔に答えてください。”),
(“human”, “{input}”),
])
chain = prompt | llm | StrOutputParser()

def respond(message, history):
return chain.invoke({“input”: message})

gr.ChatInterface(fn=respond, title=”LangChain + Ollama チャット”).launch(
server_name=”0.0.0.0″, server_port=7860)
(langchain-env) $ python3 app.py
Running on local URL: http://0.0.0.0:7860

起動後、ブラウザで http://<サーバーIP>:7860 にアクセスするとチャットUIが表示されます。実際に立ち上げて「UbuntuでPythonのバージョンを確認するには?」と質問したところ、ローカルの llama3.2:1b から python3 --version を案内する応答が返ってきました。

Gradio + LangChain + Ollama チャットの初期画面(Playwright実撮影・2026-06-15)
Gradio + LangChain + Ollama チャットの初期画面(Playwright実撮影・2026-06-15)

続けて「UbuntuでLangChainをインストールする最初のステップは?」と入力すると、その場でローカルLLMが応答を生成します。下の画面は実際に質問→応答した状態をブラウザから撮影したものです。

Gradio チャットでローカルLLMが実際に応答した画面(Playwright実撮影・2026-06-15)
Gradio チャットでローカルLLMが実際に応答した画面(Playwright実撮影・2026-06-15)

小さなモデルの回答は鵜呑みにしない

上の画面で llama3.2:1b は一部「apt-get install langchain で入る」といった誤った内容も返しています(LangChain は apt ではなく pip で入れます)。1B クラスの軽量モデルは手軽に動く反面、事実誤認が出やすいです。本番では llama3.2(3B)や qwen2.5 の大きめのモデルを使うと精度が上がります。

VPSで動かす場合は ufw allow 7860 でポートを開けてください。

よくあるエラーと解決策

①error: externally-managed-environment




ubuntu@linuxlab: ~
$ pip install langchain
error: externally-managed-environment
× This environment is externally managed

解決策: python3 -m venv ~/langchain-env && source ~/langchain-env/bin/activate で仮想環境を作ってからインストールしてください。これが Ubuntu 24.04(PEP 668)の正しいやり方です。

②ModuleNotFoundError: No module named ‘langchain_ollama’




ubuntu@linuxlab: ~ (langchain-env)
(langchain-env) $ python3 lcel_chain.py
ModuleNotFoundError: No module named ‘langchain_ollama’

解決策: pip install langchain-ollama でパッケージを追加してください。langchain 本体を入れるだけでは含まれません(実測でも自動では入りませんでした)。

③Ollama が接続できない(ConnectError)




ubuntu@linuxlab: ~
httpx.ConnectError: [Errno 111] Connection refused

解決策: ollama serve でOllamaを起動してください。VPSなら systemctl start ollama です。起動確認は curl http://localhost:11434/api/tags でできます。

VPSでLangChainを本格運用するには

自分のPCで動かすのもいいですが、Ollama + LangChain をVPSに置くと、スマホを含むどこからでもアクセスできる自分専用のLLMサーバーが完成します。

LLMはGPUがあると推論速度が格段に上がります。特に Vultr は GPU プランが充実しており、A16・L40S・H100 など複数の GPU から選べます。LLM 推論に十分な VRAM(最低8GB以上)が手軽に試せます。

まずCPUのみのプランで試すなら、Vultr の $5/月プランから始められます。本記事で使った llama3.2:1b のような軽量モデルなら CPU でも十分に動きます。

VPS 最安プラン GPU対応 東京リージョン 特徴
Vultr $5/月〜 あり(A16/L40S/H100) あり GPUラインナップ豊富・シンプルな操作
DigitalOcean $6/月〜 あり(H100) なし ドキュメントが充実
ConoHa VPS 880円/月〜 なし あり(国内) 日本語サポートあり・初心者向け

まとめ

Ubuntu 24.04 LTS で LangChain を使った LLM アプリ開発環境を構築する手順を、実際の実行結果とスクリーンショット付きで解説しました。

  • Ubuntu 24.04 では python3 -m venv で仮想環境を作ってから pip install する(PEP 668 対応)
  • 2026-06-15 時点の最新版は langchain 1.3.9 / langchain-core 1.4.7 / langchain-ollama 1.1.0(Python 3.12.3)
  • 現代的な LangChain は LCEL の prompt | llm | parser 形式で書き、型は RunnableSequence になる
  • 会話履歴は langchain 1.x の InMemoryChatMessageHistory で持たせる(ConversationBufferMemory は古い)
  • Gradio を追加すればブラウザUIもすぐ作れる。ただし軽量モデルの回答は事実確認を忘れずに

LLMアプリをVPSで本番運用したい場合は、VPS比較ガイドもあわせてご覧ください。

コメント

タイトルとURLをコピーしました