複数PCの Claude Code を結ぶ PC 間メールは「配達済み」と「読まれた」を分ける — 13時間黙って止まった事故からの状態機械再設計
Sheet+Apps Script 経由の PC 間メールで、配達済み≠既読のまま 13 時間止まった事故の真因 10 件と、new→delivered→seen→done の状態機械・宛先完全一致・hook の新着順提示・サーバー側 SLA 監視・ループ遮断・Sheets 型変換の罠までをそのまま実装できる粒度で
約17.4万トークンの節約 (API料金換算で約260円分)。 要件定義・技術調査・試行錯誤ぶんのトークンがまるごと不要になります。※ 出品者申告とレビューに基づく推定値。モデル・タスク内容により変動します。
この巻物について
「複数PCの Claude Code を結ぶ PC 間メールは「配達済み」と「読まれた」を分ける — 13時間黙って止まった事故からの状態機械再設計」は、開発プロセスカテゴリのAI指示書(MDファイル)です。Sheet+Apps Script 経由の PC 間メールで、配達済み≠既読のまま 13 時間止まった事故の真因 10 件と、new→delivered→seen→done の状態機械・宛先完全一致・hook の新着順提示・サーバー側 SLA 監視・ループ遮断・Sheets 型変換の罠までをそのまま実装できる粒度でこの巻物をAIに読み込ませると、ゼロから設計・調査する場合に比べて 約17.4万トークン(API料金換算で約260円)・97%のトークンを節約できます。
- カテゴリ
- 開発プロセス
- 対応AI
- claude-code、cursor、codex-cli
- ライセンス
- 商用利用可 (再販不可)
- 価格
- 無料
- ゼロから開発時
- 約18万トークン
- この巻物使用時
- 約6,000トークン
- 節約量
- 約17.4万トークン (約260円)
- 更新日
- 2026-10-14
使い方 (AIに渡す3つの方法)
いちばん簡単なのはワンライナー。Claude Code のターミナルに貼るだけです。
claude "https://makimono-md.vercel.app/api/v1/files/pc-claude-code-pc-13/raw を読み込んで、この指示書どおりに実装して"
中身
複数 PC の Claude Code を 1 枚のスプレッドシート経由で結ぶ「PC 間メール」の設計 — 「配達済み」と「読まれた」を分けないと 13 時間黙って止まる
症状
別 PC の Claude Code に作業依頼を送った。送信側は「配達済み」と表示されたのに返事が来ず、「未着」と判断して人が止まった。実際は受信側に 4 秒で届いており、受信側の Claude がそれを読んだのは 13 時間後だった。
真因(10 件の構造欠陥のうち主因 4 つ)
- サーバー(Google Sheet + Apps Script の WebApp)が「既読」を持たない。
deliveredは「受信 PC の 2 分ポーリングが取った」だけ。 - 宛先解決が
label.indexOf(to)の部分一致。kimが複数 PC に当たり、先にポーリングした PC が消費する。 - 受信側は対話セッションでプロンプトが打たれるまで誰も見ない(hook が UserPromptSubmit のみ)。
- hook が古い順・1500 字で打ち切るため、未読が 100 通を超えると新着が永久に出ない。
設計(そのまま実装できる粒度)
状態機械はサーバー 1 か所に置く
new → delivered → seen → done | failed | expired
delivered: 受信 PC のポーリングが取得(deliveredAt, deliveredBy)seen: 受信 PC の Claude のコンテキストに注入された/CLI で本文を読んだ/ヘッドレス実行を開始した(seenAt, seenBy)done: 返信(resultAt)または返信不要の ack(ackAt)failed: 受信側で処理不能(failReason)、expired: 期限切れ(サーバーの時間トリガーが付与)- 遷移は前進のみ・冪等(done の後に seen を受けても done のまま ok を返す)。送信側は
--sent-status <id>で「どこまで進んだか」を見る。--wait-for seen|doneで「読まれた」時点で戻れる。
宛先は完全一致
- PC 名簿(JSON: 作業用番号 ⇔ ラベル ⇔ hostname)を正本にし、CLI は送信前に正規ラベルへ解決。解決できなければ送らず exit 4 で候補を表示。
- サーバー側も完全一致を優先。旧 CLI の互換で部分一致を残すなら「既知ラベルに完全一致する宛先は部分一致で絶対に配達しない」「既知ラベル集合が取れなければ fail-closed」。
受信(2 分ポーリング)
- 処理済み判定は inbox の
status1 か所(.processedのような別マーカーを作らない。対話で返信済みのものをポーリングが再実行して二重返信する)。 - 1 通ごと try/catch。検証エラーだけ隔離(quarantine +
fail)、I/O 例外は次回再試行。 - inbox JSON の read-modify-write はファイル単位ロック(
wxで作成、mtime 2 分で stale 回収)。hook とポーリングが同時に書くため。 - 到着時に即時アクションを分類:
[判断依頼]/[作業依頼]/urgent は Discord に 1 行通知(1 id 1 回、受信完了後に一括・5 秒/通・合計 20 秒で打ち切り)。 - サーバーへの
seen/ack送信失敗はpendingServerに積み、次回ポーリングで一括再送(未知 action は 1 時間バックオフ・5 回で諦める。旧サーバーと混在しても壊れない)。
提示(hook)
- SessionStart と UserPromptSubmit の両方。hook はサーバーと通信しない(5 秒で kill される)。ポーリングが 3 分より古ければ detached で起動するだけ。lock を持たない。
- 表示順: 未回答の判断依頼 3 → 作業依頼/urgent 3 → 自分宛の回答 3(注入後に自動 ack)→ その他 2。全カテゴリ新しい順。1 通 240 字・全体 1800 字。末尾に「他 N 件(期限切れ M 件は除外): <一覧コマンド>」。
- 注入した id は
presentedAt/presentedSessionを記録しseenをサーバーへ fire-and-forget。同じセッションでは件数行だけにする。
ループ・重複の遮断
- 全メールに
auto(自動生成か)とhop。auto→auto の返信はサーバーが拒否、hop≥3 も拒否。返信への返信は CLI が exit 3。 - 返信は固定 id(原本 id +送信者の hash)で重複防止。ただし本文が異なる 2 通目は新 id(受領 ack が先に固定 id を取って本回答が消える事故を防ぐ)。
- id は
mail-<ms>-<8hex 乱数>。サーバーが duplicate を返したら id を再生成して 1 回だけ再送。
監視はサーバー側に移す
- Apps Script の 10 分時間トリガー: (a) 期限切れ→expired(done/failed は上書きしない)、(b) delivered で seen 無しが 2h(urgent)/6h 超→「未読 SLA 超過」、(c) new で delivered 無しが 30 分超→「未配達(受信タスク停止)」。アラートは専用タブに 1 id 1 行 upsert、webhook があれば直接投稿、無ければタブ記録のみ(PC 側 watchdog がフォールバック)。
- 受信タスクの自己修復は「LastRunTime があるか」ではなく「LastTaskResult≠0(実行中 0x41301/未実行 0x41303 は正常)または最終ポーリングが 10 分より古い」で再登録+即 1 回ポーリング。
実測で踏んだ罠
- Sheets は boolean/number を型変換して返すため、書込後の read-back を厳密比較すると「行は作られたのに mismatch」で CLI が失敗を返し、呼び出し側が再送する。比較前に両辺を正規化(boolean→'true'/'false'、数値→String、空→''、オブジェクト→JSON)。
- コマンドキュー(Drive フォルダに
cmd_*.jsonを置く方式)へ API で投入するときは mimeType をapplication/jsonに明示。省略すると Google ドキュメントに変換され、Apps Script が%PDFを読んでエラーになる。 - テストで detached spawn を期待するときは
detached: trueを手書きせず、OS 別オプションを返す正本関数から導出する(Windows CI で落ちる)。
完了の定義(実測)
自分宛に note を送る → 2 分以内に delivered → 新セッションの hook が先頭側に提示 → --sent-status が seen → --ack で done。部分一致の宛先は exit 4。
よくある質問
+「複数PCの Claude Code を結ぶ PC 間メールは「配達済み」と「読まれた」を分ける — 13時間黙って止まった事故からの状態機械再設計」とは何ですか?
Sheet+Apps Script 経由の PC 間メールで、配達済み≠既読のまま 13 時間止まった事故の真因 10 件と、new→delivered→seen→done の状態機械・宛先完全一致・hook の新着順提示・サーバー側 SLA 監視・ループ遮断・Sheets 型変換の罠までをそのまま実装できる粒度で
+どれくらいトークン(費用)を節約できますか?
ゼロから開発すると約18万トークンかかりますが、この巻物を使えば約6,000トークンで済みます。差し引き約17.4万トークン(API料金換算で約260円)・97%の節約です。
+どうやって使いますか?
無料です。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ファイルごとに承認ゲートを挟む。受託開発・チーム開発向け。
この巻物、誰かのトークンも救えます
𝕏 で節約レシートをシェア