← 一覧に戻る

plan-viewer v2.0 再設計 — 15ファイル→9ファイルへ削ぎ落とす

2026年3月1日 14:45 更新

一言でいうと

プラグインの構造を整理して、15ファイルから9ファイルに減らす。機能はそのまま。

なぜこれが必要なのか

plan-viewer は段階的に機能を追加してきた結果、ファイルが分散しすぎた。色の定義だけで1ファイル、一覧ページのルールで1ファイル、用語集のテンプレートで1ファイル…。

「今必要なものだけを残す」YAGNI原則(You Aren't Gonna Need It = 今使わないものは作らない)と、「シンプルさを最優先する」KISS原則(Keep It Simple, Stupid)に沿って、不要なファイルを統合・削除する。

機能は一切減らさない。ファイルの整理だけ。引っ越しの断捨離みたいなものだと思ってほしい。

何をするのか

まず: プラグインが動いていない問題を直す

調査で発覚した重大な問題がある。plan-viewer のhook(特定の操作の前後に自動で処理を差し込む仕組み)が実は動いていなかった

原因は登録の不整合。「有効にしてある」という設定はあるのに、実際のプラグイン置き場に plan-viewer が見つからない状態だった。住所変更届を出したのに、実際には引っ越していなかったようなもの。

修正は1行。~/.claude/plugins/local-marketplace/(プラグインの置き場フォルダ)の中に、~/plan-viewer-plugin/ を指す「ショートカット」(シンボリックリンク)を作るだけで直る。

削除するもの(6ファイル + 2ディレクトリ)

削除

  • css-palette.md(色の定義)
  • index-rules.md(一覧ルール)
  • glossary-template.md(用語集雛形)
  • setup.md(初期設定コマンド)
  • setup.sh(初期設定スクリプト)
  • docs/(使い方ページ)
  • assets/(アイコン画像群)

吸収先

  • → テンプレートに統合
  • → SKILL.md に統合
  • → SKILL.md に統合
  • → サーバー起動時に自動化
  • → 同上
  • → 別の関心事として分離
  • → 不要(既にコピー済み)

統合するもの

SKILL.md(AIへの文章ルール指示書)に2つのファイルの内容を吸収する:

page-template.md(個別ページのHTMLテンプレート)に1つのファイルの内容を吸収する:

自動化するもの

今まで初回だけ手動で実行していた /plan-viewer:setup(フォルダ作成コマンド)を廃止。代わりに /plan-viewer:serve(サーバー起動コマンド)がフォルダを自動作成するようにする。1ステップ減る。

hook の整理

3つあったhookを2つに減らす:

hook 役割 判定
ExitPlanMode ゲート HTML未生成なら計画の確定をブロック 残す(核心)
Write ガード HTML書く前にルールを読んだか確認 残す(実績あり)
PostToolUse 自動促し 計画を書いたらHTML生成を催促 削除(過剰)

3つ目の「PostToolUse 自動促し」は、1つ目の「ExitPlanMode ゲート」が最終防衛線として機能しているため不要。計画を確定しようとした時点でHTMLが無ければブロックされるので、途中で催促する必要がない。

このゲートは毎回有効。計画Aを承認した後に計画Bを作る場合、計画Bの ExitPlanMode 時に再びチェックが走る。ゲートは「index.html(一覧ページ)が直近120秒以内に更新されたか」を見ているので、計画Bのために新しいHTMLを作らない限りブロックされる。

ただし、フィードバック中のHTML更新は自動では行われない。計画Aに対して承認せずに指摘を入れた場合、計画ファイルは修正されるが、plan-viewer のHTMLは古いまま。次に ExitPlanMode しようとすると120秒チェックに引っかかるので、結果的にHTMLの再生成が強制される。

運用で見つかった3つの改善 NEW

改善1: 一覧ページの自動ソート

問題: 一覧ページ(index.html)の記事が更新順に並んでいない。「先頭に追加する」というルールだが、既存の記事を更新したときに位置がずれてしまう。

対策: 一覧ページの JavaScript(相対時刻を表示するスクリプト)に「自動ソート」機能を追加する。ページを開いたとき、各記事の日時を読み取って新しい順に自動で並べ替える。手動で間違った位置に追加しても、表示は常に正しい順番になる。

改善2: FABボタンの省略防止

問題: 個別ページの右下に表示される操作ボタン(リロード・アノテーション)がたまに生成されないことがある。ルールには「省略禁止」と書いてあるのに。

対策: 3つの手を打つ:

改善3: 更新時刻の記載漏れ対策

問題: 記事の時刻が書かれていないことがある(日付だけで時刻が抜ける)。

対策: 改善1の自動ソートにより、時刻が無い記事は一覧の最下部に落ちる。これが「時刻を書き忘れてるよ」という視覚的な合図になる。ルール文書にも「時刻が無い場合、一覧で最下部に表示される」と明記する。

実行ステップ

0
プラグイン登録の修正
正しい場所にリンクを作り、hookが発火するようにする。セッション再起動で有効化。
1
統合(情報を移す)
3つの参照ファイルの内容を SKILL.md と page-template.md に統合する。内容が正しく移ったことを確認してから次へ。
2
削除
統合済みの3ファイル + setup関連 + assets + docs を削除。
3
修正
server.py に自動フォルダ作成を追加(2行だけ)、hooks.json から PostToolUse を削除、バージョンを 2.0.0 に。
4
検証
ファイル構造の確認、サーバーの自動フォルダ作成テスト、hookの動作確認、既存HTMLが壊れていないことの確認。

ポイント

機能は減らない。削除するファイルの内容はすべて別のファイルに吸収される。使い勝手は変わらず、ファイル数だけが減る。

既存のHTMLは一切触らない。~/plan-viewer/ にある28個のHTMLファイルはそのまま。アイコン画像もすでにそこにコピー済みなので、プラグイン側から消しても影響なし。なお ~/plan-viewer/ は git リポジトリではなく、ローカルにしか存在しない。プラグインのリポジトリ(~/plan-viewer-plugin/)とは完全に別のフォルダで、リモートにpushされることはない。

hookが動いていなかった問題も同時に修正する。これまでExitPlanModeのゲートが機能していなかったことが判明。登録場所の不整合が原因で、1行の修正で直る。

📝 質問モード — テキストを選択してね
✓ 質問を送信しました