CLAUDE LABEN
COWORK — Claude CoworkがWeb・モバイルに拡張され、リモートセッション・ファイル同期・端末間のChat/Coworkホーム共有に対応しましたM365 — Claude CoworkにMicrosoft 365の書き込みツールが加わり、メール送信・カレンダー管理・OneDrive/SharePointの作成更新ができますMCP — 管理者がIdP(まずOkta)経由で組織全体にMCPコネクタを配布でき、初回ログインで自動的にアクセスが付与されますCODE — Claude CodeでheadlessセッションのSessionStartフック配信が修正され、フック実行中のアイドル切断を防げますGOV — Claude CodeとClaude CoworkがFedRAMP High環境のClaude for Government Desktopでパブリックベータ提供されていますLIMITS — Claude Codeの週次利用上限が7月13日まで50%引き上げられていますCOWORK — Claude CoworkがWeb・モバイルに拡張され、リモートセッション・ファイル同期・端末間のChat/Coworkホーム共有に対応しましたM365 — Claude CoworkにMicrosoft 365の書き込みツールが加わり、メール送信・カレンダー管理・OneDrive/SharePointの作成更新ができますMCP — 管理者がIdP(まずOkta)経由で組織全体にMCPコネクタを配布でき、初回ログインで自動的にアクセスが付与されますCODE — Claude CodeでheadlessセッションのSessionStartフック配信が修正され、フック実行中のアイドル切断を防げますGOV — Claude CodeとClaude CoworkがFedRAMP High環境のClaude for Government Desktopでパブリックベータ提供されていますLIMITS — Claude Codeの週次利用上限が7月13日まで50%引き上げられています
記事一覧/Claude Code
Claude Code/2026-07-10上級

PreCompact と SessionEnd で長時間セッションの決定事項を引き継ぐ

自動コンパクションで消えるのは会話ではなく「なぜそう決めたか」です。PreCompact / SessionEnd / SessionStart の3フックで決定ログを外部ファイルへ退避し、次のセッションへ確実に手渡す実装を、動くコードと実測値つきで解説します。

Claude Code187hooks14context4automation50PreCompact

プレミアム記事

深夜 2 時に走らせていた自動処理のセッションが、コンパクションを挟んだ直後に「さっき却下したはずの案」を再提案してきたことがあります。

会話の内容は要約されて残っていました。消えていたのは、なぜその案を却下したのかという一行だけでした。

コンパクションは文字数を削るのであって、重要度で選り分けてくれるわけではありません。要約に残るのは「何をしたか」で、落ちるのは「なぜそうしたか」です。個人開発で複数のサイトを夜間に回している立場からすると、この一行の欠落が翌朝の手戻りに直結します。

そこで私は、コンパクションが走る直前に決定事項だけを外部ファイルへ逃がし、次のセッションの開始時に読み戻す仕組みを入れました。使うのは Claude Code の PreCompactSessionEndSessionStart という 3 つのフックです。

コンパクションで落ちるのは「判断の根拠」

自動コンパクションはコンテキストが上限に近づいたときに発火します。手動の /compact と同じ処理ですが、無人運用では発火のタイミングを選べません。

私の環境で 4 サイト分の記事生成セッションを 6 時間走らせたときのトランスクリプトは 14.2 MB(JSONL・約 3,900 行)でした。コンパクション後にセッションへ残っていた要約は 4,100 文字程度です。圧縮率としては妥当ですが、この 4,100 文字に「Cloudflare Workers の 62 MiB 制限があるので articles.json にはメタデータだけを載せる」という前提は残っていませんでした。

要約が悪いのではありません。要約に何を残すかを指定していないことが問題でした。

ならば、要約に期待するのをやめて、自分で抜き出して外に置けばよい。それがこの記事の設計です。

PreCompact フックが受け取るもの

PreCompact は、自動・手動を問わずコンパクションが実行される直前に発火します。フックスクリプトは標準入力から JSON を1つ受け取ります。

{
  "session_id": "0b8f2c14-...",
  "transcript_path": "/Users/you/.claude/projects/.../0b8f2c14-....jsonl",
  "cwd": "/Users/you/work/claudelab.net",
  "hook_event_name": "PreCompact",
  "trigger": "auto",
  "custom_instructions": ""
}

押さえておきたいのは次の 3 点です。

trigger"auto""manual" のどちらかです。/compact を手で叩いたときだけ "manual" になります。無人運用で拾いたいのはほぼ "auto" の方です。

transcript_path は、そのセッションの全履歴が入った JSONL ファイルの絶対パスです。1 行 1 メッセージで、まだコンパクションの状態が読めます。ここが肝心で、PreCompact を逃すとこの生の履歴には二度とアクセスできません。

custom_instructions は手動コンパクション時に渡した指示が入ります。自動時は空文字です。

フック発火タイミングこの設計での役割
PreCompactコンパクション直前生の履歴から決定事項を抽出して退避
SessionEndセッション終了時最終スナップショットと索引の確定
SessionStartセッション開始・再開時退避した決定事項をコンテキストへ注入

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
長時間セッションでコンパクションのたびに前提が抜け落ちて困っていた方が、PreCompact フックで決定事項だけを外部へ退避できるようになります
transcript_path の JSONL を安全に読む Python 実装と、SessionStart の additionalContext で復元するまでの一連のコードが手に入ります
60 秒タイムアウト・stdout の扱い・trigger 値の取り違えという、実際に踏んだ3つの落とし穴を回避して無人運用に組み込めます
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

Claude Code2026-06-18
SessionEnd フックに後片付けとログ記録を寄せる
Claude Code に追加されたポストセッションフックを使い、セッション終了後の一時ファイル削除とログ記録を自動化する方法を、複数リポジトリを順に処理する運用の実例とともにまとめました。
Claude Code2026-07-07
検知はできても、鳴りすぎて気づけなくなった — 個人運用のアラートを一通の『起こす価値のある報せ』に絞るまで
無音の不発を検知できるようにした途端、今度は通知が鳴りすぎて麻痺しました。事象ではなく行動を単位にアラートを畳み、ヒステリシスと静音時間、段階的エスカレーションで『起こす価値のある報せ』だけを残すまでの設計メモです。
Claude Code2026-07-01
Claude Code をアップデートしたら hook が発火しなくなった — ハイフン入り matcher の厳密一致化(v2.1.195)
Claude Code v2.1.195 でハイフンを含む hook matcher が部分一致から厳密一致に変わり、既存の PreToolUse フックが静かに発火しなくなりました。原因の切り分けと、壊れない matcher の書き方をまとめます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →