見出し画像

FigmaデザインをClaude Code(CLI)でバイブコーディングする検証②

前回、Claude CodeのMacアプリ(GUI)+Sonnet4.6モデルでバイブコーディングの検証をしました。
今回は、ターミナルでClaude CodeのCLI+Opus4.6モデルを使ってスピードアップを検証しました。

結論から言うと、意外なことに、GUI+Sonnet4.6も、CLI+Opus4.6も、スピードは変わりませんでした。もしかすると、単なるコーディングレベルでは簡単すぎるタスクだったのかもしれませんが。



用意したもの


スキルをインストール

ターミナルからClaudeをインストールした後、以下スキルをインストールして再起動します。

以下スキルをインストールして再起動
https://github.com/boost-jp/ai-toolkit.git

スキルを発動

① FigmaデザインのURLと一緒にスキルを発動します。

/figma-to-code
https://www.figma.com/design/{fileKey}/...

実装計画が出てきました。

⏺ User approved Claude's plan

     YS COLLECTION EC サイト実装計画

     Context

     Figma デザイン(EC-SITE TEMPLATE DESIGN)から「YS COLLECTION」ECサイトを新規構築する。
     白シャツブランドのECサイトで、HOME / LIST / DETAIL / LEGAL の4ページ構成、PC/Mobile
     レスポンシブ対応。

     Figma URL:
     https://www.figma.com/design/{fileKey}/...

     1. デザイン概要

     カラースキーム

     - 背景: #ffffff
     - テキスト: #222222
     - サブテキスト: #6a7282
     - プレースホルダー: rgba(34,34,34,0.5)
     - カード背景: #f9fafb
     - ボーダー: #222222 (1px)

     タイポグラフィ

     - フォント: Georgia(全体)、Tinos + Noto Sans JP(一部)
     - h1: 36px/40px (LIST, LEGAL), 60px/60px (HOME hero)
     - h2: 30px/36px (HOME), 24px/32px (DETAIL関連商品)
     - h3: 18px/27px bold (footer), 20px/28px (newsletter), 14px/20px (商品名)
     - body: 14px/20px, 14px/22.75px (商品説明)
     - button: 16px/24px
     - logo: 24px/32px tracking 1.2px

     ページ構成

     ┌────────┬────────────┬────────────────┐
     │ ページ │ PC node-id │ Mobile node-id │
     ├────────┼────────────┼────────────────┤
     │ HOME   │ 1:2        │ 1:510          │
     ├────────┼────────────┼────────────────┤
     │ LIST   │ 1:1071     │ 1:763          │
     ├────────┼────────────┼────────────────┤
     │ DETAIL │ 1:1381     │ 1:1593         │
     ├────────┼────────────┼────────────────┤
     │ LEGAL  │ 1:1899     │ 1:1803         │
     └────────┴────────────┴────────────────┘

     2. コンポーネント構造

     Layout(共通レイアウト)
     ├── Header(新規)
     │   ├── MenuButton(新規)
     │   │   └── MenuIcon(新規)
     │   ├── Logo(新規) - "YS" テキストリンク
     │   └── HeaderActions(新規)
     │       ├── SearchIcon(新規)
     │       ├── UserIcon(新規)
     │       └── ShoppingCartIcon(新規)
     ├── Main(ページごと)
     │   ├── HomePage(新規)
     │   │   ├── HeroSection(新規) - メイン画像 + "YS COLLECTION" オーバーレイ
     │   │   └── ProductGrid(新規) - 4列グリッド、20商品表示
     │   │       └── ProductCard(新規) - 画像 + 商品名 + 価格
     │   ├── ListPage(新規)
     │   │   ├── Breadcrumb(新規) - パンくずナビ
     │   │   ├── PageTitle(新規)
     │   │   ├── FilterSortBar(新規) - 絞り込み + 並べ替えボタン
     │   │   │   ├── SlidersHorizontalIcon(新規)
     │   │   │   └── ArrowUpDownIcon(新規)
     │   │   └── ProductGrid(既存活用)
     │   │       └── ProductCard(既存活用)
     │   ├── DetailPage(新規)
     │   │   ├── Breadcrumb(既存活用)
     │   │   ├── ProductImages(新規) - 縦並び3枚の商品画像
     │   │   ├── ProductInfo(新規)
     │   │   │   ├── 商品名・価格
     │   │   │   ├── SizeSelector(新規) - XS/S/M/L/XL ボタン
     │   │   │   ├── ColorSelector(新規) - ホワイト/オフホワイト ボタン
     │   │   │   ├── AddToCartButton(新規)
     │   │   │   └── ProductDescription(新規)
     │   │   └── RelatedProducts(新規) - 横スクロールカルーセル
     │   │       └── ProductCard(既存活用)
     │   └── LegalPage(新規)
     │       ├── Breadcrumb(既存活用)
     │       ├── PageTitle(既存活用)
     │       └── LegalContent(新規) - 特定商取引法テキスト
     └── Footer(新規)
         ├── FooterLinks(新規) - 4カラム(ショップ/サポート/会社情報/フォロー)
         ├── NewsletterForm(新規) - メール登録フォーム
         └── Copyright(新規)

     3. 技術スタック

     - フレームワーク: Next.js 15 (App Router)
     - 言語: TypeScript
     - スタイリング: Tailwind CSS v4
     - アイコン: lucide-react(Menu, Search, User, ShoppingCart, ChevronRight, SlidersHorizontal,
     ArrowUpDown)
     - フォント: Google Fonts(Tinos + Noto Sans JP)

     4. ディレクトリ構成

     ys-collection_opus46_aitoolkit/
     ├── app/
     │   ├── layout.tsx          # 共通レイアウト(Header + Footer)
     │   ├── page.tsx            # HOME
     │   ├── products/
     │   │   ├── page.tsx        # LIST(商品一覧)
     │   │   └── [id]/
     │   │       └── page.tsx    # DETAIL(商品詳細)
     │   ├── legal/
     │   │   └── page.tsx        # LEGAL
     │   ├── globals.css         # Tailwind + カスタムスタイル
     │   └── components/
     │       └── pages/
     │           ├── HomePage.tsx
     │           ├── ListPage.tsx
     │           ├── DetailPage.tsx
     │           └── LegalPage.tsx
     ├── components/
     │   ├── ui/
     │   │   ├── Header.tsx
     │   │   ├── Footer.tsx
     │   │   ├── Breadcrumb.tsx
     │   │   ├── ProductCard.tsx
     │   │   ├── ProductGrid.tsx
     │   │   ├── SizeSelector.tsx
     │   │   ├── ColorSelector.tsx
     │   │   ├── NewsletterForm.tsx
     │   │   └── FilterSortBar.tsx
     │   └── icons/              # lucide-react を使うため不要
     ├── lib/
     │   └── products.ts         # 商品データ(モック)
     ├── public/
     │   └── images/             # 商品画像プレースホルダー
     ├── tailwind.config.ts
     ├── next.config.ts
     ├── tsconfig.json
     ├── package.json
     └── postcss.config.mjs

     5. 実装手順

     Phase 1: プロジェクト初期化

     1. Next.js プロジェクト作成(npx create-next-app@latest)
     2. Tailwind CSS, lucide-react インストール
     3. Google Fonts 設定(Tinos + Noto Sans JP)
     4. tailwind.config.ts にカスタムカラー・タイポグラフィトークン定義

     Phase 2: 共通コンポーネント実装

     1. components/ui/Header.tsx - ハンバーガーメニュー / ロゴ / アクション
     2. components/ui/Footer.tsx - 4カラムリンク / ニュースレター / コピーライト
     3. components/ui/Breadcrumb.tsx - パンくずナビ
     4. components/ui/ProductCard.tsx - 商品カード
     5. components/ui/ProductGrid.tsx - 商品グリッド
     6. app/layout.tsx - 共通レイアウト

     Phase 3: ページ実装

     1. app/page.tsx - HOME(ヒーロー + 商品一覧)
     2. app/products/page.tsx - LIST(フィルター + グリッド)
     3. app/products/[id]/page.tsx - DETAIL(画像 + 商品情報 + 関連商品)
     4. app/legal/page.tsx - LEGAL(特商法テキスト)

     Phase 4: レスポンシブ対応

     - Mobile: 2列グリッド(HOME/LIST)、1列レイアウト(DETAIL)
     - Header/Footer のモバイル対応
     - Breakpoint: md: (768px) を基準にPC/Mobile切り替え

     Phase 5: モックデータ・画像

     1. lib/products.ts に商品データ(24商品分)
     2. プレースホルダー画像の配置

     6. 検証方法

     1. npm run dev で開発サーバー起動
     2. 各ページの表示確認(/, /products, /products/1, /legal)
     3. レスポンシブ確認(ブラウザのDevToolsでモバイル表示)
     4. Figma スクリーンショットとの目視比較

実装計画を承認します。

Phase 1: プロジェクト初期化

⏺ Write(app/globals.css)
⏺ Write(lib/products.ts)
⏺ Write(public/images/placeholder.svg)
⏺ Now let me create the UI components and pages in parallel.
⏺ Write(components/ui/Header.tsx)
⏺ Write(components/ui/Footer.tsx)
⏺ Write(components/ui/NewsletterForm.tsx)
⏺ Write(components/ui/Breadcrumb.tsx)
⏺ Write(components/ui/ProductCard.tsx)
⏺ Write(components/ui/ProductGrid.tsx)
⏺ Write(components/ui/FilterSortBar.tsx)
⏺ Write(components/ui/SizeSelector.tsx)
⏺ Write(components/ui/ColorSelector.tsx)
⏺ Now let me create the layout and all pages.
⏺ Write(app/layout.tsx)
⏺ Write(app/products/page.tsx)
⏺ Write(app/products/[id]/page.tsx)
⏺ Write(app/legal/page.tsx)
⏺ Write(app/page.tsx)
⏺ Now let me check the next.config.ts for image configuration and build.
⏺ Let me run the build to check for errors.
⏺ ビルド成功です。全ページが正しくコンパイルされました。
⏺ 開発サーバーが起動しました。実装完了です。


実装サマリー

  作成ファイル一覧

  共通コンポーネント (components/ui/)
  - Header.tsx - ロゴ (YS) + メニュー/検索/ユーザー/カートアイコン
  - Footer.tsx - 4カラムリンク + ニュースレター + コピーライト
  - NewsletterForm.tsx - メール登録フォーム
  - Breadcrumb.tsx - パンくずナビゲーション
  - ProductCard.tsx - 商品カード(画像+名前+価格)
  - ProductGrid.tsx - 2列(Mobile)/4列(PC)グリッド
  - FilterSortBar.tsx - 絞り込み/並べ替えボタン
  - SizeSelector.tsx - サイズ選択(XS〜XL)
  - ColorSelector.tsx - カラー選択

  ページ
  - app/page.tsx - HOME(ヒーロー + 商品一覧20件)
  - app/products/page.tsx - LIST(パンくず + フィルター + 全24商品)
  - app/products/[id]/page.tsx - DETAIL(商品画像3枚 + 情報 + 関連商品)
  - app/legal/page.tsx - LEGAL(特定商取引法に基づく表記)

  データ・設定
  - lib/products.ts - モック商品データ24件 + ヘルパー関数
  - app/globals.css - Tailwind CSS + カスタムテーマ(カラー・フォント)

  確認方法

  - http://localhost:3000 - HOME
  - http://localhost:3000/products - 商品一覧
  - http://localhost:3000/products/1 - 商品詳細
  - http://localhost:3000/legal - 特商法ページ

ブラウザで確認した後、修正を依頼します。

⏺ 3つの改善を並行して進めます。
⏺ まず Figma から画像アセットを取得します。
⏺ Figma のアセット URL からヒーロー画像と商品画像をダウンロードします。
⏺ Figma から画像アセットをダウンロードします。デザインコンテキストから取得した URL を使います。
⏺ 画像が正常にダウンロードされました。次に、商品データの画像パスを更新し、ハンバーガーメニュー、フィル
  ター/ソートを実装します。
⏺ Write(lib/products.ts)
⏺ Write(components/ui/Header.tsx)
⏺ Write(components/ui/FilterSortBar.tsx)
⏺ Write(app/products/page.tsx)
⏺ Now update the HOME page and DETAIL page to use real images.
⏺ Update(app/page.tsx)
⏺ Update(app/products/[id]/page.tsx)
⏺ Now let me build to verify everything compiles correctly.
⏺ ビルド成功。開発サーバーを起動して確認します。
⏺ すべての実装が完了しました。

実装内容まとめ

  1. ハンバーガーメニュー (components/ui/Header.tsx)

  - ハンバーガーアイコンクリックで左からスライドインするメニュー
  - メニュー開閉時にアイコンが Menu ⇔ X に切り替わる
  - オーバーレイクリックでメニューを閉じる
  - メニューリンク: ホーム / 商品一覧 / 新着 / セール / お問い合わせ / 特定商取引法
  - CSS transition によるスムーズなアニメーション

  2. フィルター・ソート (components/ui/FilterSortBar.tsx + app/products/page.tsx)

  - 絞り込み: すべて / クラシック / カジュアル / フォーマル の4カテゴリ
  - 並べ替え: デフォルト / 価格安い順 / 価格高い順 / 名前順
  - ドロップダウン方式 (外側クリックで閉じる)
  - アクティブ状態のボタンが反転表示 (黒背景 + 白文字)
  - 該当商品がない場合の空状態表示

  3. Figma 画像の実装

  - ヒーロー画像 (/images/hero.jpg) - HOME ページ背景
  - 商品画像 (/images/product-1.jpg, /images/product-2.jpg) - カード用
  - 商品詳細画像 (/images/detail-1.jpg 〜 detail-3.jpg) - 3枚の詳細写真

  確認URL

  - http://localhost:3000 - HOME (ヒーロー画像 + 商品一覧)
  - http://localhost:3000/products - 商品一覧 (フィルター・ソート付き)
  - http://localhost:3000/products/1 - 商品詳細 (Figma 画像3枚)
  - http://localhost:3000/legal - 特商法ページ

デザインにないページも同じスタイルで作成してもらいます。

⏺ 6ページを作成します。
⏺ Write(app/cart/page.tsx)
⏺ Write(app/contact/page.tsx)
⏺ Write(app/shipping/page.tsx)
⏺ Write(app/returns/page.tsx)
⏺ Write(app/company/page.tsx)
⏺ Write(app/privacy/page.tsx)
⏺ Now update the Footer and Header links to point to the new pages.
⏺ Update(components/ui/Footer.tsx)
⏺ Update(components/ui/Header.tsx)
⏺ 全12ルートがビルド成功しました。
⏺ 6ページすべて作成完了です。

追加ページ一覧

  ┌────────────────┬────────┬────────────────────────────────────────────────────────────────────┐
  │     ページ     │  URL   │                                内容                                │
  ├────────────────┼────────┼────────────────────────────────────────────────────────────────────┤
  │ カート         │ /cart  │ 商品一覧(数量変更・削除)、注文サマリー(小計・送料・合計)、購入 │
  │                │        │ 手続きボタン                                                       │
  ├────────────────┼────────┼────────────────────────────────────────────────────────────────────┤
  │ お問い合わせ   │ /conta │ フォーム(名前・メール・注文番号・種別・内容)、送信完了メッセージ │
  │                │ ct     │                                                                    │
  ├────────────────┼────────┼────────────────────────────────────────────────────────────────────┤
  │ 配送について   │ /shipp │ 送料テーブル、お届け日数テーブル、時間帯指定、注意事項             │
  │                │ ing    │                                                                    │
  ├────────────────┼────────┼────────────────────────────────────────────────────────────────────┤
  │ 返品・交換     │ /retur │ 条件テーブル、送料負担テーブル、手順(4ステップ)、受付不可条件    │
  │                │ ns     │                                                                    │
  ├────────────────┼────────┼────────────────────────────────────────────────────────────────────┤
  │ 会社概要       │ /compa │ 企業理念、会社情報テーブル(9項目)、アクセス                      │
  │                │ ny     │                                                                    │
  ├────────────────┼────────┼────────────────────────────────────────────────────────────────────┤
  │ プライバシーポ │ /priva │ 全9条(定義・収集・利用目的・第三者提供・管理・Cookie・開示訂正削  │
  │ リシー         │ cy     │ 除・変更・問い合わせ先)                                           │
  └────────────────┴────────┴────────────────────────────────────────────────────────────────────┘

  リンク更新

  - Header ハンバーガーメニュー: 全ページへのリンクを追加
  - Footer: サポート欄・会社情報欄のリンクを実ページに接続
  - Header カートアイコン: /cart にリンク

全部で実装に何分かかりましたか?(計算させます)

⏺ 正確な経過時間は計測していませんが、会話のタイムスタンプから推測すると:

  - Phase 1 (プロジェクト初期化 + 共通コンポーネント + 4ページ): 最初のフォルダ作成からビルド成功まで
  - Phase 2 (ハンバーガーメニュー + フィルター/ソート + Figma画像ダウンロード): 追加実装
  - Phase 3 (追加6ページ + リンク接続): カート〜プライバシーポリシー

  合計で 約20〜25分程度 だったと思います。

  作成した成果物:
  - 10ページ (HOME / LIST / DETAIL / LEGAL / Cart / Contact / Shipping / Returns / Company / Privacy)
  - 9つの共通UIコンポーネント (Header / Footer / Breadcrumb / ProductCard / ProductGrid /
  FilterSortBar / SizeSelector / ColorSelector / NewsletterForm)
  - Figmaから取得した実画像5枚
  - モックデータ24商品分

結論:意外なことに、GUI+Sonnet4.6も、CLI+Opus4.6も、スピードは変わりませんでした。もしかすると、単なるコーディングレベルでは簡単すぎるタスクだったのかもしれませんが。

いいなと思ったら応援しよう!