penpot-uiux-design
MCP toolsを使用してPenpotでプロフェッショナルなUI/UXデザインを作成するための包括的なガイドです。Webやモバイル・デスクトップアプリのUI/UX新規作成、コンポーネントやトークンを用いたデザインシステムの構築、ダッシュボード・フォーム・ナビゲーション・ランディングページのデザイン、アクセシビリティ基準やiOS・Android・Material Designなどのプラットフォームガイドラインへの準拠、既存Penpotデザインのユーザビリティ改善など、幅広いデザイン作業で活用できます。
description の原文を見る
Comprehensive guide for creating professional UI/UX designs in Penpot using MCP tools. Use this skill when: (1) Creating new UI/UX designs for web, mobile, or desktop applications, (2) Building design systems with components and tokens, (3) Designing dashboards, forms, navigation, or landing pages, (4) Applying accessibility standards and best practices, (5) Following platform guidelines (iOS, Android, Material Design), (6) Reviewing or improving existing Penpot designs for usability. Triggers: "design a UI", "create interface", "build layout", "design dashboard", "create form", "design landing page", "make it accessible", "design system", "component library".
SKILL.md 本文
Penpot UI/UX デザインガイド
penpot/penpot-mcp MCP サーバーと実証済みの UI/UX 原則を使用して、Penpot で専門的なユーザー中心のデザインを作成します。
利用可能な MCP ツール
| ツール | 目的 |
|---|---|
mcp__penpot__execute_code | Penpot プラグインコンテキストで JavaScript を実行して、デザインを作成/変更する |
mcp__penpot__export_shape | シェイプを PNG/SVG としてエクスポートして視覚的に検査する |
mcp__penpot__import_image | 画像 (アイコン、写真、ロゴ) をデザインにインポートする |
mcp__penpot__penpot_api_info | Penpot API ドキュメントを取得する |
MCP サーバーセットアップ
Penpot MCP ツールは、ローカルで実行されている penpot/penpot-mcp サーバーが必要です。詳細なインストールとトラブルシューティングについては、setup-troubleshooting.md を参照してください。
セットアップ前: 既に実行中かどうかを確認
セットアップを試みる前に、MCP サーバーが既に利用可能かどうかを必ず確認してください:
-
まずツールを呼び出してみる:
mcp__penpot__penpot_api_infoの呼び出しを試みる - 成功すれば、サーバーは実行中で接続されています。セットアップは不要です。 -
ツールが失敗した場合、ユーザーに以下のように質問してください:
「Penpot MCP サーバーが接続されていないようです。サーバーは既にインストールされており、実行中ですか? そうであれば、トラブルシューティングをお手伝いできます。インストールされていない場合は、セットアップ方法をご説明します。」
-
ユーザーがサーバーがインストールされていないことを確認した場合にのみ、セットアップ手順に進みます。
クイックスタート (インストール済みでない場合のみ)
# クローンとインストール
git clone https://github.com/penpot/penpot-mcp.git
cd penpot-mcp
npm install
# サーバーのビルドと起動
npm run bootstrap
その後 Penpot で:
- デザインファイルを開く
- プラグイン → URL からプラグインを読み込む に進む
- 以下を入力:
http://localhost:4400/manifest.json - プラグイン UI で 「MCP サーバーに接続」 をクリック
VS Code 設定
settings.json に以下を追加:
{
"mcp": {
"servers": {
"penpot": {
"url": "http://localhost:4401/sse"
}
}
}
}
トラブルシューティング (サーバーはインストール済みだが動作していない場合)
| 問題 | 解決策 |
|---|---|
| プラグインが接続しない | サーバーが実行中か確認 (penpot-mcp ディレクトリで npm run start:all を実行) |
| ブラウザがローカルホストをブロック | ローカルネットワークアクセスプロンプトを許可するか、Brave Shield を無効にするか、Firefox を試す |
| クライアントにツールが表示されない | 設定変更後に VS Code/Claude を完全に再起動 |
| ツールの実行に失敗/タイムアウト | Penpot プラグイン UI が開いており「接続中」と表示されていることを確認 |
| 「WebSocket 接続に失敗しました」 | ファイアウォールがポート 4400、4401、4402 を許可していることを確認 |
クイックリファレンス
| タスク | リファレンスファイル |
|---|---|
| MCP サーバーのインストール & トラブルシューティング | setup-troubleshooting.md |
| コンポーネント仕様 (ボタン、フォーム、ナビゲーション) | component-patterns.md |
| アクセシビリティ (コントラスト、タッチターゲット) | accessibility.md |
| 画面サイズ & プラットフォーム仕様 | platform-guidelines.md |
コアデザイン原則
ゴールデンルール
- 明確さは奇抜さに勝る: すべての要素に目的がなければならない
- 一貫性は信頼を築く: パターン、色、コンポーネントを再利用する
- ユーザー目標を最優先: 機能ではなくタスクのためにデザインする
- アクセシビリティはオプションではない: すべてのユーザーのためにデザインする
- 実際のユーザーでテストする: 仮説を早期に検証する
ビジュアルハイアラルキー (優先度順)
- サイズ: 大きい = より重要
- 色/コントラスト: 高コントラストが注意を引く
- 位置: 左上 (LTR) が最初に目に入る
- 余白: 分離が重要性を強調する
- タイポグラフィウェイト: 太字が目立つ
デザインワークフロー
- デザインシステムを最初に確認: ユーザーに既存のトークン/仕様があるかどうかを尋ねるか、現在の Penpot ファイルから検出する
- ページを理解する:
mcp__penpot__execute_codeをpenpotUtils.shapeStructure()で呼び出してハイアラルキーを確認する - 要素を検出:
penpotUtils.findShapes()を使用して、タイプまたは名前で要素を検出する - 作成/変更:
penpot.createBoard()、penpot.createRectangle()、penpot.createText()などを使用する - レイアウトを適用: レスポンシブコンテナには
addFlexLayout()を使用する - 検証:
mcp__penpot__export_shapeを呼び出して、作業を視覚的に確認する
デザインシステムの処理
デザインを作成する前に、ユーザーが既存のデザインシステムを持っているかどうかを判断します:
- ユーザーに尋ねる: 「従うべきデザインシステムまたはブランドガイドラインはありますか?」
- Penpot から検出: 既存のコンポーネント、色、パターンをチェック
// 現在のファイル内の既存のデザインパターンを検出
const allShapes = penpotUtils.findShapes(() => true, penpot.root);
// 使用中の既存色を検出
const colors = new Set();
allShapes.forEach(s => {
if (s.fills) s.fills.forEach(f => colors.add(f.fillColor));
});
// 既存のテキストスタイル (フォントサイズ、ウェイト) を検出
const textStyles = allShapes
.filter(s => s.type === 'text')
.map(s => ({ fontSize: s.fontSize, fontWeight: s.fontWeight }));
// 既存のコンポーネントを検出
const components = penpot.library.local.components;
return { colors: [...colors], textStyles, componentCount: components.length };
ユーザーがデザインシステムを持っている場合:
- 指定された色、間隔、タイポグラフィを使用する
- 既存のコンポーネントパターンと合わせる
- 命名規則に従う
ユーザーがデザインシステムを持っていない場合:
- 以下のデフォルトトークンを出発点として使用する
- 一貫したパターンの確立を支援することを提案する
component-patterns.mdの仕様を参照
Penpot API の重要な落とし穴
width/heightは READ-ONLY →shape.resize(w, h)を使用parentX/parentYは READ-ONLY →penpotUtils.setParentXY(shape, x, y)を使用- z オーダーには
insertChild(index, shape)を使用 (appendChildではない) dir="column"またはdir="row"の場合、Flex 子要素配列の順序は逆text.resize()後、growTypeを"auto-width"または"auto-height"にリセット
新しいボードの配置
重なりを避けるため、新しいボードを作成する前に必ず既存のボードをチェック:
// すべての既存ボードを検出し、次の位置を計算
const boards = penpotUtils.findShapes(s => s.type === 'board', penpot.root);
let nextX = 0;
const gap = 100; // ボード間のスペース
if (boards.length > 0) {
// 最も右のボードエッジを検出
boards.forEach(b => {
const rightEdge = b.x + b.width;
if (rightEdge + gap > nextX) {
nextX = rightEdge + gap;
}
});
}
// 計算された位置に新しいボードを作成
const newBoard = penpot.createBoard();
newBoard.x = nextX;
newBoard.y = 0;
newBoard.resize(375, 812);
ボード間隔ガイドライン:
- 関連する画面間 (同じフロー) で 100px のギャップを使用
- 異なるセクション/フロー間で 200px 以上のギャップを使用
- ボードを縦方向に揃える (同じ y) で視覚的に整理
- 関連する画面をユーザーフロー順に水平方向にグループ化
デフォルトデザイントークン
ユーザーがデザインシステムを持っていない場合のみこれらのデフォルトを使用します。利用可能な場合は常にユーザーのトークンを優先します。
間隔スケール (8px ベース)
| トークン | 値 | 用途 |
|---|---|---|
spacing-xs | 4px | 密集したインライン要素 |
spacing-sm | 8px | 関連要素 |
spacing-md | 16px | デフォルトパディング |
spacing-lg | 24px | セクション間隔 |
spacing-xl | 32px | メジャーセクション |
spacing-2xl | 48px | ページレベルの間隔 |
タイポグラフィスケール
| レベル | サイズ | ウェイト | 用途 |
|---|---|---|---|
| Display | 48-64px | Bold | ヒーロー見出し |
| H1 | 32-40px | Bold | ページタイトル |
| H2 | 24-28px | Semibold | セクションヘッダー |
| H3 | 20-22px | Semibold | サブセクション |
| Body | 16px | Regular | メインコンテンツ |
| Small | 14px | Regular | セカンダリテキスト |
| Caption | 12px | Regular | ラベル、ヒント |
色の使用
| 目的 | 推奨 |
|---|---|
| Primary | メインブランドカラー、CTA |
| Secondary | サポート操作 |
| Success | #22C55E 範囲 (確認) |
| Warning | #F59E0B 範囲 (注意) |
| Error | #EF4444 範囲 (エラー) |
| Neutral | テキスト/ボーダーのグレースケール |
一般的なレイアウト
モバイル画面 (375×812)
┌─────────────────────────────┐
│ ステータスバー (44px) │
├─────────────────────────────┤
│ ヘッダー/ナビ (56px) │
├─────────────────────────────┤
│ │
│ コンテンツエリア │
│ (スクロール可能) │
│ パディング: 水平方向 16px │
│ │
├─────────────────────────────┤
│ ボトムナビ/CTA (84px) │
└─────────────────────────────┘
デスクトップダッシュボード (1440×900)
┌──────┬──────────────────────────────────┐
│ │ ヘッダー (64px) │
│ サイド │──────────────────────────────────│
│ バー │ ページタイトル + アクション │
│ │──────────────────────────────────│
│ 240 │ コンテンツグリッド │
│ px │ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │
│ │ │カード │ │カード │ │カード │ │カード │ │
│ │ └─────┘ └─────┘ └─────┘ └─────┘ │
│ │ │
└──────┴──────────────────────────────────┘
コンポーネントチェックリスト
ボタン
- 明確で、アクション指向のラベル (2-3 語)
- 最小タッチターゲット: 44×44px
- ビジュアル状態: デフォルト、ホバー、アクティブ、無効、読み込み中
- 十分なコントラスト (背景に対して 3:1)
- アプリ全体で一貫した角の丸さ
フォーム
- ラベルは入力の上 (プレースホルダーだけではない)
- 必須フィールド指標
- フィールドに隣接するエラーメッセージ
- 論理的なタブ順序
- 入力タイプはコンテンツに一致 (メール、電話など)
ナビゲーション
- 現在地が明確に示されている
- スクリーン全体で一貫した位置
- 最大 7±2 のトップレベルアイテム
- モバイルでタッチしやすい (48px ターゲット)
アクセシビリティのクイックチェック
- 色コントラスト: テキスト 4.5:1、大きなテキスト 3:1
- タッチターゲット: 最小 44×44px
- フォーカス状態: 目に見えるキーボードフォーカスインジケーター
- Alt テキスト: 画像の意味のある説明
- ハイアラルキー: 適切な見出しレベル (H1→H2→H3)
- 色への依存なし: 色だけに頼らない
デザインレビューチェックリスト
デザインを最終確定する前に:
- ビジュアルハイアラルキーが明確
- 一貫した間隔と配置
- タイポグラフィが読みやすい (本文テキスト 16px 以上)
- 色コントラストが WCAG AA を満たしている
- インタラクティブ要素が明白
- モバイルフレンドリーなタッチターゲット
- 読み込み/空/エラー状態を考慮
- デザインシステムと一貫している
デザインの検証
mcp__penpot__execute_code を使用してこれらの検証アプローチを使用:
| チェック | 方法 |
|---|---|
| 境界外の要素 | penpotUtils.analyzeDescendants() と isContainedIn() |
| テキストが小さすぎる (<12px) | penpotUtils.findShapes() で fontSize でフィルタ |
| コントラストの不足 | mcp__penpot__export_shape を呼び出して視覚的に検査 |
| ハイアラルキー構造 | penpotUtils.shapeStructure() でネストをレビュー |
CSS のエクスポート
mcp__penpot__execute_code 経由で penpot.generateStyle(selection, { type: 'css', includeChildren: true }) を使用してデザインから CSS を抽出します。
優れたデザインのコツ
- コンテンツから始める: 実際のコンテンツはレイアウトニーズを明かす
- モバイルファーストでデザイン: 制約は創造性を生む
- グリッドを使用: 8px ベースグリッドで整列を保つ
- 色を制限: 1 つのプライマリ + 1 つのセカンダリ + ニュートラル
- フォントを制限: 最大 1-2 のタイプフェース
- 余白を活用: 呼吸スペースは理解を改善する
- 一貫性を保つ: 同じアクション = どこでも同じ外観
- フィードバックを提供: すべてのアクションには応答が必要
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- github
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/github/awesome-copilot / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。