Skip to content

原文(日本語に翻訳)

50,000文字を超えるフック出力をコンテキストに直接注入せず、ファイルパスとプレビューでディスクに保存するよう変更

原文(英語)

Changed hook output over 50K characters to be saved to disk with a file path + preview instead of being injected directly into context

概要

フックコマンドの出力が50,000文字(約50KB)を超える場合、その内容がClaudeのコンテキストに直接注入されなくなりました。代わりに出力はディスクに保存され、コンテキストにはファイルパスと出力のプレビューのみが渡されます。これにより、大量の出力を生成するフックがコンテキストウィンドウを圧迫することを防ぎ、長時間セッションの安定性が向上します。

基本的な使い方

この変更は自動的に適用されます。フック出力が50KBを超えた場合、Claudeは以下のような情報を受け取ります:

# フック出力が50KB超の場合、コンテキストへの注入内容(例)
フック出力が大きすぎるため、ファイルに保存されました:
  パス: /tmp/claude-hook-output-12345.txt
  サイズ: 245,678文字
  プレビュー(最初の500文字):
    [出力の冒頭部分...]

実践例

大量ログ解析フックの例

bash
#!/bin/bash
# analyze-logs.sh(フック用スクリプト)

# 大量のログファイルを分析する場合
ANALYSIS=$(analyze-application-logs --full --format=json)

# 出力が50KB以下の場合:コンテキストに直接注入される
# 出力が50KB超の場合:自動的にディスクに保存され、パス+プレビューが渡される
echo "$ANALYSIS"

フック出力サイズを意識した設計

bash
#!/bin/bash
# optimized-hook.sh

LOG_FILE="/var/log/app/app.log"
OUTPUT_LIMIT=45000  # 50KB未満に抑える

# 重要な情報のみを抽出してサイズを制限
ERRORS=$(grep "ERROR\|CRITICAL" "$LOG_FILE" | tail -100)
WARNINGS=$(grep "WARN" "$LOG_FILE" | tail -50)

SUMMARY="エラー件数: $(echo "$ERRORS" | wc -l)
最新エラー:
$ERRORS

警告件数: $(echo "$WARNINGS" | wc -l)
最新警告:
$WARNINGS"

# コンテキストに直接注入されるよう50KB未満に収める
echo "${SUMMARY:0:$OUTPUT_LIMIT}"

大量出力を前提としたフック設計

python
#!/usr/bin/env python3
# large-output-hook.py

import json
import subprocess
import sys

# 大量データを処理するフック
result = subprocess.run(
    ["run-comprehensive-analysis"],
    capture_output=True,
    text=True
)

output = result.stdout

if len(output) > 50000:
    # 出力が大きい場合、重要なサマリーのみを先頭に置く
    # (プレビューとして表示される部分を有意義にする)
    summary = generate_summary(output)
    print(f"""
=== サマリー(最重要情報) ===
{summary}

=== 詳細データ(以下ファイルに保存) ===
{output}
""")
else:
    print(output)

保存されたフック出力の読み取り

bash
# Claudeが参照するフック出力ファイルを確認(デバッグ用)
ls /tmp/claude-hook-output-*.txt

# フルコンテンツの確認
cat /tmp/claude-hook-output-12345.txt | less

注意点

  • 50,000文字(バイト数ではなく文字数)が閾値です
  • 出力ファイルのパスはコンテキストに渡されるため、Claudeは必要に応じてファイルを読み取ることができます
  • プレビューは出力の先頭部分が表示されます。フックの重要な情報を先頭に配置するよう設計することを推奨します
  • 一時ファイルのクリーンアップはシステムのポリシーに従います。長時間セッションでは一時ファイルが蓄積する可能性があります
  • この変更はコンテキストウィンドウの効率的な使用を促進します。フックの出力設計を見直す良い機会です

関連情報