Skip to content

原文(日本語に翻訳)

パイプ(非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行を出力するケースで影響があった可能性があります。

関連情報