Communitygithub.com

プロジェクトフレーム生成

現在のプロジェクトの最良のページをスクリーンショットし、フレーム加工します。ユーザーが/generate-project-framesと入力した時、またはポートフォリオ/ショーケース画像が必要な時に使用します。

プロジェクトフレーム生成 とは?

このスキルは、現在のソフトウェアプロジェクトの最良のページを特定し、スクリーンショットを撮り、フレーム加工して美しいポートフォリオ画像を生成します。主にClaude CodeやCodexなどのAIエージェント上で動作し、開発者がプロジェクトのアピール画像を手軽に作成できるようにします。スキルは6つのステップで構成されています:アプリケーションのページスキャン、最大5ページの提案(ビジネスアプリ、ダッシュボード、コンテンツサイトなどプロダクトタイプに応じた優先順位付け)、ユーザーへの確認と権限設定、アプリケーションの起動と準備、スクリーンショットのキャプチャ(解像度1440×900 @2x、エラーチェック自動化)、そしてフレーム加工です。必須のサブスキルとして「generate-frame」が必要で、フレーム加工とカバー画像の生成を担当します。生のスクリーンショットは`~/Pictures/<project>-portfolio/raw/`に、フレーム加工済み画像は`~/Pictures/<project>-portfolio/framed/`に出力されます。このスキルは、ログインページやエラーページ、設定画面を自動的にスキップし、実際の機能を示すページに焦点を当てます。また、スクリーンショット内の個人データ(メールアドレス、トークン、実在の顧客名など)をチェックし、公開に適さない情報がないか確認します。パフォーマンスの問題や表示エラー(壊れた画像、スピナー、オーバーレイなど)も検出し、必要に応じて再キャプチャを行います。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/CrziDev/claude-skills/tree/HEAD/generate-project-frames

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

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

ドキュメント

プロジェクトフレーム生成 は何をしますか?

現在のプロジェクトの最良のページをスクリーンショットし、フレーム加工します。このスキルは、ページの発見、アプリケーションの準備、生のスクリーンショット品質を担当します。必須サブスキル: generate-frame がフレーム加工とカバー画像を担当します。そのステップ1を最初に実行し(frame-kitを見つけて確認)、失敗した場合は停止してください。<frame-kit> は解決されたパスです。

出力は混在しません:生画像 → ~/Pictures/<project>-portfolio/raw/、フレーム加工済み → ~/Pictures/<project>-portfolio/framed/。

1. スキャン

ユーザー向けページを見つけます:ルート、ページ/ビューコンポーネント、管理リソース(Filament、Nova…)、ナビゲーションメニュー。コードを読んでアプリの実行方法、存在するロール、および各ロールが見るページを確認します。ポート番号、URL、ログイン情報を推測せず、アプリを実行するかユーザーに確認して検証してください。

2. 最大5ページの提案

この製品がどのような種類のものかを判断し、ページを実際の機能を最もよく示す順にランク付けします。問いは次の通りです:この製品を一枚の画像で見知らぬ人に理解させるには?

製品最も強いページ
ビジネス/管理アプリ(POS、CRM、在庫管理)実際のデータがあるコアワークフロー、次にダッシュボード、データ豊富なリスト
ダッシュボード/分析メインダッシュボード、1つのドリルダウン、1つのレポート
コンテンツ/マーケティング/Eコマースサイトランディング/ヒーロー、リストページ、詳細ページ、カートまたはチェックアウト
エディター/ビルダー/クリエイティブツールコンテンツを表示しているキャンバス、次にギャラリーまたはプロジェクトリスト
開発者ツール/ドキュメント使用中のメインUI、結果/出力ビュー

ログインページ、単なるフォーム、設定ページ、エラーページ、およびほぼ重複するページはスキップします。5ページ未満でも構いません。各ページを名前、パス、ロール、1行の理由とともにリストしてください。

3. 質問

AskUserQuestionを使用し、マルチセレクト(質問ごとに最大4オプション、必要なら2つに分割)でユーザーに確認します。ユーザーが選択するまでキャプチャを開始してはいけません。また、ライト/ダーク(アプリに両方がある場合のみ)、使用するロール/アカウントも尋ねてください。認証情報はユーザーの環境または既存のセッションから取得し、スクリプト、ファイル、出力に書き込んだり、アクセス制御を回避したりしてはいけません(選択したロールが見られないページはスキップされ、強制されません)。

4. アプリケーションの準備

  • アプリが実行されていない場合は、空いているポートで起動し、起動したものは停止することを忘れないでください。
  • 選択したページを開きます。空またはプレースホルダーデータの場合は、その旨を伝え、現実的なデモデータを提供します。シーディングには明示的な同意が必要で、別のデータベースまたは使い捨てデータベースに保存し、開発データベースには同意なしに触れてはいけません。データベースへの書き込みよりも、UIが作成できる状態(カートにアイテムを追加するなど)を優先します。
  • ユーザーのプロジェクトに依存関係やファイルを追加しないでください。スクリプトはスクラッチパッドに置きます。

5. キャプチャ

<this skill>/scripts/capture.mjs から capturePages をインポートするスクラッチパッドスクリプトを作成します:

import { capturePages } from '<this skill>/scripts/capture.mjs';
const results = await capturePages({
  frameKit: '<frame-kit>', outDir: '<raw dir>', colorScheme: 'light',   // バッチ内で統一されたスキーム
  storageState: process.env.APP_STORAGE_STATE,        // 保存されたセッション; または login: async (page) => {...} process.env を読み取り
  setup: (ctx) => ctx.addInitScript(() => localStorage.setItem('theme', 'light')),  // アプリ独自のテーマ切り替えがあれば
  pages: [{ name: '01-dashboard', url: 'http://localhost:8000/admin', prepare: async (page) => { /* カートを開く、ツアーを閉じる… */ } }],
});
console.log(JSON.stringify(results, null, 2));

これはバッチ全体で1つの1440×900 @2xのコンテキストを使用し(PNGは2880×1800)、ネットワークアイドル、フォント、遅延コンテンツを待ち、ページごとに issues を報告します:コンソール/ページエラー、HTTP ≥ 400、リダイレクト(通常はログイン不足)、壊れた画像、表示中のスピナー/スケルトン、オーバーレイ/クッキーバナー、空のチャートコンテナ。ファイル名は提案順に NN-<slug>.png と名付けます。アプリ固有のセレクタは loadingSelectors/overlaySelectors/hideCss(トースト、デバッグバー)を介して渡します。

インタラクティブ画面(カート、エディター、ボード)は、最初に prepare でサンプルコンテンツを追加する必要があります。

問題があるページごとに:修正し(オーバーレイを閉じる、要素を待つ、ログインする)、そのページだけ再撮影します。または、ユーザーに修正不可能であることを伝えて削除します。害がないと判断した警告(例:ファビコン404)は問題ありませんが、その旨を伝えてください。次に、すべてのPNGを読み取り、実際のコンテンツが表示され、半分読み込みの状態でないこと、公開すべきでない個人データ(メールアドレス、トークン、実在の顧客名)が含まれていないことを確認します。不明な場合はユーザーに確認してください。

6. フレーム加工

generate-frameのステップ2〜4を実行し、生画像フォルダを入力として使用します:--out <framed dir>、--url "<app host>/{name}"、--resolution(デフォルトは最大)。部分的な失敗は報告し、隠さないでください:失敗したファイルのみを再撮影または再フレーム加工します。生画像フォルダ、フレーム加工済みフォルダ、カバーペア、削除したページとその理由、および制限事項(例:画像が検査されていないこと)を報告します。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

関連スキル