原文(日本語に翻訳)
パイプ(非TTY)のInk出力に単一の非常に幅広い行が含まれる場合に発生する、潜在的な過剰メモリアロケーションを修正しました。
原文(英語)
Fixed potential excessive memory allocation when piped (non-TTY) Ink output contains a single very wide line.
概要
Claude Code v2.1.110では、パイプ(|)やリダイレクト経由でClaude Codeの出力を処理する場合(非TTYモード)に、Inkレンダリングエンジンが非常に長い1行(数千文字以上)を含む出力を処理する際に過剰なメモリアロケーションが発生する可能性のある問題が修正されました。この問題により、大きなデータを含む長い行の出力時にメモリ使用量が急増し、パフォーマンスの低下やOOM(メモリ不足)エラーが発生する可能性がありました。
基本的な使い方
この修正はパフォーマンスのバグフィックスのため、v2.1.110へのアップデートで自動的に改善されます。
bash
# パイプ経由でClaude Codeを使用する例(非TTYモード)
claude "このファイルを分析して" | tee output.txt
# 長い1行を含む出力でもメモリ使用量が正常に保たれる実践例
ユースケース1: 大きなBase64エンコードデータの処理
bash
# Base64エンコードされた大きなデータを含む処理
# 1行が非常に長くなる場合
claude "この画像ファイルをBase64エンコードして出力して" | process-output.sh
# 修正前: 非常に長い1行(Base64文字列など)でメモリ使用量が急増することがあった
# 修正後: 長い行でもメモリ使用量が正常範囲に保たれるユースケース2: JSONデータの処理
bash
# 1行に結合されたJSONデータの処理
claude "このデータを1行のJSONとして出力して" | jq .
# 非常に長いJSON行でもメモリ使用量が安定しているユースケース3: CI/CDでの大きな出力処理
yaml
# GitHub Actions での例
- name: コード分析
run: |
# 大きな出力をパイプで処理
claude --print "このコードベース全体を分析してJSON形式で出力して" \
| python3 process_analysis.py
# v2.1.110以降: 長い行を含む大きな出力でもメモリが安定ユースケース4: メモリ使用量のモニタリング
bash
# Claude Code のメモリ使用量を監視しながら実行
/usr/bin/time -v claude "大きなデータを処理して" 2>&1 | tail -20
# または macOS で
/usr/bin/time -l claude "大きなデータを処理して" 2>&1 | grep "maximum resident"
# v2.1.110以降は最大メモリ使用量が正常範囲に収まるユースケース5: 長い行を含む出力の処理スクリプト
bash
#!/bin/bash
# process-long-output.sh
# 長い行を含む可能性のある出力を処理するスクリプト
OUTPUT=$(claude --print "長いデータを出力して" 2>&1)
# v2.1.110以降: このような処理でもメモリが安定
echo "$OUTPUT" | wc -c # 出力サイズを確認
echo "$OUTPUT" | awk '{ print length($0) }' | sort -rn | head # 各行の長さを確認注意点
- 影響を受ける条件 — パイプ/リダイレクト(非TTY)モードで、かつ非常に長い1行(通常のターミナル幅を大幅に超える行)を含む出力がある場合に発生していました。
- TTYモードでは発生しない — ターミナルで直接実行する場合(TTYモード)では発生しない問題でした。
- Inkレンダリングエンジン — Claude Codeは内部的にInk(Reactベースのターミナルレンダリングライブラリ)を使用しており、この修正はInkの行長計算に関するものです。
- 大きなデータを扱うユーザーへの影響 — Base64エンコードデータ、長いJSON、大きなファイルのダンプなど、長い1行を出力するケースで影響があった可能性があります。