Communitygithub.com

mveplus/claude-skills

現在のプロジェクトの「仕組み」を紹介する、インタラクティブなマルチスライドWebサイトを構築し、GitHub PagesまたはGitLab Pagesで公開します。このスキルは、「how it works page/site」「explain this project as a slideshow」「interactive docs for this repo」「make a GitHub/GitLab Pages explainer」「/how-it-works-site」などのトリガーで起動します。

claude-skills とは?

このスキルは、コードベースの動作原理を視覚的かつインタラクティブに説明する、依存関係のないスライドショーWebサイトを自動生成します。プロジェクトの理由(why)からコードの詳細までをカバーし、実際のロジックをミラーリングしたインタラクティブデモを含めることで、単なるドキュメントを超えた理解を促進します。主にClaude Codeエージェント上で動作し、GitHub PagesまたはGitLab PagesへのCI/CDパブリッシュ機能を備えています。プロセスは7つのステップで構成され、構築前にユーザーに質問(ホスティング先、対象読者、デモ候補など)を行い、コードを徹底的に読み込み、実際の挙動に基づいたスライドを作成します。テンプレートはHTML、CSS、JS、CI設定ファイルとして提供され、デモコードはプロジェクト固有の関数をそのまま移植することで、正確なシミュレーションを実現します。完成後は、コードチェックとブラウザ検証を経て、ユーザーの承認後にコミット・プッシュします。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/mveplus/claude-skills/tree/HEAD/how-it-works-site/skills/how-it-works-site

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

How-it-works サイト

コードベースを「なぜ」からコードまで説明する、依存関係のないスライドショーを site/ ディレクトリに作成します。プロジェクトの実際のロジックを反映したインタラクティブデモと、公開用のCIジョブが含まれます。リファレンス実装: https://mveplus.github.io/onair-led-sign-firmware/ (19スライド、4つのシミュレーション;ソースは https://github.com/mveplus/onair-led-sign-firmware/tree/main/site)。

このスキルの templates/ ディレクトリにあるテンプレート:

ファイルコピー先目的
index.htmlsite/index.htmlページの枠組みと複製可能なスライドパターン
deck.csssite/deck.cssテーマトークン、レイアウト、コンポーネント
deck.jssite/deck.jsナビゲーション、概要、ハッシュルーティング、フレームループ、ステッパーヘルパー
app.jssite/app.jsプロジェクトのデモ用スターター(ステッパーの配線、フレームフック)
github-pages.yml.github/workflows/pages.ymlGitHub Pages デプロイ
gitlab-ci.yml.gitlab-ci.yml にマージGitLab Pages デプロイ

プロジェクト固有のデモコードは site/app.js に記述します(スタイルはオプションで site/app.css)。deck.js と deck.css は汎用的に保ちます。

プロセス

1. 構築前に質問する(AskUserQuestion を1回呼び出す)

まず git remote -v を確認し、ホスティングに関する質問が現実を反映するようにします。リモートがGitHubなのにユーザーがGitLabと言った場合(またはその逆)、その点について質問します。最大4つの質問をします:

  • ホスティング: GitHub Pages、GitLab Pages、または両方。
  • 対象/深さ: 混合(最初にアイデア、その後詳細な掘り下げ;デフォルト)、開発者向け、または非開発者向け。
  • インタラクティブデモ: このプロジェクトに固有の候補を3~4つ提案します(簡単にスキムして見つける。状態機械、タイミング/閾値ロジック、リクエストフロー、数学や数式、設定ビルダーなど)。multiSelect。
  • オプション: リポジトリが示唆する場合、言語またはブランディングの制約。

2. コードを適切に読む

エントリポイント、主要モジュール、README/ドキュメント、CIファイルを読みます。スライドで言及するすべての主張(タイムアウト、しきい値、デフォルト値、トピック、エンドポイント、リセットがクリアする内容など)は、READMEではなくコードから取得します。ドキュメントとコードの不一致や行き止まり(例: コンシューマが存在しないCIジョブ)のリストを保持します。コードの実際の動作をスライドに表示し、リストを最後にユーザーに報告します。ドキュメントに合わせてスライドを静かに「修正」しないでください。

3. アウトライン(約12~20スライド)、章ごとにグループ化

典型的な流れ: タイトル(遊び心のあるインタラクティブ要素付き)→ アイデア/問題 → 全体像(クリック可能なアーキテクチャ)→ リクエスト/データフロー(アニメーションステッパー)→ 主要コンポーネントごとに1スライド → 耐障害性/障害処理 → セキュリティ/シークレット → ビルド、CI、配信 → 設計原則のまとめとリンク。すべてのスライドには data-chapter と data-title が必要です。

4. 構築

  • テンプレートをコピーし、index.html 内のスライドパターン(ヒーロー、2カラム+カード、ステッパー、情報グリッド)を複製します。
  • シミュレーションはプロジェクトの実際のアルゴリズムを再利用します: 関数(整数演算、しきい値、順序付け)を移植し、スライド上でその関数名を引用します。見た目だけ正しいシミュレーションはバグです。
  • アニメーションには Deck.onFrame(slideId, fn) を使用し、表示中のスライドのみアニメーションさせます。クリックスルーシーケンスには Deck.stepper(...) を使用します。
  • 図: CSSトークンを使用したインラインSVG。外部リソースは使いません。CDNや取得するフォントは使用しないため、オフラインや制限付きPagesでも動作します。
  • 画像: メタデータを削除しリサイズした上で site/img/ にコピーします(ImageMagick: magick in -auto-orient -strip -resize 1200x -quality 80 out.jpg)。リポジトリの元画像にGPS EXIFが含まれていないか確認(例: identify -format '%[EXIF:GPSLatitude]' または exiftool -gps:all)し、見つかった場合はユーザーに警告します。スマートフォンの写真には通常、撮影場所が含まれています。一度プッシュするとgit履歴に残るため、削除するには履歴の書き換えが必要であり、それはユーザーが判断します。

5. 公開設定

  • GitHub: github-pages.yml をコピーします。Pages は、一度ソース=Actions に設定して有効にする必要があります(Settings → Pages)、または以下のコマンドを使用します。ユーザーがコピーするコマンドは、フェンスで囲まれたコードブロックに余計なものをつけずに表示します。文の終わりのピリオドが一緒にコピーされると引数に紛れ込み(build_type=workflow.)、APIが拒否します:
    gh api -X POST repos/OWNER/REPO/pages -f build_type=workflow
    
    デフォルトブランチからのみデプロイします。
  • GitLab: pages ジョブを既存の .gitlab-ci.yml にマージします。上書きしないでください。Pages は自動的に有効になります。URL は Deploy → Pages に表示されます。
  • READMEの概要/「How it works」セクションに、短いリンクの段落を追加します。

6. 報告前に検証

  • node --check site/*.js
  • python3 -m http.server 8765 --bind 127.0.0.1 --directory site でサーブします(バックグラウンドで)。ブラウザ自動化ツールが利用可能な場合(例: Claude in Chrome)、サイトを開き、各章をスクリーンショットし、各デモを座標クリックではなく、ページ内でJavaScriptを実行(.click()、ディスパッチされた PointerEvents)して操作します。スクリーンショットはCSSピクセルに対してスケーリングされることが多いため、座標クリックは位置を外します。ウィンドウサイズを変更できない場合、380pxのiframeでサイトを読み込み、getBoundingClientRect().right > 381 を持つ要素を探して電話幅での表示を確認します。
  • ブラウザツールがない場合、手動で確認すべきページとデモをユーザーに伝えます。サイトを「テスト済み」として報告しないでください。
  • 開いたタブを閉じ、その後サーバーを停止します。

7. 引き継ぎ

コミットまたはプッシュする前に質問します。その後、ブランチ上で: サイト用に1つのコミット、ユーザーが依頼したコード修正用に個別のコミット。報告内容: 構築したもの、Pagesの有効化方法、不一致リスト、およびテストされていないもの(例: ハードウェア)。

スタイルルール

  • デフォルトはダークテーマ(deck.css のトークン)。プロジェクトごとに --accent で色を変更可能な赤のアクセントカラーを使用。
  • 平易で具体的な文章。「何をするか」だけでなく、なぜその設計選択が存在するのかを説明します。
  • コード抜粋は短く、実際のもの(ソースからトリミングし、ファイル名を示すコメントを付ける)。
  • キーボード: ←/→/Space/PageUp/PageDown/Home/End、O で概要、Esc で閉じる。タッチでスワイプ。すべてのスライドは独自のURLを持つ(#/スライドID)。

関連スキル