「数字が変わらない」— 定期出力が止まった時に最初に疑う場所を間違えない
定期レポートが更新されない・エラーログは空・手動実行は成功。この組み合わせは「起動していない」のサイン。診断順序(トリガー登録→手動実行→実装)と、二度と沈黙させない実装パターン(キャッシュ鮮度警告・stderr保存・finally解放)
約1.2万トークンの節約 (API料金換算で約18円分)。 要件定義・技術調査・試行錯誤ぶんのトークンがまるごと不要になります。※ 出品者申告とレビューに基づく推定値。モデル・タスク内容により変動します。
この巻物について
「「数字が変わらない」— 定期出力が止まった時に最初に疑う場所を間違えない」は、開発プロセスカテゴリのAI指示書(MDファイル)です。定期レポートが更新されない・エラーログは空・手動実行は成功。この組み合わせは「起動していない」のサイン。診断順序(トリガー登録→手動実行→実装)と、二度と沈黙させない実装パターン(キャッシュ鮮度警告・stderr保存・finally解放)この巻物をAIに読み込ませると、ゼロから設計・調査する場合に比べて 約1.2万トークン(API料金換算で約18円)・86%のトークンを節約できます。
- カテゴリ
- 開発プロセス
- 対応AI
- claude-code、cursor、codex-cli
- ライセンス
- 商用利用可 (再販不可)
- 価格
- 無料
- ゼロから開発時
- 約1.4万トークン
- この巻物使用時
- 約1,900トークン
- 節約量
- 約1.2万トークン (約18円)
- 更新日
- 2026-10-02
使い方 (AIに渡す3つの方法)
いちばん簡単なのはワンライナー。Claude Code のターミナルに貼るだけです。
claude "https://makimono-md.vercel.app/api/v1/files/md-ae4d6c56/raw を読み込んで、この指示書どおりに実装して"
中身
「数字が変わらない」— 定期出力が止まった時に最初に疑う場所を間違えない
定期実行しているレポートやダッシュボードの数字が更新されなくなった。 ログを見てもエラーが1行も出ていない。スクリプトを手で動かすと普通に成功する。
この組み合わせに出会ったら、スクリプトのバグを探すのをやめる。 ほぼ確実に「そもそも起動していない」。
1. なぜ時間を溶かすのか
人は「出力がおかしい=出力を作る処理がおかしい」と考える。だから実装を読み始める。 しかしトリガーが外れていた場合、処理は一度も走っていない。 走っていないものにバグは無いので、読んでも何も見つからない。
さらに悪いことに、この故障は気づくのが遅れる。 多くの実装は「前回の結果をキャッシュして、更新に失敗したら前回値を出す」設計になっている。 すると画面にはそれらしい数字が出続ける。誰も壊れていると思わない。
実例: ある定期レポートが6日間、古い集計値を「現在値」の顔で表示し続けた。 実際の値は表示の約1.27倍まで乖離していた。表示が空白やエラーになっていれば即日気づけたはずだった。
2. 診断順序(これを逆にやらない)
① トリガーが登録されているか
最初に見るのはここ。実装ではない。
- hook / cron / スケジューラ / CI のスケジュール定義に、その処理が今も載っているか
- 設定ファイルを他の自動処理が書き換えて、エントリごと消えていないか
設定ファイルは「自動整形」「自動マージ」「別PCからの同期」で黙って行が消えることがある。 消えても誰も通知してくれない。
② 手動実行が通るか
通るなら実装は無実。①か③の問題。 通らないなら、ここで初めて例外が読める。
③ 起動痕跡と突き合わせる
実装が「起動した証拠」を残しているなら、それを読む。
| 見るもの | 読み方 |
|---|---|
| ロックファイルの更新時刻 | 新しい → 起動はしている / 古い → 起動していない |
state ファイルの lastRun | ここが止まった日 = 最後に完走した日 |
| エラーログのサイズ | 空は「正常」ではない。「起動していない」かもしれない |
最重要: エラーログが空なのを「エラーが無い=正常」と読まない。 「起動していない」と「起動して成功した」は、どちらもエラーログを空にする。 この2つを区別できるのは起動痕跡だけ。
3. 二度と沈黙させないための実装パターン
原因を直すだけでは足りない。次に壊れた時に気づける形にする。
(a) キャッシュを出すなら鮮度を必ず名乗らせる
古い値を今の値の顔で出すのが最大の実害。許容時間を超えたら先頭に1行付ける。
const MAX_AGE_MS = 6 * 60 * 60 * 1000;
function readCache(file) {
let fd;
try {
fd = fs.openSync(file, 'r');
const updatedAt = fs.fstatSync(fd).mtimeMs;
const body = fs.readFileSync(fd, 'utf8');
if (Date.now() - updatedAt < MAX_AGE_MS) return body;
return `⚠️ この数値は ${fmt(updatedAt)} 時点のキャッシュです(更新に失敗しています)\n${body}`;
} catch {
return null;
} finally {
if (fd !== undefined) fs.closeSync(fd);
}
}
実測で効く。導入後、最初の起動でいきなり10日分の滞留を拾った。
(b) 裏で走らせる子プロセスの出力を捨てない
stdio: 'ignore' は例外を闇に葬る。最低限 stderr はファイルに向ける。
const errFd = fs.openSync(ERROR_LOG, 'a');
const child = spawn(process.execPath, args, {
detached: true,
stdio: ['ignore', 'ignore', errFd],
});
child.once('error', (e) => { logError(e); releaseLock(); });
child.unref();
(c) 後始末を beforeExit に頼らない
beforeExit は異常終了では発火しない。
ロック解除とキャッシュ保存を beforeExit に置くと、落ちた時にロックが残り、
以後ずっと「前の実行が動作中」と誤認して起動をスキップし続ける。沈黙が永続化する。
try {
await collect();
cache.save(); // 成功した時だけ保存する
} catch (e) {
logError(e);
process.exitCode = 1;
} finally {
releaseLock(); // 成否に関わらず必ず解放
}
(d) 非同期の完了を待ってから保存する
// NG: 投稿の完了前にプロセスが終わり得る。保存も解放もされない
fetch(url, opts).then(...).finally(() => save());
// OK
await fetch(url, opts);
save();
これが沈黙の典型的な発生源。「たまに更新される / たまにされない」の正体はほぼこれ。
(e) ロックに最大寿命を持たせる
プロセスが強制終了されると finally すら走らない。
ロックは「作成から N 分経っていたら無視して奪う」設計にしておく。
4. チェックリスト
定期出力を作ったら、最後にこれを確認する。
- トリガー登録が消えた時に気づける手段があるか
- キャッシュを返す経路に鮮度警告があるか
- 子プロセスの stderr が残るか
- ロック解除が
finallyにあるか - ロックに最大寿命があるか
- 非同期処理を
awaitしてから保存しているか - 「エラーログが空」を正常と判定していないか
5. まとめ
- 出力が更新されない時の調査順は ①トリガー登録 → ②手動実行 → ③実装。逆にやると溶ける。
- 空のエラーログは無罪の証明ではない。起動痕跡と必ず突き合わせる。
- キャッシュは自分が古いことを名乗る。黙って古い値を出すのが一番の害。
beforeExitとstdio:'ignore'は沈黙製造機。finallyと stderr 保存に置き換える。
よくある質問
+「「数字が変わらない」— 定期出力が止まった時に最初に疑う場所を間違えない」とは何ですか?
定期レポートが更新されない・エラーログは空・手動実行は成功。この組み合わせは「起動していない」のサイン。診断順序(トリガー登録→手動実行→実装)と、二度と沈黙させない実装パターン(キャッシュ鮮度警告・stderr保存・finally解放)
+どれくらいトークン(費用)を節約できますか?
ゼロから開発すると約1.4万トークンかかりますが、この巻物を使えば約1,900トークンで済みます。差し引き約1.2万トークン(API料金換算で約18円)・86%の節約です。
+どうやって使いますか?
無料です。MDファイルを Claude Code などのAIに読み込ませるだけ。ワンライナーをターミナルに貼れば実装が始まります。要件定義や技術調査を省いて実装だけにトークンを使えます。
+どのAIツールに対応していますか?
claude-code、cursor、codex-cli に対応しています。
+商用利用できますか?
ライセンスは「商用利用可 (再販不可)」です。
🤝 自分でAIを動かすのは、まだ不安…という方へ
この巻物の内容を、AIを使うプロに丸ごと任せることもできます。姉妹サービスAI代行堂なら「LINEで頼むだけで、仕事が完成」。
関連する巻物
スマホ(Remote Control)から即相談できる Claude Code タブを VS Code に毎朝自動で用意する
自作VS Code拡張で公式Claude Codeのコマンド(editor.openLast/newConversation/renameSessionTab)を叩き、名前付きタブをN本自動補充。夜間はWM_CLOSE→再起動で毎朝揃える。--bg/ターミナル経路・タブ0でのnewConversation・SendKeys再読み込みが失敗する実測付き
夜間ジョブ異常を通知で終わらせず自動修復→AI修理PR→人へ引き渡す閉ループ
監視の『検知して通知』の後段に、決定的Playbook→AIコーダーの隔離worktree修理PR→持ち越し→人への3要素引き渡し、を足す実装指示書。argvで指示を渡すな等の実測の落とし穴つき
ドキュメント駆動開発プロセス CLAUDE.md — 作るものを固めてから書かせる
「AIが暴走して意図と違うものを作る」を根絶する開発プロセス指示書。UI仕様→機能設計→実装の順をAIに強制し、1ファイルごとに承認ゲートを挟む。受託開発・チーム開発向け。
この巻物、誰かのトークンも救えます
𝕏 で節約レシートをシェア