DEV Community 日本語 フォロー 4つのアラームスロット、3つの障害モード:スリープ、レース、タイムアウトを乗り越えるナイトリードレインの構築 Claude Codeの会話は、設計上、永続的なメモリを持たないため、ユーザーはコンテキストを繰り返し説明する必要があります。この長期記憶の欠如は、特に複数のプロジェクトを管理する際に生産性を低下させます。これを克服するために、著者はClaude CodeのログをObsidianボルトにエクスポートする毎晩実行されるスクリプトを開発しました。この自動化されたプロセスにより、手動での要約の必要がなくなり、ユーザーの意志力に関係なく知識が保存されるようになります。Obsidianは、ローカルのMarkdownファイル、Gitバージョン管理、およびリンク機能により、効果的な外部ブレインとして選択されました。スクリプトの開発中に、堅牢な3層設計を必要とする3つの重大な障害が発生しました。Macがスクリプト実行中にスリープ状態になった際にスリープフリーズの問題が発生し、処理が不完全なままになりました。スケジュールされたスクリプト実行と手動実行が重複した際にダブル実行レースが発生し、Gitの競合を引き起こしました。最後に、大量のログ処理がスクリプトの時間制限を超えた際にタイムアウト障害が発生しました。これらの障害により、マルチスロット再実行システム、スリープ防止のためのcaffeinate、およびステップマーカーを使用した冪等性のあるリトライが実装されました。この設計により、中断された場合でも、処理は中断された場所から再開されます。システムは現在、Claudeセッションログから始まり、生の会話ファイル、Obsidianボルト、そして最終的にはプライベートGitリポジトリへと進む4層アーキテクチャを備えています。スクリプトの複数のスケジュールされたスロットは冗長性を提供し、後続の実行で未完了のタスクを引き継ぐことができます。Caffeinateはシステムのスリープを防ぐために使用され、ロックディレクトリはスクリプトの同時実行を防ぎます。冪等性のあるリトライは、完了したステップをマークすることで達成され、スクリプトは既に処理されたセグメントをスキップできます。これにより、障害が発生した場合でも、毎日の取り込みプロセスは最終的に完了することが保証されます。launchd plistの設定とPATHの調整(nvm node discoveryを含む)により、スクリプトは最小限の実行環境で確実に実行されます。macOSのプライバシー保護によるサイレントな障害を防ぐために、/bin/bashのフルディスクアクセスが早期にチェックされます。スクリプトは、初期シグナルが無視された場合でも、GNU coreutilsのtimeoutを使用したrun_to関数を利用して、プロセスの終了を保証します。この包括的なセットアップにより、Claude Codeの会話のための回復力のある外部メモリが作成されます。 Four Alarm Slots, Three Failure Modes: Building a Nightly Drain That Survives Sleep, Races, and Timeouts dev.to DEV Community 日本語 RSS thenote.app
run_to関数を利用して、プロセスの終了を保証します。この包括的なセットアップにより、Claude Codeの会話のための回復力のある外部メモリが作成されます。