jpskill.com
🎨 デザイン コミュニティ

webflow-designer-extension

Webflow Designer内で動作する拡張機能を、CLI操作からUIデザインまで網羅的に開発・デバッグ・修正するSkill。

📜 元の英語説明(参考)

Build Webflow Designer Extensions that run inside the Webflow Designer. Use when creating, debugging, or modifying Designer Extensions (iframes that interact with Webflow's Designer API). Covers CLI usage, element manipulation, styles, components, pages, variables, assets, error handling, and UI design patterns for Webflow's design system.

🇯🇵 日本人クリエイター向け解説

一言でいうと

Webflow Designer内で動作する拡張機能を、CLI操作からUIデザインまで網羅的に開発・デバッグ・修正するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o webflow-designer-extension.zip https://jpskill.com/download/6546.zip && unzip -o webflow-designer-extension.zip && rm webflow-designer-extension.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/6546.zip -OutFile "$d\webflow-designer-extension.zip"; Expand-Archive "$d\webflow-designer-extension.zip" -DestinationPath $d -Force; ri "$d\webflow-designer-extension.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して webflow-designer-extension.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → webflow-designer-extension フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-17
取得日時
2026-05-17
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

Webflow Designer 拡張機能の開発

Webflow の Designer 内で iframe として実行される拡張機能を構築し、Designer API と連携して要素、スタイル、ページなどを操作します。

クイックスタートワークフロー

前提条件: まず Webflow でアプリを登録してください — references/register-app.md を参照してください。管理者権限を持つワークスペースが必要です。

  1. スキャフォールド: npx create-webflow-extension@latest (プロジェクト名、パッケージマネージャー、リンターの対話型プロンプト)
  2. 開発: cd <name> && pnpm dev (localhost:1337 で提供されます。npm/yarn/bun でも動作します)
  3. テスト: ワークスペース設定 > アプリと連携 > 開発 からテストサイトにアプリをインストールします。
  4. 開く: Designer で「E」を押してアプリパネルを開き、拡張機能を起動します。
  5. ビルド: デプロイのために pnpm build を実行します。

CLI オプション

npx create-webflow-extension@latest [project-name] [options]

Options:
  --pm <pnpm|npm|yarn|bun>           Package manager to use (default: pnpm)
  --linter <oxlint|biome|eslint>     Linter to use
  --skip-git                         Skip git initialization
  --skip-install                     Skip dependency installation
  --quiet                            Suppress output

コア API パターン

要素の取得と設定

// Get selected element
const el = await webflow.getSelectedElement();

// Get all elements
const elements = await webflow.getAllElements();

// Select element programmatically
await webflow.setSelectedElement(element);

要素の挿入

const selected = await webflow.getSelectedElement();
if (selected) {
  // Insert siblings
  await selected.after(webflow.elementPresets.DivBlock);
  await selected.before(webflow.elementPresets.Paragraph);

  // Insert children (if element supports children)
  if (selected.children) {
    await selected.append(webflow.elementPresets.Image);
    await selected.prepend(webflow.elementPresets.Heading);
  }
}

要素のスタイリング

// Create and apply style
const style = await webflow.createStyle("MyStyle");
await style.setProperty("background-color", "blue");
await style.setProperty("font-size", "16px");
await element.setStyles([style]);

// Responsive styling
await style.setProperties(
  { "font-size": "14px" },
  { breakpoint: "medium", pseudo: "hover" }
);

ユーザー通知

await webflow.notify({ type: 'Success', message: 'Element created!' });
await webflow.notify({ type: 'Error', message: 'Please select an element.' });

要素のプリセット

webflow.elementPresets を介した一般的なプリセット:

  • レイアウト: DivBlock, Section, Container, Grid, VFlex, HFlex
  • テキスト: Paragraph, Heading, TextBlock, RichText
  • メディア: Image, Video
  • フォーム: FormForm, FormInput, FormButton
  • ナビゲーション: Link, LinkBlock, NavBar
  • カスタム: DOM (カスタム HTML タグ用)

プリセットのない要素には、DOM 要素を使用します:

const custom = webflow.elementBuilder(webflow.elementPresets.DOM);
custom.setTag("section");
custom.setAttribute("class", "custom-section");

ブレークポイントと擬似状態

ブレークポイント: "xxl" | "xl" | "large" | "main" | "medium" | "small" | "tiny"

擬似状態: "hover" | "active" | "pressed" | "visited" | "focus" | "focus-visible" | "placeholder" | "first-child" | "last-child" | "nth-child(odd)" | "nth-child(even)"

エラー処理

try {
  const el = await webflow.getSelectedElement();
  await el.remove();
} catch (err) {
  switch (err.cause?.tag) {
    case 'ResourceMissing':
      await webflow.notify({ type: 'Error', message: 'Element not found' });
      break;
    case 'InvalidElementPlacement':
      await webflow.notify({ type: 'Error', message: 'Cannot place element here' });
      break;
    default:
      await webflow.notify({ type: 'Error', message: 'An error occurred' });
  }
}

一般的なエラータグ: DuplicateValue, Forbidden, InternalError, InvalidElementPlacement, InvalidRequest, InvalidStyle, ResourceMissing, VariableInvalid

プロジェクト構造

create-webflow-extension (React 19 + TypeScript + Rspack) によって生成されます:

my-extension/
├── public/
│   └── index.html        # エントリポイント
├── src/
│   ├── App.tsx           # メインの React コンポーネント
│   ├── main.tsx          # React のエントリポイント
│   └── index.css         # スタイル
├── webflow.json          # 拡張機能の設定
├── rspack.config.ts      # Rspack バンドラーの設定
├── package.json
└── tsconfig.json

リファレンスドキュメント

各リファレンスファイルには、検索可能な namedescriptiontags を含む YAML フロントマターが含まれています。関連するリファレンスを素早く見つけるには、検索スクリプトを使用してください:

# メタデータ付きのすべてのリファレンスをリスト表示
python scripts/search_references.py --list

# タグで検索 (完全一致)
python scripts/search_references.py --tag <tag>

# キーワードで検索 (名前、説明、タグ、コンテンツ全体)
python scripts/search_references.py --search <query>

クイックルックアップ

詳細ガイド

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Webflow Designer Extension Development

Build extensions that run inside Webflow's Designer as iframes, interacting with the Designer API to manipulate elements, styles, pages, and more.

Quick Start Workflow

Prerequisite: Register your app in Webflow first — see references/register-app.md. You'll need a Workspace with Admin permissions.

  1. Scaffold: npx create-webflow-extension@latest (interactive prompts for project name, package manager, linter)
  2. Develop: cd <name> && pnpm dev (serves at localhost:1337; also works with npm/yarn/bun)
  3. Test: Install app on test site via Workspace Settings > Apps & Integrations > Develop
  4. Open: Press "E" in Designer to open app panel, launch extension
  5. Build: pnpm build for deployment

CLI Options

npx create-webflow-extension@latest [project-name] [options]

Options:
  --pm <pnpm|npm|yarn|bun>           Package manager to use (default: pnpm)
  --linter <oxlint|biome|eslint>     Linter to use
  --skip-git                         Skip git initialization
  --skip-install                     Skip dependency installation
  --quiet                            Suppress output

Core API Patterns

Getting and Setting Elements

// Get selected element
const el = await webflow.getSelectedElement();

// Get all elements
const elements = await webflow.getAllElements();

// Select element programmatically
await webflow.setSelectedElement(element);

Inserting Elements

const selected = await webflow.getSelectedElement();
if (selected) {
  // Insert siblings
  await selected.after(webflow.elementPresets.DivBlock);
  await selected.before(webflow.elementPresets.Paragraph);

  // Insert children (if element supports children)
  if (selected.children) {
    await selected.append(webflow.elementPresets.Image);
    await selected.prepend(webflow.elementPresets.Heading);
  }
}

Styling Elements

// Create and apply style
const style = await webflow.createStyle("MyStyle");
await style.setProperty("background-color", "blue");
await style.setProperty("font-size", "16px");
await element.setStyles([style]);

// Responsive styling
await style.setProperties(
  { "font-size": "14px" },
  { breakpoint: "medium", pseudo: "hover" }
);

User Notifications

await webflow.notify({ type: 'Success', message: 'Element created!' });
await webflow.notify({ type: 'Error', message: 'Please select an element.' });

Element Presets

Common presets via webflow.elementPresets:

  • Layout: DivBlock, Section, Container, Grid, VFlex, HFlex
  • Text: Paragraph, Heading, TextBlock, RichText
  • Media: Image, Video
  • Forms: FormForm, FormInput, FormButton
  • Navigation: Link, LinkBlock, NavBar
  • Custom: DOM (for custom HTML tags)

For elements without presets, use DOM element:

const custom = webflow.elementBuilder(webflow.elementPresets.DOM);
custom.setTag("section");
custom.setAttribute("class", "custom-section");

Breakpoints and Pseudo-States

Breakpoints: "xxl" | "xl" | "large" | "main" | "medium" | "small" | "tiny"

Pseudo-states: "hover" | "active" | "pressed" | "visited" | "focus" | "focus-visible" | "placeholder" | "first-child" | "last-child" | "nth-child(odd)" | "nth-child(even)"

Error Handling

try {
  const el = await webflow.getSelectedElement();
  await el.remove();
} catch (err) {
  switch (err.cause?.tag) {
    case 'ResourceMissing':
      await webflow.notify({ type: 'Error', message: 'Element not found' });
      break;
    case 'InvalidElementPlacement':
      await webflow.notify({ type: 'Error', message: 'Cannot place element here' });
      break;
    default:
      await webflow.notify({ type: 'Error', message: 'An error occurred' });
  }
}

Common error tags: DuplicateValue, Forbidden, InternalError, InvalidElementPlacement, InvalidRequest, InvalidStyle, ResourceMissing, VariableInvalid

Project Structure

Generated by create-webflow-extension (React 19 + TypeScript + Rspack):

my-extension/
├── public/
│   └── index.html        # Entry point
├── src/
│   ├── App.tsx           # Main React component
│   ├── main.tsx          # React entry point
│   └── index.css         # Styles
├── webflow.json          # Extension settings
├── rspack.config.ts      # Rspack bundler configuration
├── package.json
└── tsconfig.json

Reference Documentation

Each reference file includes YAML frontmatter with name, description, and tags for searchability. Use the search script to find relevant references quickly:

# List all references with metadata
python scripts/search_references.py --list

# Search by tag (exact match)
python scripts/search_references.py --tag <tag>

# Search by keyword (across name, description, tags, and content)
python scripts/search_references.py --search <query>

Quick Lookup

Detailed Guides

Scripts

  • scripts/init-extension.sh: Quick project initialization wrapper around create-webflow-extension
  • scripts/validate-extension.py: Validate extension structure before bundling
  • scripts/search_references.py: Search reference files by tag, keyword, or list all with metadata

Assets

  • assets/webflow-variables.css: CSS variables for Webflow's design system colors, typography, and shadows

Best Practices

  1. Check element capabilities: Always verify element.children before append/prepend, element.textContent before text operations
  2. Handle errors gracefully: Use try/catch with webflow.notify() for user feedback
  3. Responsive design: Test on multiple breakpoints when setting styles
  4. Use variables: Leverage Webflow's CSS variables for consistent theming
  5. Subscribe to events: Use Designer events to keep extension state in sync
  6. Appropriate sizing: Use webflow.resizeExtension() for proper panel dimensions