目次

Ollama JavaScript / Node.js 入門:チャット、ストリーミング、REST API の呼び出し方

インストール

npm install ollama

基本的なチャット

import ollama from "ollama";

const response = await ollama.chat({
  model: "qwen3:8b",
  messages: [
    { role: "system", content: "日本語で回答してください。" },
    { role: "user", content: "JavaScript と TypeScript はどう違いますか?" },
  ],
});

console.log(response.message.content);

(ES modules を使う場合は、ファイル名を .mjs にするか、package.json で "type": "module" を設定します。)

ストリーミング出力

import ollama from "ollama";

const stream = await ollama.chat({
  model: "qwen3:8b",
  messages: [{ role: "user", content: "4行の短い詩を書いて" }],
  stream: true,
});

for await (const part of stream) {
  process.stdout.write(part.message.content);
}

生成を中止する

ユーザーが「停止」を押したとき:

const stream = await ollama.chat({ model: "qwen3:8b", messages, stream: true });

setTimeout(() => stream.abort(), 3000); // 3 秒後に中止

try {
  for await (const part of stream) process.stdout.write(part.message.content);
} catch (err) {
  if (err.name === "AbortError") console.log("\n停止しました");
}

別のホストに接続する

import { Ollama } from "ollama";

const client = new Ollama({ host: "http://192.168.1.50:11434" });
const res = await client.chat({ model: "qwen3:8b", messages: [{ role: "user", content: "こんにちは" }] });

ブラウザーで使う

import ollama from "ollama/browser";

Web ページからローカルの Ollama を直接呼び出すには、OLLAMA_ORIGINS を設定して Web ページのオリジンを許可します。詳しくは環境変数と設定を参照してください。本番環境では通常、自分のバックエンド経由でリクエストを転送し、ブラウザーから Ollama に直接接続しないようにします。

パッケージをインストールせずに fetch を使う

const res = await fetch("http://localhost:11434/api/chat", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    model: "qwen3:8b",
    messages: [{ role: "user", content: "こんにちは" }],
    stream: false,
  }),
});
const data = await res.json();
console.log(data.message.content);

fetch でストリーミングを処理する

ストリーミング応答は、1 行に 1 つの JSON を含む NDJSON 形式です。

const res = await fetch("http://localhost:11434/api/chat", {
  method: "POST",
  body: JSON.stringify({ model: "qwen3:8b", messages: [{ role: "user", content: "1 から 10 まで数えて" }] }),
});

const reader = res.body.getReader();
const decoder = new TextDecoder();
let buffer = "";

while (true) {
  const { value, done } = await reader.read();
  if (done) break;
  buffer += decoder.decode(value, { stream: true });
  const lines = buffer.split("\n");
  buffer = lines.pop(); // 最後の行は不完全なことがあるため、次回まで保持
  for (const line of lines) {
    if (!line.trim()) continue;
    const chunk = JSON.parse(line);
    process.stdout.write(chunk.message?.content ?? "");
  }
}

OpenAI SDK を使う

npm install openai
import OpenAI from "openai";

const openai = new OpenAI({ baseURL: "http://localhost:11434/v1", apiKey: "ollama" });

const completion = await openai.chat.completions.create({
  model: "qwen3:8b",
  messages: [{ role: "user", content: "こんにちは" }],
});
console.log(completion.choices[0].message.content);

シンプルな Express API

Ollama を独自の API でラップし、フロントエンドから呼び出せるようにします。

import express from "express";
import ollama from "ollama";

const app = express();
app.use(express.json());

app.post("/api/ask", async (req, res) => {
  const { question } = req.body;
  res.setHeader("Content-Type", "text/plain; charset=utf-8");
  const stream = await ollama.chat({
    model: "qwen3:8b",
    messages: [
      { role: "system", content: "日本語で簡潔に回答してください。" },
      { role: "user", content: question },
    ],
    stream: true,
  });
  for await (const part of stream) res.write(part.message.content);
  res.end();
});

app.listen(3000, () => console.log("http://localhost:3000"));
curl -N -X POST http://localhost:3000/api/ask \
  -H "Content-Type: application/json" \
  -d '{"question":"API とは何ですか?"}'

更新日 2026年10月12日