Claude Code をブラウザから操作できるクライアントを作りました。
過去の Claude Code セッションのログを確認したり、Resume するのに便利でかなり捗るようになったので紹介します!
作ったもの
Claude Code の会話ログファイルは ~/.claude/projects/
に JSONL 形式でリアルタイムに書き出されています。
作ったのはこのログファイルをリアルタイムにパースし、ヒトに読みやすい形で表示するビュワーです。実際にチャットを送ってタスクを進めることもできます。
見てもらうのがわかりやすいと思うのでデモを見せます:
見て分かる通り
- プロジェクトごとのセッション一覧の確認
- ログファイルとリアルタイムに同期する、読みやすいセッションのビュワー
- ツールの in/out や thinking が展開表示
- サブセッションの会話をモーダル化させ、全体の流れを追いやすいように
- 新規のチャットを開始したり、過去のチャットをセッション画面から再開可能。チャットのレスポンスもリアルタイムに描画される
等ができます。
モチベーション
もともとはブラウザで操作できるクライアントを作ろうと思って始めたわけではなく、特にサブセッションを利用している際のログファイルが読みづらすぎることがペインでビュワーが欲しくて作り始めました。
で、作って使ったらそのままここから Resume したいなー、リアルタイムに同期してほしいなーとなって、育てているうちに今の形になりました。
技術的な仕組み
前提として、Claude Code のログは以下のような構造で保存されています
~/.claude/projects/
├── project-a/
│ ├── session-id-1.jsonl
│ ├── session-id-2.jsonl
│ └── ...
├── project-b/
│ ├── session-id-3.jsonl
│ └── ...
1度 Claude Code を起動してやりとりした内容が1つの session-id に紐付き、resume した場合は新しい session-id が発行され、元のセッションの内容 + 新しいセッションの内容が追記されたログファイルが作成される仕組みになっています。
アーキテクチャ
claude-code-viewer 自身でデータベースは持たず、このログファイルを直接データソースとして Next.js をベースに UI を実装しています。
~/.claude/projects
以下のファイルを watch し、変更を検知するたびに Server-Sent Events でブラウザに変更を通知し、React Query の invalidation でリアルタイム同期を実現しています。
新規チャットや既存のチャットの Resume は Claude Code の TypeScript SDK で実装。
メッセージを送信してセッションのプロセスを維持することで、あとはリアルタイム同期が常に動いているため勝手に描画される仕組みです。
使い方
PORT=3400 npx @kimuson/claude-code-viewer@latest
すればサーバーが起動します。
ポート番号は都合が良いものに読み替えてOKです。
使い道
Claude Code CLI と併用して普段遣いしているので、良い感じに使えている使い道も紹介します。
結果だけではなくエージェントがどういう動きをしたか知るのに便利
Claude Code の CLI だと最終結果はわかりやすいですが、途中どういう経過を経て最終的なアウトプットを出したのかはたどりづらさがあります。サブセッション等を使っている Claude Code 自身が Claude Code を呼び出している場合は特に複雑です。
期待するアウトプットが出なかった際の確認や、カスタムコマンドを作っている際に意図通り動いているかチェック等の目的で、Claude Code のタスクの全体の流れを追いたい時に重宝してます。
リモート開発環境に Viewer 経由でアクセス
Claude Code が普及して Vibe でのコーディングが実用的になってきたことで、リモートマシンを用意してスマホの SSH Client で外出先から実装や修正をする、等の運用をしている人もいるかと思います。
参考:
私は自宅サーバー兼リモートの開発マシンを用意して tailscale を用いて接続できるようにしているのですが、claude-code-viewer をリモートマシンに建てておくことでスマホのブラウザから Claude Code を操作できます。
もろもろ設定して実際に使っているんですが、特にスマホでの操作だと SSH Client アプリを使うよりだいぶ使い勝手が良いなと感じています。
その他
作って日が浅いのでデバッグも兼ねて通常の用途でも割と使っているんですが、感触は結構良いです。
- 1つ前のセッションでやったやつ再開したいなーというときにちまちま resume する必要がなく、タブで遷移してメッセージを送るだけで良い
- 日本語で誤送信しがちな Enter ではなく Shift + Enter 送信を採用しているので誤送信が少ない
あとは、現状は画像のようにプロジェクト以下のセッションをさっと切り替えられる組み方をしています
これはこれで便利なんですが、少し構造を変えて複数プロジェクト跨げるようにするとワークツリーを跨いで並列で Claude Code を動かす等の用途にも使いやすそうなので今後やっていきたいなと思ってます。
まとめ
Claude Code をブラウザから操作できるツールを作ったので紹介しました。
同じような困りごとがある方はぜひ試してみてください!
個人的に Claude Code は自走力が高いので非エンジニアにこそオススメできるなと思っているんですが、TUI であることがネックで、非エンジニアに使ってもらうのにも良いじゃないかなと思ったりしています。
それでは良い、Claude Code ライフを〜👋
Views: 0