Claude CodeのHooksでプランファイルをブラウザプレビューしてみた

Claude CodeのHooksでプランファイルをブラウザプレビューしてみた

2026.03.30

はじめに

Claude Codeのプランモードを日常的に使っているのですが、プランの中身をターミナル上で追い続けるのが結構しんどいです。
プランは長文になりがちでスクロールしないと全体像がつかめず、承認ダイアログが出ても「結局このプラン、何がどうなるんだっけ」と戸惑うことが増えていました。
今回はClaude CodeのHooksを活用して、プラン結果をMarkdownビューアーでブラウザプレビューする仕組みを作ってみました。

使用するツール

mo

Markdownファイルをブラウザでプレビュー表示するツールです。
ファイルの変更をリアルタイムに検知して表示を更新してくれるため、プランファイルへの追記にも追従します。
サーバーが既に起動していれば、新しいファイルを追加するだけでセッションに反映されます。

https://github.com/k1LoW/mo

cmux

Ghosttyベースのターミナルアプリケーションで、内蔵ブラウザ機能を持っています。
Cmd + Shift + Lでターミナルの横にブラウザをスプリット表示でき、moのサーバー(localhost:6275)を開いておけば、別ウィンドウに切り替えることなくプレビューを確認できます。

https://www.cmux.dev/

cmuxの詳細は以前の記事で紹介しています。

https://dev.classmethod.jp/articles/terminal-ghostty-to-cmux-migration/

Claude Code Hooks

特定のイベント発生時にシェルコマンドを自動実行する仕組みです。
今回はPostToolUseイベントを使い、WriteEditツールの実行後にスクリプトを走らせます。

https://code.claude.com/docs/en/hooks

やってみた

前提条件

以下の環境が整っていることを前提とします。

  • Claude Codeがインストール済み
  • moがインストール済み
  • jqがインストール済み(Hookスクリプト内でJSONパースに使用)
  • cmuxがインストール済み(内蔵ブラウザを使わない場合は不要)

Claude Codeの設定

Hooksと組み合わせる前に、プランモード関連の設定を入れておくとより効果的です。

~/.claude/settings.json
{
  "permissions": {
    "defaultMode": "plan"
  },
  "plansDirectory": ".claude/plans"
}

defaultModeplanにすると毎回プランモードで開始されるため、Hookが活きる場面が自然と増えます。
plansDirectory.claude/plansにするとプランファイルがプロジェクト配下に保存され、gitでの管理もしやすくなります。

https://code.claude.com/docs/en/settings#available-settings

Hookスクリプトの作成

プランファイルが書き込まれたタイミングでmoにプレビュー表示するスクリプトを作成します。

~/.claude/hooks/plan-preview.sh
#!/bin/bash
INPUT=$(cat)
FILE=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty' 2>/dev/null)
if [[ "$FILE" == */.claude/plans/*.md ]]; then
  mo --no-open "$FILE"
fi

PostToolUseイベントからstdinでJSON入力を受け取り、書き込まれたファイルのパスを取得します。
パスが.claude/plans/*.mdにマッチする場合のみmoにファイルを追加します。
--no-openフラグにより、moがブラウザを自動で開くのを抑制しています(cmuxの内蔵ブラウザで表示するため)。

実行権限を付与しておきます。

chmod +x ~/.claude/hooks/plan-preview.sh

Hooksの設定

ユーザー設定にHookを追加します。

~/.claude/settings.json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "\"$HOME/.claude/hooks/plan-preview.sh\"",
            "timeout": 10
          }
        ]
      }
    ]
  }
}

matcherをWrite|Editにすることで、Claude Codeがプランファイルを書き込んだ時点でHookが発火します。
プランの承認ダイアログよりも前のタイミングで表示されるため、承認判断時にはブラウザ側にレンダリング済みのプランが表示された状態になります。

動作確認

設定が完了したら、実際に動かしてみます。
cmuxの内蔵ブラウザをスプリット表示し、localhost:6275にアクセスしておきます。

CleanShot 2026-03-30 at 07.47.46.png

Claude Codeでプランモードを実行すると、プランファイルが書き込まれた時点でHookがトリガーされ、moにファイルが追加されます。

CleanShot 2026-03-30 at 07.49.09.gif

承認ダイアログが表示される頃には、cmuxの内蔵ブラウザにMarkdownとしてレンダリングされたプランが表示されています。
ファイルの変更もリアルタイムに反映されるため、プランが追記されるたびにブラウザ側の表示も更新されます。

まとめ

今回はClaude Codeのプランファイル作成時に、Hooksでmoを起動してブラウザでプレビュー表示する仕組みを作ってみました。
cmuxの内蔵ブラウザと組み合わせることで、ターミナルとプランのプレビューをサイドバイサイドで表示でき、ウィンドウの切り替えなしにプランの内容を確認できます。
どなたかの参考になれば幸いです。

この記事をシェアする

FacebookHatena blogX

関連記事