Retrofit + OkHttpを使用したAPIクライアント実装のベストプラクティスを提供する。 「API実装」「APIクライアント」「Retrofit」「OkHttp」「ネットワーク」と言われたら使う。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Figmaデザインから高精度Jetpack Composeコードを生成するスキル。推測を排除し、Figma APIから正確な値を取得することで、95%以上の準拠率を実現。バイブコーディングを禁止し、Figma仕様に忠実な実装を保証する。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
FigmaデザインからJetpack Composeコードを95%以上の準拠率で自動生成する。 推測を完全に排除し、Figma APIから取得した正確な値のみを使用することで、デザイナーの意図を100%反映した実装を実現する。
このスキルは以下の場合に自動的に起動する:
/figma-to-compose コマンドが実行された時❌ 悪い例:デザインを見て「8dpくらいだろう」と推測
RoundedCornerShape(8.dp) // なぜ8dp?根拠なし
✅ 良い例:get_code でFigmaから正確な値を取得
RoundedCornerShape(4.dp) // Figmaで `rounded-[4px]` を確認
バイブコーディングとは:Figmaで明示的に指定されていない要素を勝手に追加・変更する行為
❌ 禁止される行為:
✅ 正しい実装:
❌ 悪い例:
val dividerStartPadding = 92.dp // この92はどこから?
✅ 良い例:
private object LayoutDimensions {
val imagePadding = 10.dp // Figma: padding-left: 10px
val imageWidth = 72.dp // Figma: width: 72px
val imageSpacing = 10.dp // Figma: gap: 10px
val dividerStartPadding = imagePadding + imageWidth + imageSpacing // = 92.dp
}
省略とは:Figmaに存在する要素を「不要」と判断して実装しないこと
❌ 禁止される行為:
✅ 正しい実装:
例:ステータスバーの扱い:
// ステータスバー - 描画はシステムUIに任せるが、スペースは確保
Spacer(modifier = Modifier.height(52.dp)) // Figma: status-bar height: 52px
実際に発生した問題:
❌ // ステータスバーを省略 → 後続コンテンツが上に詰まる
Column(modifier = Modifier.fillMaxSize()) {
LockScreenClock(...) // 時計が画面上部に寄りすぎ
}
✅ // スペースを確保 → レイアウト維持
Column(modifier = Modifier.fillMaxSize()) {
Spacer(modifier = Modifier.height(52.dp)) // Figma: status-bar
LockScreenClock(...) // 正しい位置に配置
}
Flexboxのgrow/shrinkより、Figmaから直接取得した固定値を優先する。
❌ 悪い例:grow/shrinkをweight()に変換
// Figmaコード: grow basis-0, shrink-0 を見て...
Column {
Box(modifier = Modifier.weight(1f)) { Cards() } // 曖昧
Surface { MessageArea() } // サイズ不定
}
✅ 良い例:スクリーンショットから実測して固定値を使用
Column {
Box(modifier = Modifier.weight(1f)) { Cards() }
Surface(modifier = Modifier.height(264.dp)) { MessageArea() } // Figma実測値
}
重要:
pb-[24px]等の値と、スクリーンショットの実際の見た目が異なる場合があるgrowによってスペースが拡張されている可能性Surfaceの背景を端まで伸ばす場合、paddingの位置に注意。
❌ 悪い例:Surfaceの外側にpadding → 背景が途切れる
Surface(
modifier = Modifier
.fillMaxWidth()
.padding(bottom = 24.dp) // 背景の外側にpadding → 背景が途切れる
) {
Content()
}
✅ 良い例:内側でpadding調整 → 背景が端まで伸びる
Surface(
modifier = Modifier.fillMaxWidth()
) {
Column(
modifier = Modifier.padding(bottom = 24.dp) // 内側でpadding
) {
Content()
}
}
重要: Figmaデータを取得する前に、プロジェクトの既存実装を必ず確認する。 この手順を省略すると、既存の共通コンポーネントや確立されたパターンを無視した実装になるリスクがある。
# 類似の画面/コンポーネントを検索
Grep: "AppScreen" or "Screen" in ui/
Grep: "[ComponentName]" similar patterns
# 例: AiChatAppScreenを実装する場合
Grep: "AppScreen" → ImageBasedAppScreen, WebViewAppScreenなどを発見
以下のシステムUI要素は、ほぼ確実に共通コンポーネントが存在する:
| 要素 | 検索パターン | よくある場所 |
|---|---|---|
| ステータスバー | StatusBar | ui/components/ |
| ナビゲーションバー | NavigationBar, BottomBar | ui/components/ |
| ツールバー | Toolbar, TopBar | ui/components/ |
| ローディング | Loading, Progress | ui/components/ |
# 共通コンポーネントの確認
Grep: "StatusBar" in ui/components/
ls ui/components/
# 発見したら必ずそれを使用
# ❌ Spacer(modifier = Modifier.height(52.dp))
# ✅ StatusBar(contentColor = StatusBarColors.ContentColorDark)
同種の画面(例:XxxAppScreen)が存在する場合、必ずそのパターンを踏襲する:
// 既存パターンを確認
fun ExistingAppScreen(
onBack: () -> Unit, // ← 戻るアクション
onUserInteraction: () -> Unit = {}, // ← ユーザー操作コールバック
overlayMode: Boolean = false // ← オーバーレイ表示モード
)
// 新規実装でも同じシグネチャを踏襲
fun NewAppScreen(
onBack: () -> Unit,
onUserInteraction: () -> Unit = {},
overlayMode: Boolean = false
)
Figmaはビジュアルのみを表現する。以下の動作仕様は既存コードから確認:
| 仕様タイプ | 確認方法 | 例 |
|---|---|---|
| ナビゲーション | 類似画面のパラメータ確認 | onBack, overlayMode |
| ジェスチャー | 類似画面の実装確認 | スワイプで戻る、ドラッグ操作 |
| アニメーション | 遷移処理の確認 | フェードイン、スライド |
| 状態管理 | ViewModel/StateHolderの確認 | UiState、イベント処理 |
// 例: スワイプジェスチャーの確認
// 既存画面でスワイプで戻る動作がある場合、同様に実装
SwipeToDismissBox(
state = dismissState,
onDismissed = onBack, // ← 既存パターンから継承
...
)
入力例:https://www.figma.com/design/[file-id]?node-id=[node-id]&m=dev
抽出:
- file-id: デザインファイルID
- node-id: コンポーネントID(例:29434-393401)
重要: このスキルは Figma MCP Tools を使用することを前提としています。
必須ツール使用順序:
get_code - 最優先・必須:正確な値とスタイル情報の取得
Tool: get_code
Parameters:
node_url: https://www.figma.com/design/[file-id]?node-id=[node-id]
get_image - 推奨:ビジュアル確認
Tool: get_image
Parameters:
node_url: https://www.figma.com/design/[file-id]?node-id=[node-id]
get_metadata - 任意:ノード構造の概要把握
Tool: get_metadata
Parameters:
node_url: https://www.figma.com/design/[file-id]?node-id=[node-id]
親コンテナの確認 - 必須:レイアウト文脈の把握
コンポーネント単体だけでなく、親ノードも必ず確認する
親のgap、grow、shrinkが子要素のレイアウトに影響する
重要事項:
get_code を省略してはならない(準拠率95%以上の鍵)references/figma-api-patterns.md 参照)実際に発生した問題:
❌ コンポーネント単体(node-id: 21:3665)だけ見て実装
→ 親コンテナ(node-id: 21:3294)のgap-[64px]を見落とし
→ レイアウトが崩れた
✅ 親ノードもget_codeで確認
→ 親のgap: 64px、子のgrow/shrink設定を把握
→ 正確なレイアウト実装
取得した値を構造化して記録:
## Figma Design Specification Report
### Node: [Component Name] ([node-id])
### Generated: [timestamp]
#### Colors (Figma仕様)
- primaryColor: rgba(0,116,196,1.0) → Color(0xFF0074C4)
- secondaryColor: rgba(102,102,102,1.0) → Color(0xFF666666)
- backgroundColor: rgba(245,245,245,1.0) → Color(0xFFF5F5F5)
#### Typography (Figma仕様)
- titleText: fontSize=17px, fontWeight=700, lineHeight=1.35
- bodyText: fontSize=15px, fontWeight=500, lineHeight=1.4
#### Layout (Figma仕様)
- padding: 20px → 20.dp
- cornerRadius: 4px → 4.dp
- gap: 10px → 10.dp
このレポートは効果測定のBefore/After比較に使用される。
実装前に以下を必ず確認:
Phase 0関連(既存コードベース確認)
overlayModeパラメータを実装しているかPhase 1関連(Figma仕様)
get_code で全ての値を取得したかFigmaコードの値と、スクリーンショットの実際の見た目が異なる場合がある。
例:
Figmaコード: pb-[24px]
スクリーンショット: ボタン下のスペースがもっと大きい
原因: growによってスペースが拡張されている
対処法:
height(264.dp))で実装不明な仕様がある場合:
ユーザーに確認:
"Figmaで[要素名]の[プロパティ]が確認できませんでした。
以下のいずれかをお選びください:
1. Figmaで該当箇所を確認して値を教えてください
2. この要素は実装しない(Figma仕様外のため)
3. デフォルト値を使用(Material Design 3準拠)"
Figmaデザインにはしばしばステータスバー、ナビゲーションバーなどのシステムUI要素が含まれます。これらは:
// 例: ステータスバー 52px がFigmaにある場合
Spacer(modifier = Modifier.height(52.dp)) // 描画せず、スペースのみ確保
この処理を省略すると、後続のコンテンツが上に詰まり、デザインとの不一致が発生します。
Figma仕様のrgba値をAndroid Color形式に変換:
// Figmaから取得したColor定義
object [ComponentName]Colors {
val primaryColor = Color(0xFF0074C4) // rgba(0,116,196,1.0) - Figma取得
val secondaryColor = Color(0xFF666666) // rgba(102,102,102,1.0) - Figma取得
val backgroundColor = Color(0xFFF5F5F5) // rgba(245,245,245,1.0) - Figma取得
}
変換ルール:
rgba(R, G, B, A) → Color(0xAARRGGBB)
例:rgba(0,116,196,1.0) → Color(0xFF0074C4)
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
R G B A A R G B
Figma仕様のフォント設定をTextStyleに変換:
// Figmaから取得したTypography定義
object [ComponentName]Typography {
val titleText = TextStyle(
fontSize = 17.sp, // Figma: font-size: 17px
fontWeight = FontWeight.Bold, // Figma: font-weight: 700
lineHeight = 22.95.sp // Figma: line-height: 1.35 → 17 * 1.35
)
val bodyText = TextStyle(
fontSize = 15.sp, // Figma: font-size: 15px
fontWeight = FontWeight.Medium, // Figma: font-weight: 500
lineHeight = 21.sp // Figma: line-height: 1.4 → 15 * 1.4
)
}
FontWeight変換表:
Figma fontWeight → Compose FontWeight
100 → FontWeight.Thin
200 → FontWeight.ExtraLight
300 → FontWeight.Light
400 → FontWeight.Normal
500 → FontWeight.Medium
600 → FontWeight.SemiBold
700 → FontWeight.Bold
800 → FontWeight.ExtraBold
900 → FontWeight.Black
// Figmaから取得したLayout定義(計算式で表現)
private object LayoutDimensions {
// 基本値(Figma直接取得)
val imagePadding = 10.dp // Figma: padding-left: 10px
val imageWidth = 72.dp // Figma: width: 72px
val imageSpacing = 10.dp // Figma: gap: 10px
val cornerRadius = 4.dp // Figma: border-radius: 4px
// 計算値(魔法の数字を排除)
val dividerStartPadding = imagePadding + imageWidth + imageSpacing // 92.dp
}
@Composable
fun [ComponentName](
// パラメータはFigmaのデータ構造に基づく
modifier: Modifier = Modifier
) {
Card(
modifier = modifier,
shape = RoundedCornerShape(LayoutDimensions.cornerRadius), // Figma: 4px
colors = CardDefaults.cardColors(
containerColor = [ComponentName]Colors.backgroundColor // Figma取得
)
) {
Row(
modifier = Modifier.padding(LayoutDimensions.imagePadding), // Figma: 10px
horizontalArrangement = Arrangement.spacedBy(LayoutDimensions.imageSpacing) // Figma: 10px
) {
// Figmaのレイアウト階層を忠実に再現
}
}
}
@Preview
@Composable
private fun [ComponentName]Preview() {
MaterialTheme {
[ComponentName]()
}
}
複雑なSVG(グラデーション、複数パス、クリップパス等)は手動変換を避け、Android Studioの機能を使用する。
推奨: Android Studio の New Vector Asset を使用
手順:
1. FigmaからSVGをエクスポート
2. Android Studio → File → New → Vector Asset
3. Local file → SVGを選択 → インポート
理由:
<aapt:attr>)の自動生成手動作成が許容されるケース:
❌ 禁止事項:
実際に発生した問題:
❌ 三角形のSVGパス M12 20L0 0H24L12 20Z を
誤って M12,0L24,20H0L12,0Z に変換
→ 吹き出しのしっぽが上下逆になった
✅ Android Studio の Vector Asset でインポート
→ 正確なパス変換を保証
生成したComposeコードとFigma仕様を照合:
## Implementation Compliance Report
### Component: [ComponentName]
### Generated: [timestamp]
#### Color Compliance: 100% ✅
- primaryColor: ✅ Color(0xFF0074C4) (Figma一致)
- secondaryColor: ✅ Color(0xFF666666) (Figma一致)
- backgroundColor: ✅ Color(0xFFF5F5F5) (Figma一致)
#### Typography Compliance: 100% ✅
- titleText: ✅ 17.sp, FontWeight.Bold, lineHeight=22.95.sp (Figma一致)
- bodyText: ✅ 15.sp, FontWeight.Medium, lineHeight=21.sp (Figma一致)
#### Layout Compliance: 100% ✅
- padding: ✅ 10.dp (Figma一致)
- cornerRadius: ✅ 4.dp (Figma一致)
- gap: ✅ 10.dp (Figma一致)
#### Unauthorized Elements: 0 ✅
- 勝手な角丸追加: なし
- 勝手なサイズ変更: なし
- Figma未指定の要素追加: なし
### Overall Compliance Score: 100%
/* Figmaコード例 */
padding: 20px;
border-radius: 4px;
font-size: 15px;
line-height: 1.35;
gap: 10px;
/* Android Compose実装 */
.padding(20.dp)
.rounded(4.dp)
fontSize = 15.sp
lineHeight = 20.25.sp // 15 * 1.35
Arrangement.spacedBy(10.dp)
問題:デザインを見て「これは8dpくらい」と推測してしまう
対策:
get_code でFigmaの実際の値を確認rounded-[Npx] または border-radius: Npx の記述を探す実際に発生した例:
❌ shape = RoundedCornerShape(8.dp) // 推測
✅ shape = RoundedCornerShape(4.dp) // Figma確認後
問題:パディングやマージンを目視で判断
対策:
gap-N、p-N、padding: Npx などのCSSクラスを確認get_code で正確な値を読み取る問題:line-heightの計算を間違える
対策:
// line-height: 1.35の場合
fontSize = 15.sp
lineHeight = (15 * 1.35).sp // = 20.25.sp(明示的に計算)
最後のアイテムで異なるdivider表示:
if (isLastItem) {
// 全幅のdivider(Figma仕様)
HorizontalDivider(
color = colors.divider,
thickness = 1.dp, // Figma確認
)
} else {
// テキスト開始位置からのdivider(Figma仕様)
Box(
modifier = Modifier
.fillMaxWidth()
.padding(start = LayoutDimensions.textStartPosition) // 計算値
) {
HorizontalDivider(
color = colors.divider,
thickness = 1.dp, // Figma確認
)
}
}
# 1. URLからnode-idを正確に抽出
nodeId = "29434-393401" # URLから抽出
# 2. get_codeでスタイル情報を取得(必須)
# 3. get_imageでビジュアル確認(推奨)
# 4. 不明な点があれば再度問い合わせ
A: より大きなコンポーネントや親要素の get_code (MCP Tool) を実行して文脈を取得
A: 既存の類似コンポーネントのパターンを参考にする
A: Figmaの get_image (MCP Tool) とプレビューの並列表示で詳細比較
対処方法:
references/figma-api-patterns.md 参照)注意: 基本的にはFigma MCP Toolsを使用してください。直接APIアクセスはMCP接続失敗時の代替手段です。
A: 描画は省略可能だが、スペースは必ず確保する。
Figmaで52pxのステータスバーがある場合:
Spacer(52.dp) でスペース確保 → レイアウト維持// 正しい実装例
Column(modifier = Modifier.fillMaxSize()) {
// Figma: status-bar (52px) - 描画はシステムに任せ、スペースのみ確保
Spacer(modifier = Modifier.height(52.dp))
// メインコンテンツ
MainContent(...)
}
Before計測(ベースライン):
口頭指示: "〇〇画面のArticleCardを作って"
→ 生成されたCompose
→ Figma仕様との差分を計算
→ 準拠率: 例えば60%
After計測(スキル使用):
/figma-to-compose https://figma.com/.../node-id=29434-393401
→ 生成されたCompose
→ Figma仕様との差分を計算
→ 準拠率: 目標95%以上
詳細は scripts/compliance-calculator.py を参照。
基本的な計算:
準拠率 = (Figma一致項目数 / Figma仕様項目総数) × 100
項目例:
- Color値の一致
- フォントサイズの一致
- fontWeightの一致
- line-heightの一致
- paddingの一致
- marginの一致
- corner radiusの一致
- レイアウト構造の一致
このスキルは以下を実現する:
これらのプラクティスに従うことで、Figmaデザインに正確に準拠した高品質なUI実装が可能になる。
このスキルは Agent Skills オープンスタンダードに準拠しています。
対応ツール:
.claude/skills/ ディレクトリに配置することで、上記すべてのツールで使用可能です。
| 日付 | 内容 |
|---|---|
| 2026-01-06 | Phase 0(既存コードベース確認)追加、チェックリスト強化(docomo-home-ui-mock FB反映) |
| 2025-12-23 | Agent Skills対応(互換性セクション追加) |
| 2025-12-XX | 初版作成 |
아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
Retrofit + OkHttpを使用したAPIクライアント実装のベストプラクティスを提供する。 「API実装」「APIクライアント」「Retrofit」「OkHttp」「ネットワーク」と言われたら使う。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Androidプロジェクトのアーキテクチャ設計を支援。プロジェクト特性に応じてMVI/MVVM/シンプルComposeから最適なパターンを提案し、パッケージ構造の設計と既存プロジェクトの分析を行う。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Firebase Crashlyticsのスタックトレースを解析し、トリアージ分類→根本原因分析→修正提案を出力するスキル。/crash-analyze コマンド、クラッシュ解析、スタックトレース分析、ANR分析、Crashlytics、クラッシュレポート、またはFirebase crashに関連するリクエストで使用される。クラッシュ対応のワークフローを標準化し、対応品質と速度を向上させる。ANR/Non-fatal/Fatal全タイプ対応。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Android data layer implementation guide. Provides comprehensive patterns for Room Database (Entity, DAO, Migration), DataStore (Preferences), Repository layer design, and common pitfalls. Use when implementing local data storage, cache strategies, or data source integration in Android projects.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
重要: ユーザーがAndroidテスト実行をリクエストした場合、常にこのスキルを最初に使用してください。以下の場合に必ず使用: run TestName, execute test, テストを実行, 結果を分析, run all tests, analyze test failures, fix failing tests、または Android unit test, instrumentation test, Gradle test コマンドに関連する任意のリクエスト。./gradlew test や Bash コマンドを直接使用しないでください - 常にこのスキルに委譲してください。Multi-variantプロジェクト、JAVA_HOME セットアップ、一般的なテストパターンに対応しています。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Jetpack ComposeでUIを実装する時に参照するコーディングガイドライン。 「Android UI」「Compose」「Jetpack」「画面実装」「UIコンポーネント」「レイアウト」と言われたら使う。 Android/Kotlin UI実装のベストプラクティス、アンチパターン、実装パターンを提供する。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.