Infrastructure

2台のMacのAI作業ログを1か所に集めた。そして6日間、静かに失敗していた

AIとの会話ログは既定で30日で消えます。保持を変えて2台ぶんをクラウドへ日次同期した構成と、その同期が作った当日から6日間ずっと失敗していた話。

2026.10.08 公開読むのに約 2分約 1,464字

AIに作業をさせると、成果物はリポジトリに残ります。ところが「なぜそう作ったか」は会話のほうにしか残りません。設計の分かれ目、却下した案、測った数字。コードのコメントに書き切れなかったものが全部こちらにあります。

そして Claude Code の会話ログは、既定では30日で消えます(cleanupPeriodDays の初期値が30)。弊社はこれで1日ぶんのセッションを実際に失いました。消えたあとに気づいたので、復旧はできていません。

やったこと

  1. 保持期間を30日から100年に変える

    cleanupPeriodDays を 36500 にします。ログはJSONLで1セッション1ファイル。2台合わせて約11GBで、消す理由になる大きさではありません。

  2. 1日1回、クラウドへ一方向で同期する

    毎日決まった時刻に、各マシンのログ置き場をクラウドストレージへ送ります。一方向にするのが肝心です。双方向にすると、片方で消えたものがもう片方でも消えます。控えの意味がなくなります。

  3. マシンごとにフォルダを分ける

    同じ人が複数のマシンで作業すると、プロジェクト名が衝突します。保存先をマシン名で切っておくと、あとから「どちらでやった作業か」で辿れます。

集まったセッション
約9,800本
2台ぶん。作業用が約8,800本、持ち歩き用が約990本。
容量
約11GB
消す理由にならない大きさ。保持期間を縮める判断は、容量以外の理由で来る。
保持期間
36,500日
既定の30日から変更。30日のままで1日ぶんを失ったあとの対応。

6日間、毎日失敗していた

ここからが本題です。この同期は作った当日から6日間、一度も成功していませんでした。気づいたのは7日目です。

原因は exit 127、つまり「コマンドが見つからない」でした。手で実行すると通るのに、自動実行だと落ちる。自動実行の仕組みは、ログイン時の環境変数を引き継ぎません。ターミナルで通っていた PATH がそこには無く、クラウドのコマンドが見つからないまま毎日終了していました。

やっかいなのは、この失敗が何も鳴らさなかったことです。自動実行の記録には「実行した」とだけ残ります。同期先のフォルダには前日までの中身がそのまま置いてあるので、開いても空ではありません。

「更新されていない」ことは、見に行かないと分かりません。空なら気づけます。古いことには気づけません。

直し方と、そこから決めたこと

  • コマンドは絶対パスで書く

    自動実行されるスクリプトの中では、外部コマンドをフルパスで呼びます。手元で通ることは、自動で通ることの保証になりません。

  • 常駐させる検査は、環境変数を空にして回す

    env -i を付けて実行し、環境変数が空でも通るかどうかを見ます。それが本番で通るかどうかです。手元のシェルで確かめた「動きました」は、いちばん当てにならない報告です。

  • 「何もしなかった」と「できなかった」を分けて記録する

    終了コードと、同期した件数と、最終更新時刻をログに残します。0件は正常の顔をして出てきます。件数だけでは区別が付きません。

  • 緑のランプを信じない

    状態を返す仕組みそのものが、古い結果を返し続けることがあります。確かめるときは「最終更新時刻」と「実物の中身」を見ます。

弊社がシステムを作るときは、「静かに失敗する箇所はどこか」を先に決めてから作ります。動かすだけなら半日で作れるものでも、失敗したときに鳴る仕組みが無ければ、動いていない期間がそのまま損失になります。この6日間は、弊社自身がそれを実演した記録です。