epic-design について
epic-designは、レイヤー表現やスクロール効果、アニメーションを使った没入感のあるWebサイトを構築・拡張するスキルです。デザイナーや開発者向けに、素材確認から動きの選択、アクセシビリティ、性能対策まで案内します。
主な機能
- 01画像素材の確認と役割の割り当て
- 026段階の視覚的な奥行き設計
- 03スクロール・テキストアニメーションの選択
- 04動きを抑えるアクセシビリティ対応
- 05アニメーション性能の最適化
活用シーン
- 01要件からシネマティックなランディングページを構築
- 02既存サイトにレイヤー付きスクロール効果を追加
- 03素材を監査して配置を計画
- 04アニメーション性能の問題を調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alirezarezvani/ claude-skills --skill epic-designインストール後、Claude Code で/epic-designを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/accessibility.mdasset-pipeline.mddepth-system.mddirectional-reveals.mdexamples.mdinter-section-effects.mdmotion-system.mdperformance.mdtext-animations.mdscripts/inspect-assets.pyvalidate-layers.js詳細
エピックデザインスキル
あなたは今や、世界屈指のエピックデザインの専門家です。フラットな PNG/静的アセット、CSS、JavaScript だけを使い、プレミアムで生き生きとした、映画のように没入感のあるウェブサイトを構築します。WebGL も 3D モデリングソフトウェアも必要ありません。
開始する前に
まずコンテキストを確認してください:
project-context.md または product-context.md が存在する場合は、質問する前に内容を読んでください。そのコンテキストを利用し、すでに記載されていない情報や、このタスクに固有の情報だけを質問してください。
心構え
構築するウェブサイトはどれも、映画のような体験に感じられる必要があります。Apple の製品ページ、Awwwards の受賞サイト、高級ブランドのウェブサイトをイメージしてください。シンプルなランディングページでも、次の要素を備えている必要があります:
- スクロールに反応する奥行きとレイヤー
- 意図を持って現れ、消えるテキスト
- 映画のように切り替わるセクション
- 空間の中に存在するように感じられる要素
このスキルが有効なときは、平坦で静的なページを決して作らないでください。
このスキルの使い方
モード 1:ゼロから構築
アセットと概要が用意された状態で新しく始める場合に使用します。以下のワークフロー全体(ステップ 1~5)に従ってください。
モード 2:既存サイトを強化
既存のページに 2.5D 効果を追加する場合に使用します。ステップ 2 に進み、現在の構造を分析して、奥行きの割り当てとアニメーションの候補を提案してください。
モード 3:デバッグ/修正
パフォーマンスやアニメーションの問題をトラブルシューティングする場合に使用します。scripts/validate-layers.js を使い、GPU のルールを確認して、動きを抑える設定への対応を検証してください。
ステップ 1 — 概要を把握し、すべてのアセットを確認する
コードを一行でも書く前に、次のすべてを順番どおりに行ってください。
A. 概要を読み解く
- 製品/コンテンツは何ですか?(ブランドサイト、ポートフォリオ、SaaS、イベントなど)
- どのようなムード/印象ですか?(ダークで映画的、明るくエネルギッシュ、ミニマルで高級感がある、など)
- セクションはいくつですか?(ヒーローのみ、ページ全体、特定のセクションなど)
B. アップロードされたすべての画像アセットを確認する
ユーザーから提供された画像すべてに対して、scripts/inspect-assets.py を実行してください。
任意のランタイム依存関係:
pip install Pillow— 画像分析に必要です。--helpには必要ありません。 画像ごとに、次の項目を確認してください。
-
形式 — JPEG には本物のアルファチャンネルがありません。PNG には見せかけのアルファチャンネルが含まれる場合があります。
-
背景の状態 — スクリプトの出力を使用してください。次のいずれかが示されます:
- ✅ きれいに切り抜かれている — 本物の透明部分があり、そのまま使用できます
- ⚠️ 単色の暗い背景
- ⚠️ 単色の明るい背景/白背景
- ⚠️ 複雑な背景/シーン背景
-
背景を実際に削除する必要があるか判断してください — これは非常に重要です。 背景があるすべての画像で、背景を削除する必要があるわけではありません。次の点を考慮してください。
背景を削除するべき画像:
- 独立した製品(ボトル、靴、ガジェット、果物、スタジオ背景に置かれたオブジェクト)
- シーンの中に浮かべて表示するキャラクターや人物
- どんな背景にも透明な状態で配置できるべきロゴやアイコン
- depth-2 または depth-3 にフローティングアセットとして配置する要素
背景を残すべき画像:
- ウェブサイト、アプリ、UI のスクリーンショット
- セクションの背景やフルブリード画像として使う写真
- 作品全体を見せることを意図したアート、イラスト、ポスター
- モックアップ、デバイスのフレーム、または「カード内の画像」
- 背景がコンテンツの一部である画像
- depth-0(背景レイヤー)に配置する写真 — 背景はそのまま残してください。それが本来の用途です
判断に迷う場合は、デザインにおける画像の用途を考えてください。ほかのコンテンツの上に自由に「浮かべる」必要がある場合は、背景を削除します。空間を埋める画像、または画像自体がコンテンツである場合は、背景を残します。
-
画像ごとにユーザーへ説明してください — 背景が問題ないかどうかも伝えてください。
references/asset-pipeline.mdのステップ 4 にある形式をそのまま使用してください。 -
サイズと奥行きの割り当て — 各アセットをどの奥行きレベルにするか決め、それに応じてサイズを変更してください。構築を始める前に、判断内容をユーザーへ伝えてください。
C. コンポジションの計画 — コードを1行も書く前に視覚的な階層を決める
すべてのアセットを同じサイズとして扱わないでください。階層を設定します。
- 1つのアセットをヒーローにする — 画面の大部分を占める(50~80vw)、深度3
- サブ要素はヒーローの表示サイズの15~25% — 深度2、ヒーローの縁に沿わせる
- アクセント/パーティクルは小さくする(1~5vw) — 深度5
- 背景はセクション全体を覆う — 深度0
calc() を使って、ヒーローを基準にサブ要素を配置します。
right: calc(50% - [hero-half-width] - [gap]) を指定すると、ヒーローの縁に近づけて配置できます。
スクロールに合わせてヒーローが大きくなる、または退出するとき、サブ要素は単にフェードするのではなく、外側に散らばるようにします。これにより、サブ要素がヒーローの周囲を周回していたことを表現できます。
D. 各アセットのシネマティックな役割を決める
各画像について、「スクロールのストーリーの中でどんな役割を果たすか?」と考えます。
- ヒーローの横に浮かぶ → 深度2、フロートループ、スクロールで退出するときに散らばる
- ヒーローそのもの → 深度3、弾むように落下して登場、スクラブに合わせて拡大
- DJI スケールイン中にセクションを埋める → 深度0、またはセクション全体の背景
- コンテンツがスクロールしていく間、サイドバーに留まる → スティッキーなカラムの動き
- セクションの縁を飾る → 深度2、clip-path による出現リビール
Step 2 — テクニックを選ぶ(判断エンジン)
ユーザーの意図に合うテクニックの組み合わせを選びます。詳しいテクニックの説明は references/ ファイルを参照してください。
プロジェクトの種類別
| ユーザーの要望 | 主なパターン | テキストのテクニック | 特殊効果 |
|---|---|---|---|
| 製品発表/ブランドサイト | セクション間を浮遊する製品 + パースペクティブズーム | 分割して収束 + 単語のライティング | DJI スケールインピン |
| 大きなタイトルのあるヒーロー | 6層パララックス + ピン留めスティッキー | オフセット斜め配置 + マスクされたラインリビール | はみ出しタイポグラフィ |
| シネマティックなセクション | カーテンパネルの巻き上げ + スクラブタイムライン | 演劇的な登場+退出 | 上から下へのクリップ出現 |
| Apple 風アニメーション | スクラブタイムライン + clip-path ワイプ | スクロールに合わせて単語ごとにライティング | 文字シリンダー |
| セクション間の要素 | 浮遊する製品 + clip-path による出現 | スクランブルテキスト | ウィンドウペインアイリス |
| カード/機能セクション | カードが連なるスタック | スキュー + 弾むようなバウンス | セクションピール |
| ポートフォリオ/ショーケース | 横スクロール + フリップモーフィング | ラインクリップワイプ | 斜めワイプ |
| SaaS/スタートアップ | ウィンドウペインアイリス + グリッドのスタガー | 可変フォントウェーブ | 曲線パストラベル |
求められるスクロール動作別
- 「変化する間もその場に留まる」 →
pin: true+ スクラブタイムライン - 「セクションからせり上がる」 → セクション間を浮遊する製品 + clip-path による出現
- 「上から出現する」 → 上から下へのクリップ出現、またはカーテンパネルの巻き上げ
- 「重なり合う/積み重なる」 → カードが連なるスタック、またはセクションピール
- 「テキストが両側から飛び込んでくる」 → 分割して収束、またはオフセット斜め配置
- 「テキストが単語ごとに光る」 → スクロールに合わせて単語ごとにライティング
- 「セクション全体が変化する」 → ウィンドウペインアイリス + スクラブタイムライン
- 「セクションが下に降りる」 → clip-path
inset(0 0 100% 0)→inset(0) - 「カーテンのように」 → カーテンパネルの巻き上げ
- 「円が開く」 → 円形アイリスの拡大
- 「セクション間を移動する」 → GSAP Flip によるセクション横断、または曲線パストラベル
Step 3 — すべての要素にレイヤーを割り当てる
作成するすべての要素に、必ず深度レベルを割り当ててください。これは必須です。
DEPTH 0 → Far background | parallax: 0.10x | blur: 8px | scale: 0.70
DEPTH 1 → Glow/atmosphere | parallax: 0.25x | blur: 4px | scale: 0.85
DEPTH 2 → Mid decorations | parallax: 0.50x | blur: 0px | scale: 1.00
DEPTH 3 → Main objects | parallax: 0.80x | blur: 0px | scale: 1.05
DEPTH 4 → UI / text | parallax: 1.00x | blur: 0px | scale: 1.00
DEPTH 5 → Foreground FX | parallax: 1.20x | blur: 0px | scale: 1.10
次のように適用します。HTML 要素に data-depth="3" を指定し、CSS クラス .depth-3 と対応させます。
→ 深度システムの詳細:references/depth-system.md
Step 4 — アクセシビリティとパフォーマンスを適用する(常に)
以下はすべての出力で必須です。
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}
- アニメーションには
transform、opacity、filter、clip-pathのみを使用し、width/height/top/leftは使用しないでください will-change: transformは、現在アニメーションしている要素のみに使用し、アニメーション後に削除してください- 画面外のセクションには
content-visibility: autoを使用してください IntersectionObserverを使用して、ビューポート内の要素のみをアニメーションさせてください- モバイルを検出します。
window.matchMedia('(pointer: coarse)')を使用し、タッチ操作では効果を抑えてください
→ 詳細は references/performance.md と references/accessibility.md を参照してください
ステップ 5 — コード構造(常にこの HTML アーキテクチャを使用)
<section class="scene" data-scene="hero" style="--scene-height: 200vh">
<div class="layer depth-0" data-depth="0" aria-hidden="true">
</div>
<div class="layer depth-1" data-depth="1" aria-hidden="true">
</div>
<div class="layer depth-2" data-depth="2" aria-hidden="true">
</div>
<div class="layer depth-3" data-depth="3">
<img class="product-hero float-loop" src="product.png" alt="[description]" />
</div>
<div class="layer depth-4" data-depth="4">
<h1 class="split-text" data-animate="converge">Your Headline</h1>
</div>
<div class="layer depth-5" data-depth="5" aria-hidden="true">
</div>
</section>
→ 完全なボイラープレート:assets/hero-section.html
→ CSS システム全体:assets/hero-section.css
→ JS エンジン全体:assets/hero-section.js
参考ファイル — 技法の詳細を確認するには、こちらをお読みください
| ファイル | 内容 | 読むタイミング |
|---|---|---|
references/asset-pipeline.md | アセットの検査、背景の判定ルール、ユーザーへの通知形式、CSS ノックアウト、リサイズの目標値 | 必ず — コーディングを始める前に実行します |
references/depth-system.md | 6 層の奥行きモデル、CSS/JS の実装、ぼかし/スケールの計算式 | すべてのプロジェクトで — 必ず読みます |
references/motion-system.md | GSAP コードをすべて含む、スクロールアーキテクチャの 9 パターン | スクロールインタラクションを構築するとき |
references/text-animations.md | 実装コードをすべて含む、13 種類のテキスト技法 | テキストをアニメーションさせるとき |
references/directional-reveals.md | 上や側面から「現れる」8 種類の clip-path 技法 | セクションに方向性のある出現効果が必要なとき |
references/inter-section-effects.md | フローティングプロダクト、GSAP Flip、セクション間の移動 | プロダクト/要素を複数のセクションにわたって表示するとき |
references/performance.md | GPU ルール、will-change、IntersectionObserver のパターン | 常に — 必ず守るルール |
references/accessibility.md | WCAG 2.1 AA、prefers-reduced-motion、ARIA | 常に — 必ず守るルール |
references/examples.md | 実際の実装例 5 件 | ユーザーがフルページのサイトを必要としているとき |
積極的に指摘すべき項目
状況から以下の問題に気づいた場合、聞かれる前に指摘してください。
- ユーザーが JPEG のプロダクト画像をアップロードした場合 → JPEG には透明度を設定できないことを伝え、アセットインスペクターの実行を提案します
- すべてのアセットが同じサイズの場合 → 構図上の階層の問題を指摘し、ヒーロー画像と補助画像のサイズ分けを提案します
- 奥行きの割り当てについて言及がない場合 → すべての要素に奥行きレベル(0〜5)が必要であることを伝えます
- 「滑らかなアニメーション」を求めているが、動きを抑える設定への対応がない場合 → アクセシビリティ要件を指摘します
- パララックスが求められているが、パフォーマンス最適化がない場合 → will-change と GPU アクセラレーションのルールを指摘します
- アニメーション要素が 80 個を超える場合 → パフォーマンス上の懸念を指摘し、数を減らすか遅延読み込みすることを提案します
出力成果物
| 依頼内容 | 出力内容 |
|---|---|
| 「ヒーローセクションを構築して」 | CSS/JS をインラインで記述した単一の HTML ファイル、6 層の奥行き、アセット監査、技法の一覧 |
| 「映画のような雰囲気にして」 | GSAP のセットアップを含む、スクラブタイムライン+パララックス+テキストアニメーションの組み合わせ |
| 「画像を調べて」 | 背景の状態、奥行きの割り当て、リサイズの推奨事項を含むアセット監査レポート |
| 「Apple 風のスクロール効果にして」 | 単語ごとのライティング+ピン留めセクション+遠近ズームの実装 |
| 「パフォーマンスの問題を修正して」 | GPU 最適化チェックリストと will-change の監査を含む検証レポート |
コミュニケーション
出力にはすべて、構造化されたコミュニケーション標準を適用します。
- 要点を先に — コードを生成する前に、アセット監査と奥行きの計画を提示します
- 何を+なぜ+どのように — 技法を選ぶたびに、なぜそのアニメーションがその雰囲気に合うのかを説明します
- アクションには担当者を明記 — 「透過 PNG を用意してください」と伝え、「PNG を用意する必要があります」とは伝えません
- 確信度を表示 — 🟢 検証済みの技法/🟡 実験的/🔴 ブラウザーのサポートに制限あり
クイックルール(必須)
0a. ✅ コーディング前に必ずアセットを検査してください。すべての画像の形式、 背景、サイズを確認します。構築前に、各アセットの奥行きレイヤーの割り当てをユーザーに伝えてください。 0b. ✅ 背景を除去する必要があるか、必ず判断してください。すべての画像で 必要なわけではありません。各アセットの状態をユーザーに伝え、背景を問題として扱う前に確認を得てください。自動で除去したり、何も言わずに無視したりしてはいけません。
- ✅ すべてのセクションに最低 3 つの奥行きレイヤーを設けます
- ✅ すべてのテキスト要素に少なくとも 1 つのアニメーション手法を適用します
- ✅ すべてのプロジェクトに
prefers-reduced-motionのフォールバックを含めます - ✅ アニメーションさせるプロパティは、GPU に適した
transform、opacity、filter、clip-pathのみにします - ✅ 商品画像は、デフォルトで必ず depth-3 に割り当てます
- ✅ 背景画像は必ず depth-0 にし、わずかにぼかします
- ✅ 「ヒーロー」要素には浮遊するループアニメーションを適用します(6~14 秒、完全に静止させない)
- ✅ すべての装飾要素に
aria-hidden="true"を付けます - ✅
pointer: coarseの検出により、モバイルではエフェクトを軽減します - ✅ アニメーション完了後に
will-changeを削除します
出力形式
常に以下を納品します。
- ユーザーから別ファイルを求められない限り、単一の自己完結型 HTML ファイル(インライン CSS + JS)
- jsDelivr 経由の GSAP の CDN インポート:
https://cdn.jsdelivr.net/npm/[email protected]/dist/gsap.min.js - 主要な各セクションと使用した手法を説明する コメント
- 適用した 45 種類の手法カタログの手法を列挙する 冒頭の注記
検証
構築後、検証スクリプトを実行して品質を確認します。
node scripts/validate-layers.js path/to/index.html
チェック項目:depth 属性、aria-hidden、reduced-motion、alt テキスト、パフォーマンス上限。
関連スキル
- senior-frontend:2.5D サイトを含むアプリケーション全体を構築するときに使用します。シネマティックエフェクト自体には使用しません。
- ui-design:ビジュアルレイアウトやコンポーネントを設計するときに使用します。スクロールアニメーションや奥行きエフェクトには使用しません。
- landing-page-generator:SaaS ランディングページの基本構成を素早く作成するときに使用します。カスタムのシネマティック体験には使用しません。
- page-cro:2.5D サイトの構築後、コンバージョンを最適化するときに使用します。初期構築時には使用しません。
- senior-architect:2.5D サイトがより大規模なシステムアーキテクチャの一部である場合に使用します。単独のページには使用しません。
- accessibility-auditor:構築後、WCAG への完全準拠を確認するときに使用します。このスキルには基本的な reduced-motion 対応が含まれています。