CLAUDE CODE 視聴者プレゼント

作業が終わったら、勝手にHTMLで"見える化"する

Markdownの長文をやめて、進捗もレビューも「1枚のHTMLダッシュボード」に。
コピペで今日から使える2つのプロンプトと、それを自動化するCLAUDE.md/hookの型。

BEFORE — Markdown
TODOも進捗も長文に縦積み。読み返すほど「今どこ?」が消える。エージェントを増やすとタブ地獄。
AFTER — HTML
全体%・工程バー・残タスクがひと目。開きっぱなしにすれば作業のたび勝手に更新。第三者にそのまま渡せる。

🧩今日から真似できる最小の型

むずかしい仕組みは要りません。「TODOや進捗を、Markdownじゃなく1枚のHTMLで書いて」と頼むだけでも効きます。 そこに、毎回・自動でやらせる仕掛けを足していく3ステップです。
  • CLAUDE.md に「HTMLで書き出す」ルールを数行足す
    作業が終わるたびに、結果や進捗を1枚のHTMLに書き出す約束をプロジェクトに埋め込む。→ タブ「⚙️ 自動化」にそのまま貼れる文面があります。
  • その場で使うなら「プロンプト①/②」をコピペ
    単発で欲しいときは、チャットに貼るだけ。は「今の作業の結果をHTMLに」、は「プロジェクト全体を調べてHTMLに」。
  • 生成されたHTMLをブラウザで開きっぱなしにする
    open overview.html で開いて放置。Stop hook を足せば、Claude Code が作業を進めるたびに勝手に作り直されて更新されます(タブ「⚙️ 自動化」)。
作業する HTMLに書き出す ブラウザで見る 勝手に更新(hook)

※ 生成するHTMLは「1ファイル自己完結・外部CDN不使用」にしておくと、オフラインでも開けて、そのまま人に渡せます。

📋プロンプト① — タスクが終わったらHTMLで書き出す

1つの作業(実装・調査・整理)が終わった直後に、その結果を1枚のHTMLダッシュボードにまとめさせるプロンプト。チャットにそのまま貼って使えます。
▎チャットに貼る(単発)
いまの作業の結果を、Markdownの長文ではなく「1枚のHTMLダッシュボード」に
まとめて progress/最新.html に書き出してください。

含める内容:
- この作業のゴール(1〜2行)
- 全体の進捗%(ドーナツ or バーで)
- やったこと / 変更したファイル(チェックリスト)
- 残っているTODO・次の一手
- いま詰まっている点があれば1行

制約:
- 1ファイル自己完結(外部CDN・外部フォント・画像URLを使わない)
- 落ち着いたライトテーマ1色で、毎回同じ見た目に
- ひと目で「今どこ・次どこ」が分かるレイアウト最優先

最後に、開くコマンド(open progress/最新.html)を教えてください。

※ 出力先やテーマは好みで変えてOK。「同じファイルを上書き」にしておくと、開いたタブがそのまま最新版になります(履歴は git が持つので消えません)。

🗺️プロンプト② — プロジェクト全体をHTMLで見える化

「このプロジェクト、今どうなってるんだっけ?」を一撃で。実ファイルとgitログから全体像を調べて、1枚のHTMLダッシュボードにさせるプロンプトです。
▎チャットに貼る(プロジェクト直下で)
このプロジェクト全体を調べて、現状を「1枚のHTMLダッシュボード」に
まとめて overview.html に書き出してください。

調べて反映してほしいこと:
- リポジトリ構成と、主要ディレクトリ/ファイルの役割
- 実装済み / 進行中 / 未着手 の機能(実ファイルから判定。
  推測が混じる場合は「推測」と明記する)
- TODO・FIXME・未解決の課題(コード内コメントも拾う)
- 直近の git ログから読み取れる「今の作業」

見せ方:
- 上部に「全体の進捗%(ドーナツ)」と「工程バー / チェックリスト」
- 各機能はカードで状態バッジ(済 / 進行中 / 未)を付ける
- 1ファイル自己完結(外部CDN・外部フォントなし)、落ち着いたライトテーマ

事実に基づいて書き、分からない所は「未確認」と正直に書いてください。
最後に、開くコマンド(open overview.html)を教えてください。

※ 大きめのリポジトリでは、先に「主要ディレクトリだけ」と範囲を絞ると速く・正確になります。定例で見たいなら、これをタブ「⚙️ 自動化」の hook に載せて自動再生成に。

⚙️CLAUDE.md + hook で「毎回・自動」にする

ここが本題。上のプロンプトを毎回手で打たなくても、プロジェクトに仕込めば勝手に走ります。 レベル1(CLAUDE.mdだけ)→ レベル2(hookで自動再生成)の順にどうぞ。

レベル1 — CLAUDE.md に貼るだけ(hook不要)

プロジェクト直下の CLAUDE.md(無ければ新規作成)に、この節を足すだけ。以降、作業のたびに Claude Code が自分でHTMLを書き出します。

▎<プロジェクト>/CLAUDE.md に追記
## 成果物の見える化ルール(HTMLプレビュー)

作業(1タスク・1機能・1調査)が一区切りしたら、その進捗を
**Markdownの長文ではなく、1枚のHTMLダッシュボード**として書き出す。

- 出力先: `progress/status.html`(毎回このファイルを上書き。履歴は git に任せる)
- 内容: 全体の進捗% / やったこと(チェックリスト)/ 残タスク / 次の一手 / 詰まり
- 1ファイル自己完結(外部CDN・外部フォント・外部画像を使わない)
- 配色は落ち着いたライトテーマ1つに固定し、毎回同じ見た目にする
- 事実に基づく。分からない所は「未確認」と書く(それらしく埋めない)

レベル2 — Stop hook で「作業のたび自動再生成」

HTMLをスクリプトで組み立てている場合(実ファイルを読んでダッシュボード化する等)、そのビルドを Stop hook に載せると、Claude Code が応答を返すたびに再生成されます。開きっぱなしのタブが自動更新に。まず .claude/settings.json にこう書きます。

▎<プロジェクト>/.claude/settings.json
{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/regen-preview.sh\"",
            "async": true,
            "timeout": 60,
            "statusMessage": "HTMLプレビューを再生成中…"
          }
        ]
      }
    ]
  }
}

そして再生成スクリプト .claude/hooks/regen-preview.sh120秒ガード(毎ターン走っても軽い)と常に exit 0(失敗してもセッションを止めない)がコツです。build-preview.py の中身は「実ファイルを読んで status.html を吐く」自作ビルダーに差し替えてください。

▎.claude/hooks/regen-preview.sh(chmod +x を忘れずに)
#!/bin/bash
# HTMLプレビューの自動再生成(Stop / SessionStart hook から async 呼び出し)
# - 120秒以内に再生成済みならスキップ(毎ターン走っても軽い)
# - 失敗してもセッションを止めない(常に exit 0)
set -u
ROOT="${CLAUDE_PROJECT_DIR:-$(pwd)}"
OUT="$ROOT/progress/status.html"
LOG="$ROOT/.claude/hooks/regen-preview.log"

[ -f "$ROOT/build-preview.py" ] || exit 0   # ← 自作ビルダーが無ければ何もしない

if [ -f "$OUT" ]; then
  now=$(date +%s)
  mt=$(stat -f %m "$OUT" 2>/dev/null || stat -c %Y "$OUT" 2>/dev/null || echo 0)
  [ $((now - mt)) -lt 120 ] && exit 0
fi

{
  echo "--- $(date '+%Y-%m-%d %H:%M:%S') regen-preview"
  /usr/bin/python3 "$ROOT/build-preview.py"
} >> "$LOG" 2>&1 || true

exit 0

※ レベル2は「HTMLをスクリプトで作る」派向け。まずはレベル1(CLAUDE.mdだけ)で十分効果があります。
※ 同じ regen-preview.shSessionStart hook にも足すと、セッション開始時にも最新化されます。