1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude CodeのStopフックで作業ログを自動記録する

1
Posted at

はじめに

Claude Codeを使って作業していると「今日何をやったか」が後から追いにくい問題があります。

Slackやメモに残すのを忘れるし、Claudeとの会話ログを後から掘り返すのも手間。

そこで Claude CodeのStopフック を使って、セッションが終わるたびに作業ログを自動追記する仕組みを作りました。

セットアップは5分以内で完了します。


Claude Code Hooksとは

ClaudeがAIとして何かをする際、その前後に自動でシェルコマンドを実行できる仕組みです。

フック名 タイミング
PreToolUse ツール使用の前
PostToolUse ツール使用の後
Notification 通知が来た時
Stop Claudeの返答が終わった後 ← 今回使う

作るもの

Claudeが返答するたびに、以下のような日記ファイルに自動追記されます。

# 20260620

## Claude作業ログ

- 14:30: Claudeとセッション
- 14:45: Claudeとセッション
- 15:10: Claudeとセッション

Step 1: シェルスクリプトを作る

任意の場所にスクリプトファイルを作成します。

mkdir -p ~/diary
diary_hook.sh
#!/bin/bash
# Claudeのセッション終了時に diary/ へ自動追記するフック

DATE=$(date +%Y%m%d)
TIME=$(date +%H:%M)
DIARY_DIR="$HOME/diary"
DIARY_FILE="$DIARY_DIR/$DATE.md"

# stdinのJSONを読み捨て(hookの仕様上必要)
cat > /dev/null

# 日記ファイルがなければ今日の見出しを作る
if [ ! -f "$DIARY_FILE" ]; then
  cat > "$DIARY_FILE" << EOF
# $DATE

## Claude作業ログ

EOF
fi

# 「## Claude作業ログ」セクションがなければ追加
if ! grep -q "## Claude作業ログ" "$DIARY_FILE"; then
  echo "" >> "$DIARY_FILE"
  echo "## Claude作業ログ" >> "$DIARY_FILE"
  echo "" >> "$DIARY_FILE"
fi

# タイムスタンプを追記
echo "- $TIME: Claudeとセッション" >> "$DIARY_FILE"

実行権限を付与します。

chmod +x diary_hook.sh

スクリプト内の DIARY_DIR を自分の好きなパスに変更してください。


Step 2: settings.jsonに登録する

プロジェクトルートの .claude/settings.json に以下を追加します。

{
  "hooks": {
    "Stop": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "/絶対パス/diary_hook.sh",
            "statusMessage": "作業ログを記録中..."
          }
        ]
      }
    ]
  }
}

command には diary_hook.sh の絶対パスを指定してください。
~/ は展開されないので注意。

設定ファイルの場所は2種類あります:

ファイル スコープ
~/.claude/settings.json 全プロジェクト共通
.claude/settings.json プロジェクト単位

Step 3: 動作確認

Claude Codeで何か話しかけて、セッションが終わった後に日記ファイルを確認します。

cat ~/diary/$(date +%Y%m%d).md

こんな感じで追記されていれば成功です。

# 20260620

## Claude作業ログ

- 14:30: Claudeとセッション

ポイント:cat > /dev/null が必要な理由

Hookスクリプトは stdinにJSONが渡されます

{
  "session_id": "...",
  "tool_name": "...",
  "tool_input": {}
}

このstdinを読み捨てないとスクリプトが正常終了しないので、cat > /dev/null で明示的に捨てています。


応用アイデア

同じStopフックで、こんなことも実現できます。

やりたいこと 方法
Mac通知を出す osascript -e 'display notification "作業終了"'
作業時間をCSVに記録 タイムスタンプをCSVファイルに追記
Slackに送る curl でIncoming Webhookに投げる
深夜作業を検知する 時刻判定して通知

まとめ

  • Claude CodeのStopフックで セッション終了時に自動でスクリプトを実行できる
  • シェルスクリプト1本 + settings.jsonの設定だけで動く
  • 作業ログの自動記録はシンプルで効果的なユースケース

スクリプトはGistにも置いています。
https://gist.github.com/mstng/cd7b0352efd37197374969f052a6d920

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?