← 一覧に戻る

Discord Bot → Second Brain 同期修正

2026年3月7日 16:18 更新

一言でいうと

Discord経由の作業だけ記録されないバグを直した

なぜこれが必要なのか

普段 Claude Code で作業すると、その会話内容は自動的に Second Brain(Obsidian のメモ帳)に保存される。あとから「前にやったあの作業、どんな内容だっけ?」と振り返れる仕組み。

ところが、Discord のボット経由で Claude に指示した作業だけは、一切記録に残っていなかった。スマホから Discord で「あれ調べて」と頼んだ結果が、あとから検索しても出てこない状態。

放置すると、Discord 経由の作業が増えるほど「やったはずなのに記録がない」ケースが積み重なり、Second Brain の信頼性が下がってしまう。

何をしたのか

原因は、Discord Bot が Claude を呼び出すときに付けていたあるオプションにあった。

問題の根っこ

Claude Code にはセッション(会話の単位)ごとにログファイルを残す機能がある。Bot はこれまで --no-session-persistence(セッションを保存しないオプション)を付けて Claude を呼んでいた。そのためログファイル自体が作られず、同期スクリプト(ログを Obsidian に書き出す自動処理)が拾えるデータがそもそも存在しなかった。

Before

  • セッション保存しない設定で実行
  • ログファイルが作られない
  • 同期スクリプトが拾うデータがない
  • Second Brain に何も残らない

After

  • セッションIDを事前に生成して実行
  • ログファイルが正しく作られる
  • 実行完了後に同期スクリプトを呼ぶ
  • Second Brain に自動で記録される

ステップ

1 セッション保存を有効にする
「セッションを保存しない」オプションを外し、代わりに「このIDでセッションを保存して」というオプションに差し替えた。IDを事前に決めておくことで、あとから「このセッションのログを読んで」と指定できる。
BEFORE
claude --print --no-session-persistence
AFTER
claude --print --session-id (事前に生成したID)
2 プロセス検出ロジックの修正
Bot は「今、他の Claude が動いてないか?」をチェックする機能を持っている。Bot が起動した Claude と、手動で起動した Claude を区別するための判定条件も、新しいオプション名に合わせて更新した。
3 実行完了後に同期を呼ぶ
通常の Claude Code では「セッション終了時」に自動で同期スクリプトが走る。しかし Bot が使う --print(結果をテキストで返すモード)ではその自動処理が発火しない。そこで、Bot 側で Discord に返信したあとに、同期スクリプトをバックグラウンド(裏側で別の作業として)で呼ぶようにした。バックグラウンドで動かすので、Discord への返信速度には影響しない。

ポイント

変更したファイルは1つだけ。 claude-runner.ts(Claude を起動して結果を Discord に返す処理を担当するファイル)に約20行を追加・修正しただけ。同期スクリプト本体や他のファイルは変更不要だった。

なぜ同期スクリプトの自動実行が効かないのか。 Claude Code には「セッション終了時にスクリプトを自動実行する」仕組み(Stop フック)がある。しかし --print モードではこのフックが発火しない仕様になっている。これは Claude CLI 側の制約で、Bot 側で代行するのが正しい対処。

見送ったこと。 定期的にまとめて同期する方式(launchd のタイマー)も検討したが、--print セッションは recall list(過去のセッション一覧を取得するコマンド)に表示されない仕様のため、Bot 側で即時同期するのが確実。

📝 質問モード — テキストを選択してね
✓ 質問を送信しました