ClaudeCodeの会話ログを確認する方法（Windows WSL）


## きっかけ
ClaudeCode（略：CC）が最近流行っていますね。
ClaudeCodeに限らずですがAIと会話しながら作業を進めていると、最初のころに話してた内容（特にプロンプト）を人間側が忘れてしまうことよくあります。
そこで、AIとの会話ログから最初のころのAIとの対話内容を思い出そうと思ったのがきっかけ。
それ以外にも、CCを使って行った結果を見た他の人間から「これどうやったの？」という問いかけに対して、ログを見せて説明出来たらラクチンだな～と思ったのもきっかけ。

# 利用環境
- **Windows**11
- WSL AlmaLinux-9
- Cursor 1.1.3
- ClaudeCode 1.0.31

## ClaudeCode（略：CC）のログのありか

**以下にあるファイルを開けば会話ログを見ることができます。**

- WSLで見る場合のCCの会話ログありか
    - `/home/{User Name}/.claude/projects/{CodeBasePath(kebab-case)}` の中
- Windowsで見る場合のCCの会話ログありか
    - `\\wsl$\{DistributionName}\home\{UserName}\.claude\projects\{CodeBasePath(kebab-case)}` の中

    - 例：
        - Windowsのユーザ名（正確にはWSL内のユーザ名）：Shohei_Otani
        - コードベースパス：C:\Users\Shohei_Otani\Documents\dekopin\
        - WSLで見る場合のCCの会話ログありか
            - `/home/Shohei_Otani/.claude/projects/-mnt-c-Users-Shohei-Otani-Documents-dekopin`
        - Windowsで見る場合のCCの会話ログありか
            - `\\wsl$\AlmaLinuxOS-9\home\Shohei_Otani\.claude\projects\-mnt-c-Users-Shohei-Otani-Documents-dekopin`

## ログファイルの中身
(ClaudeCode本人に直接答えてもらいました)

### ログファイルの構造
  - 最初の行にセッション情報（JSON形式）
  - 各行が1つのJSONログエントリ
  - ファイル名はconversations_{timestamp}.jsonl形式

### ClaudeCodeログの主要キー

  - 基本情報
      - uuid: 各メッセージの一意識別子
      - parentUuid: 親メッセージのUUID（返信の場合）
      - timestamp: ISO 8601形式のタイムスタンプ
      - sessionId: セッション識別子
      - version: ClaudeCodeのバージョン

  - メッセージ構造
      - type: メッセージタイプ（user/assistant/system）
      - message.role: メッセージの役割
      - message.content: メッセージ内容（文字列または配列）

  - コンテンツブロック（配列の場合）
      - type: text/tool_use/tool_result
      - text: テキスト内容
      - name: ツール名
      - input: ツール入力パラメータ

  - メタデータ
      - cwd: 実行時の作業ディレクトリ
      - userType: ユーザータイプ（external/internal等）
      - isSidechain: サイドチェーンメッセージかどうか
      - isMeta: メタメッセージかどうか

  - ツール関連の詳細（content配列内）
      - tool_useブロック: name（ツール名）とinput（パラメータ）
      - tool_resultブロック: ツールの実行結果


### ClaudeCodeメッセージタイプ別サンプルログ

ClaudeCodeの主要なメッセージタイプのサンプルです。実際のログは1行1JSONのJSONL形式で保存されます。

<details><summary>ユーザーメッセージ（テキスト）</summary>

```json
  {
    "parentUuid": null,
    "isSidechain": false,
    "userType": "external",
    "cwd": "/home/user/project",
    "sessionId": "01234567-89ab-cdef-0123-456789abcdef",
    "version": "0.9.0",
    "type": "user",
    "message": {
      "role": "user",
      "content": "ファイルの内容を読んでください"
    },
    "isMeta": false,
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "timestamp": "2024-01-15T10:30:00.123Z"
  }
```
</details>

<details><summary>ユーザーメッセージ（コマンド実行）</summary>

```json
  {
    "parentUuid": null,
    "isSidechain": false,
    "userType": "external",
    "cwd": "/mnt/c/Users/user/Documents/project",
    "sessionId": "01234567-89ab-cdef-0123-456789abcdef",
    "version": "0.9.0",
    "type": "user",
    "message": {
      "role": "user",
      "content": "<command-name>npm test</command-name>\n<command-message>run
  tests</command-message>\n<command-args></command-args><local-command-stdout>Test
  results: 10 passed, 0
  failed</local-command-stdout>このテストエラーを修正してください"
    },
    "isMeta": false,
    "uuid": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
    "timestamp": "2024-01-15T10:31:00.456Z"
  }
```
</details>

<details><summary>アシスタントメッセージ（ツール使用）</summary>

```json
  {
    "parentUuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "isSidechain": false,
    "userType": "external",
    "cwd": "/home/user/project",
    "sessionId": "01234567-89ab-cdef-0123-456789abcdef",
    "version": "0.9.0",
    "type": "assistant",
    "message": {
      "role": "assistant",
      "content": [
        {
          "type": "text",
          "text": "ファイルの内容を確認します。"
        },
        {
          "type": "tool_use",
          "name": "Read",
          "input": {
            "file_path": "/home/user/project/src/index.ts"
          }
        },
        {
          "type": "text",
          "text": "ファイルには以下の内容が含まれています：\n-
  Expressサーバーの初期化\n- ルーティング設定\n- ミドルウェアの設定"
        }
      ]
    },
    "isMeta": false,
    "uuid": "c3d4e5f6-a7b8-9012-cdef-123456789012",
    "timestamp": "2024-01-15T10:30:15.789Z"
  }
```
</details>

<details><summary>アシスタントメッセージ（複数ツール使用）</summary>

```json
  {
    "parentUuid": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
    "isSidechain": false,
    "userType": "external",
    "cwd": "/mnt/c/Users/user/Documents/project",
    "sessionId": "01234567-89ab-cdef-0123-456789abcdef",
    "version": "0.9.0",
    "type": "assistant",
    "message": {
      "role": "assistant",
      "content": [
        {
          "type": "text",
          "text": "プロジェクトの構造を確認してから、必要なファイルを修正します。"
        },
        {
          "type": "tool_use",
          "name": "LS",
          "input": {
            "path": "/mnt/c/Users/user/Documents/project/src"
          }
        },
        {
          "type": "tool_use",
          "name": "Read",
          "input": {
            "file_path": "/mnt/c/Users/user/Documents/project/package.json"
          }
        },
        {
          "type": "tool_use",
          "name": "Edit",
          "input": {
            "file_path": "/mnt/c/Users/user/Documents/project/src/test.js",
            "old_string": "expect(result).toBe(5)",
            "new_string": "expect(result).toBe(10)"
          }
        }
      ]
    },
    "isMeta": false,
    "uuid": "d4e5f6a7-b8c9-0123-defa-234567890123",
    "timestamp": "2024-01-15T10:32:00.012Z"
  }
```
</details>

<details><summary>システムメッセージ（メタ情報）</summary>

```json
  {
    "parentUuid": null,
    "isSidechain": false,
    "userType": "internal",
    "cwd": "/home/user/project",
    "sessionId": "01234567-89ab-cdef-0123-456789abcdef",
    "version": "0.9.0",
    "type": "system",
    "message": {
      "role": "system",
      "content": "Session initialized with working directory: /home/user/project"
    },
    "isMeta": true,
    "uuid": "e5f6a7b8-c9d0-1234-efab-345678901234",
    "timestamp": "2024-01-15T10:29:00.000Z"
  }
```
</details>

<details><summary>サイドチェーンメッセージ</summary>

```json
  {
    "parentUuid": "c3d4e5f6-a7b8-9012-cdef-123456789012",
    "isSidechain": true,
    "userType": "internal",
    "cwd": "/home/user/project",
    "sessionId": "01234567-89ab-cdef-0123-456789abcdef",
    "version": "0.9.0",
    "type": "assistant",
    "message": {
      "role": "assistant",
      "content": "Analyzing code structure for optimization opportunities..."
    },
    "isMeta": false,
    "uuid": "f6a7b8c9-d0e1-2345-fabc-456789012345",
    "timestamp": "2024-01-15T10:30:20.123Z"
  }
```
</details>

#### サイドチェーンメッセージとは…

サイドチェーンメッセージは、メインの会話フローとは別に、バックグラウンドで実行される補助的な処理や分析のメッセージです。
サイドチェーンメッセージは、Claudeが内部的に考えたり分析したりする過程を記録したもので、ユーザーには通常表示されませんが、ログには記録されます。これにより、Claudeの思考プロセスや分析過程を後から確認できます。

##### サイドチェーンメッセージの特徴

  - 主な用途:
      - コードの構造分析
      - 最適化の機会の検討
      - バックグラウンドでの情報収集
      - 内部的な推論プロセス

  - 特徴:
      - isSidechain: true が設定される
      - userType: "internal" であることが多い
      - メインの会話には直接表示されない
      - 親メッセージ（parentUuid）を持つことが多い

## ログファイルを見やすくする

以下のリポジトリで公開されている、CCの会話ログを読みやすいHTML形式に変換するPython CLIツールを使うと便利。（Daniel Demmelさんありがとうございます！！）

https://github.com/daaain/claude-code-log

### 導入

```shell
# Python 3.12の要件に対応するためにPythonバージョンアップ
pyenv install 3.12.10

# Python 3.12.10をグローバルに設定
pyenv global 3.12.10

# 新しいPythonバージョンを確認
python3 --version

# パスを更新して永続化
echo 'export PATH="$HOME/.pyenv/versions/3.12.10/bin:$PATH"' >> ~/.bashrc

# claude-code-logをシステムにインストール
uv pip install --system claude-code-log

# インストール確認
claude-code-log --help
```

### 使い方（すべてのプロジェクトを処理してブラウザで開く）

1. `claude-code-log --open-browser` を実行する
1. [CC会話ログのありか](#ClaudeCode（略：CC）のログのありか) に、htmlができあがる
1. ブラウザで該当htmlを開いてログを見る
    - `\\wsl$\{DistributionName}\home\{UserName}\.claude\projects\`にあるindex.htmlをブラウザで開く
# 

### その他の使い方

```shell
# ヘルプ表示
claude-code-log --help

# すべてのプロジェクトを処理してブラウザで開く
claude-code-log --open-browser

# 特定の日付範囲でフィルタ
claude-code-log --from-date "yesterday" --to-date "today" --open-browser

# 特定のプロジェクトのみ処理
claude-code-log /path/to/specific/project --open-browser
```

## ログの保存期間を長く設定する

- CCの設定ファイルで `cleanupPeriodDays` の値を設定することでログの保持期間（デフォルトは30日）を調整できます（[Anthropic公式](https://docs.anthropic.com/ja/docs/claude-code/settings#%E5%88%A9%E7%94%A8%E5%8F%AF%E8%83%BD%E3%81%AA%E8%A8%AD%E5%AE%9A) より）



### CCの設定ファイルのありか

- [こちら](https://docs.anthropic.com/ja/docs/claude-code/settings#%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB) のAnthropic公式案内に記載あり。以下は同じ内容の要約です

    - ユーザ設定
        - `~/.claude/settings.json` （WSLの場合も同じ）
    - プロジェクト設定
        - チームと共有される設定用(ソース管理にチェックインされる)
            - `{ProjectRoot}/.claude/settings.json`
        - チームと共有しない個人用（ソース管理にチェックインされない。CCが作成時に.gitignoreに設定するらしい）
            - `{ProjectRoot}/.claude/settings.local.json`

#### 設定ファイルの優先順位

- [こちら](https://docs.anthropic.com/ja/docs/claude-code/settings#%E8%A8%AD%E5%AE%9A%E3%81%AE%E5%84%AA%E5%85%88%E9%A0%86%E4%BD%8D) のAnthropic公式案内に記載あり
- 優先順位（高い方から低い方へ）
    1. エンタープライズポリシー
    1. コマンドライン引数
    1. ローカルプロジェクト設定
    1. 共有プロジェクト設定
    1. ユーザー設定