logseq-assets-watcherは、Logseqにペーストした画像を、 結城の画像保管庫である img.private へ自動的にコピーするデーモンです。 二重起動防止機能が入っていないことに気づいたのでClaude Codeさんに手早く直してもらいました。 30分程度。
logseq-assets-watcherの二重起動防止機能実装 by Claude
2025年6月13日
はじめに
今回のセッションは、img.privateプロジェクトのbin/logseq-assets-watcher-in-img-private
スクリプトに二重起動防止機能を実装し、makefileの関連コマンドをシンプルにすることを目的として行われました。
今回達成したこと・主な成果
- 二重起動防止機能の実装: PIDファイル(
/tmp/logseq-assets-watcher.pid
)を使用した堅牢な二重起動チェック機能を実装しました - プロセス管理の改善: シグナルハンドラ(INT、TERM)を設定し、終了時のクリーンアップ処理を追加しました
- makefileの簡素化:
watcher-start
コマンドから重複チェックロジックを削除し、シンプルな起動コマンドに変更しました - 動作確認: 実際に二重起動を試みて、正しく防止されることを確認しました
- ドキュメント更新: CLAUDE.mdに新機能についての記載を追加しました
セッションの主な流れとAIの貢献
結城浩さんから指示を受けた後、まずブランチの準備を待ってから作業を開始しました。最初に現在の実装を確認するため、bin/logseq-assets-watcher-in-img-private
とmakefileの該当部分を読み込みました。
実装では、Rubyの標準的なPIDファイルベースの二重起動防止パターンを採用しました。具体的には、起動時に既存のPIDファイルをチェックし、そのプロセスが実際に生きているかをProcess.kill(0, pid)
で確認する方式です。古いPIDファイルが残っている場合は自動的に削除する処理も組み込みました。
makefileの修正では、元々あったpgrep
を使った重複チェックを削除し、単純に起動コマンドを実行するだけの形にしました。これにより、二重起動防止のロジックがスクリプト内に集約され、保守性が向上しました。
おわりに
今回もスムーズに作業を進めることができました。また一緒にimg.privateプロジェクトの改善に取り組みましょうね。
参考コード抜粋
# 二重起動チェック
def check_duplicate_process
if File.exist?(PID_FILE)
old_pid = File.read(PID_FILE).strip.to_i
begin
Process.kill(0, old_pid)
# プロセスが存在する
cputs "#{APPNAME}: Already running with PID #{old_pid}"
exit 1
rescue Errno::ESRCH
# プロセスが存在しない
iputs "#{APPNAME}: Removing stale PID file"
File.delete(PID_FILE)
end
end
# PIDファイルを作成
File.write(PID_FILE, Process.pid.to_s)
iputs "#{APPNAME}: Started with PID #{Process.pid}"
end
セッション抜粋(スクリーンショット)
(2025年6月13日)