ゲスト
📢 PR Claude Opus 4.7 公開! 新機能・破壊的変更・移行手順を 5 分で確認 →

Claude マスターレッスン / Level 5 — API / レッスン 5-4

Level 5 — API

ストリーミング応答

所要時間: 8分  |  更新: 2026-04-24

ストリーミング応答

要約 — このレッスンの要点

  • ストリーミングとは、Claude の応答を生成しながら逐次受信する方式。ユーザーはすべて生成されるまで待たずに読み始められる。
  • SDK では client.messages.stream() を使う。内部的には Server-Sent Events(SSE) を利用している。
  • Python では stream.text_stream でテキストチャンクを反復処理できる。TypeScript では .on("text", ...) イベントハンドラが使える。
  • ストリーミング自体には追加コストは発生しない。消費トークン数は非ストリーミングと同一。
  • コード例は出典を一次情報とする。

なぜストリーミングを使うか

通常の messages.create() は応答全文が生成されてからレスポンスを返します。 長い出力の場合、ユーザーは数秒〜数十秒待たされる可能性があります。 ストリーミングを使うと、生成された文字が即座に届くため、 チャット UI などで体感的な速度が大幅に改善されます。

ストリーミングは SSE(Server-Sent Events) 形式で実装されています 出典

Python — ストリーミングコード例

以下は公式ドキュメントのコード例に準拠した構成です 出典

import anthropic

client = anthropic.Anthropic()

with client.messages.stream(
    max_tokens=1024,
    messages=[{"role": "user", "content": "日本の歴史について教えてください"}],
    model="claude-opus-4-7",
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

text_stream はテキストチャンク(文字列)を順に yield するジェネレータです。 flush=True を指定することで、バッファリングなしに即時出力されます。

TypeScript — ストリーミングコード例

TypeScript では .on("text", ...) イベントハンドラでチャンクを受け取ります 出典

import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic();

await client.messages
  .stream({
    messages: [{ role: "user", content: "日本の歴史について教えてください" }],
    model: "claude-opus-4-7",
    max_tokens: 1024
  })
  .on("text", (text) => {
    process.stdout.write(text);
  });

最終メッセージの取得

ストリーム完了後に完全な Message オブジェクト(usage を含む)が必要な場合は、 stream.get_final_message()(Python)または stream.finalMessage()(TypeScript)で取得できます。

# Python — ストリーム完了後の完全メッセージ取得
with client.messages.stream(...) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

final = stream.get_final_message()
print(final.usage)  # 使用トークン数を確認

使いどころの整理

方式 向いているケース
非ストリーミング バッチ処理・後処理が多い・応答全文が必要な場合
ストリーミング チャット UI・ターミナル出力・長文生成のリアルタイム表示

さらに深く読む