1 分

AIはどのようにレイアウトと意図を読み取りデザインをUIコードに変換するか

AIがデザインからレイアウト、階層、ユーザーの意図を推測してUIコードを生成する仕組み、制約、ベストプラクティス、レビューのコツを学びます。

AIはどのようにレイアウトと意図を読み取りデザインをUIコードに変換するか

「デザイン→コード」AIが本当にすること

「デザイン→コード」AIは、ビジュアルなデザイン(通常はFigmaのフレームやスクリーンショット)を実行可能なUIコードに翻訳します。目的は「完璧なコード」ではなく、構造、スタイリング、基本的な振る舞いを捉えた使えるファーストドラフトを出して、そこから人が仕上げることです。

実際に何を翻訳するのか

基本的には、観察できるものUIが通常どのように構成されるか にマッピングします。

  • レイアウト: 要素の位置、揃え、スペーシング、グリッド、コンテナのグルーピング。
  • 階層: プライマリとセカンダリ(見出し vs キャプション、主要ボタン vs リンク)やセクションのネスト。
  • 意図: 要素が「何のためにあるか」(送信ボタン、詳細カード、入力フィールド)。
  • コンポーネント: 繰り返されるパターンで再利用可能な部品(ボタン、ナビバー、カード、フォーム行)。

AIが推測できること vs 指定が必要なこと

AIは一般的なパターンを推測できます:アイコンの列はツールバーらしい、ラベル+入力の積み重ねはフォームフィールドらしい、スタイルの一貫性は再利用コンポーネントを示唆します。制約やスペーシングからレスポンシブ挙動を推測することもあります。

しかし、ピクセルだけでは保証できない実務的な事柄は通常指定が必要です:実際のコンポーネント名、デザイントークン(色/タイポスケール)、状態(hover/disabled/error)、ブレークポイント、データルール、検証やナビゲーション先、アナリティクス設定など。

期待値の設定

出力は出発点として扱ってください。構造を確認し、場当たり的なスタイルはトークンに置き換え、チームのコンポーネントライブラリに合わせて調整し、反復します。「デザイン→コード」は加速手段であり、設計とエンジニアリングの判断を不要にする自動化ではありません。

AIがデザインを理解するための入力

AIは「きれいな画面」からプロダクトルールを推測できるわけではありません。与えた証拠に基づいて動作します—ある入力はピクセルを記述し、別の入力は構造を伝えます。この差がクリーンなUIコードか脆い絶対配置かを左右します。

スクリーンショットや静的モック:何が欠けているか

スクリーンショットは最も情報が薄い入力で、色や形は含みますが何がボタンで何がラベルか、何が再利用可能か、どのようにレイアウトが適応すべきかといった明示的事実はありません。

ピクセルだけからは要素境界、テキストスタイル、スペーシングルール、あるいは「カード」が一つのコンポーネントか複数かも推測しなければなりません。制約が分からないため、レスポンシブ挙動は大部分が憶測になります。

Figma/Sketchのエクスポート:フレーム、レイヤー、制約、スタイル

デザインファイル(または構造を保持したエクスポート)にアクセスできると、AIは重要なメタデータを得られます:フレーム、グループ、レイヤー名、Auto Layout設定、制約、テキスト/スタイル定義。

これによりレイアウトは幾何以上の意味を持ちます。例えばFigmaのAuto Layoutは「これらの項目を縦に積んで16pxの間隔を保つ」といった意図をスクリーンショットよりはるかに明確に伝えます。レイヤー名の一貫性は要素をUIの役割(例:「Primary Button」「Nav Item」「Input/Error」)にマッピングするのに役立ちます。

デザインシステム:トークン、コンポーネント、命名規則

デザインシステムに接続されていると当て推量が減ります。トークン(色、スペーシング、タイポ)はAIにハードコーディングされた値ではなく共通の真実を参照させるのでコードの一貫性が上がります。公開済みのコンポーネントは既製のビルディングブロックと再利用境界を提供します。

小さな慣習でも効果があります—バリアントの命名(Button/Primary, Button/Secondary)やセマンティックトークン(text/primary)といった運用はコンポーネントマッピングを改善します。

文書化された仕様:ユーザーフロー、受け入れ基準、エッジケース

仕様はUIの「なぜ」を加えます:ホバー動作、ローディングや空状態、検証ルール、キーボード挙動、エラーメッセージ。

これらが無いとAIは静的なスナップショットを生成しがちです。仕様があるとインタラクションフックや状態処理、より実用的なコンポーネントAPIを含む出力が得られ、チームが出荷可能なコードに近づきます。

AIがレイアウトと構造を解釈する方法

デザイン→コードツールは人間の見方で画面を認識するのではなく、各レイヤーをレイアウトルール(行、列、コンテナ、スペーシング)として説明しようとします。ルールが明確であるほど、出力は脆い位置決めに頼らずに済みます。

グリッド、カラム、スペーシングの検出

多くのモデルは繰り返しの整列や等間隔を探します。複数の要素が同じ左端・ベースライン・センターラインを共有していれば、カラムやグリッドトラックとして扱われることが多いです。一定のスペーシング(例:8/16/24px)はスタックギャップ、グリッドガター、トークン化されたスペーシングとして表現できるというヒントになります。

スペーシングがわずかにばらつく(ここは15px、あそこは17px)場合、AIはレイアウトを「手動」だと結論づけ、ピクセル精度を保つために絶対座標にフォールバックするかもしれません。

コンテナとネストグループの認識

AIはまた視覚的な“囲い”を探します:背景、ボーダー、シャドウ、内側のパディングに見える隙間がコンテナを示唆します。背景があり内部に余白が見えるカードは親要素と子要素を持つ明確なシグナルです。

そこから垂直スタック(リスト、フォーム)、水平行(ツールバー、ナビ)、ネストグループ(card → header → actions)といったプリミティブにマッピングすることが多いです。デザインファイル上でのクリーンなグルーピングは親子の区別をしやすくします。

制約の解釈:固定 vs フルイド

デザインにピン留めやハグ、フィルなどの制約があれば、AIは何が伸縮するべきか、何が固定かを判断します。fillに相当する要素は通常柔軟な幅(例:flex: 1)に、hugはコンテンツサイズにフィットする要素にマップされます。

なぜ絶対配置が出現するのか(そして危険性)

絶対配置は、フロー型レイアウトで関係性を自信を持って表現できないときに現れます—不整合なスペーシング、重なり、整列ミスが原因です。ある画面サイズでは正しく見えても、レスポンシブやテキストサイズ変更で破綻します。

クイック勝利:スペーシングの一貫性

小さなスペーシングスケールと明確なグリッドへの揃えは、AIが座標ではなくflex/gridコードを出す可能性を飛躍的に高めます。一貫性は単なる美観ではなく、機械が読み取れるパターンです。

視覚的手がかりから階層を推定する方法

AIは“理解”しているわけではなく、通常それを示すパターンから重要度を推測します。デザインがその信号を明確に出すほど、生成されたUIは意図に合いやすくなります。

タイポグラフィはランキングシステム

タイポグラフィは最も強力な手がかりの一つです。大きい文字、太いウエイト、高いコントラスト、広い行間は通常より重要と解釈されます。

例:32pxの太字タイトルの上に16pxの通常段落があれば「見出し+本文」のパターンが明確です。スタイル差が1–2pxしかない場合や同じウェイトで色だけ違う場合、AIは両方をプレーンテキスト扱いにしたり間違った見出しレベルを選んだりすることがあります。

グルーピング:近接性と共通コンテナ

要素が近接して整列し、他のコンテンツから余白で区切られているとグループと判断されます。共通の背景(カード、パネル、色付きセクション)は視覚的な括弧のように働き、AIはそれをsectionaside、コンポーネントラッパーとして解釈することが多いです。不均一なパディングやスペーシングの不整合は誤った再グルーピング(ボタンが別のカードに接続される等)を生みます。

繰り返しはコンポーネントを示す

同一のカード、リストアイテム、行、フォームフィールドの繰り返しは再利用可能コンポーネントの強い証拠です。わずかな違い(アイコンサイズ、角丸、テキストスタイル)があるとAIは単一コンポーネントではなく複数の使い捨てバージョンを生成することがあります。

強調:プライマリ vs セカンダリアクション

ボタンはサイズ、塗り、コントラスト、位置で意図を示します。塗りつぶしで高コントラストのボタンは通常プライマリアクション、アウトラインやテキストボタンはセカンダリに扱われます。二つのアクションが同等に強調されているとAIはどちらが「主要」かを誤判断することがあります。

視覚的階層からセマンティック構造へ

最終的にAIは階層を見出し(h1–h6)、グルーピング(section)や意味のあるクラスタ(例:「商品詳細」対「購入アクション」)にマッピングしようとします。明確なタイポグラフィ階段と一貫したグルーピングがあればこの翻訳はずっと信頼できるものになります。

AIがユーザーの意図やインタラクションを推測する方法

モデルは見た目を多くのUIから学んだパターンに照らし合わせて意図を予測します:一般的な形状、ラベル、アイコン、配置の慣習です。

親しみあるUIパターンを認識する

特定の配列は特定のコンポーネントを強く示唆します。左にロゴ、右にテキストがある横帯はナビバー。幅等しい項目が並び一つがハイライトされていればタブ。画像+タイトル+短いテキストの繰り返しはカード。整列されたヘッダと行の密なグリッドはテーブルと見なされます。

これらの推測は構造に影響します:タブは選択状態やキーボード操作が伴うべきであり、単なるボタン列とは異なる扱いになります。

何がインタラクティブかを推測する

次のような合図を探します:

  • ボタンらしい形(塗り背景、角丸、高コントラスト)
  • リンク表現(色や下線)やナビ内の配置
  • 入力(ボーダー、プレースホルダ、キャレット)
  • アフォーダンスアイコン(矢印はドロップダウン、虫眼鏡は検索、“⋯”はメニュー)

ここからクリック、メニュー開閉、ナビゲーション、送信、展開/折りたたみなどの振る舞いを割り当てます。デザインでインタラクティブと静的要素がはっきりしていれば、より正確になります。

状態の理解(曖昧な場合)

ホバーやアクティブ、無効、エラー、ローディングなど複数のバリアントが示されていれば、AIは状態を持つコンポーネントにマップできます。状態が明示されていないと生成物には含まれないことが多いです。

曖昧な場合(カードがクリック可能か情報表示かなど)は命名や注釈、あるいはインタラクションを示す別フレームで明示しておくと良いです。

デザインをUIプリミティブとコンポーネントに落とす

マークアップ以上を提供
レイアウトだけでなく、実データが必要なときはフロントエンドに加えてGoとPostgreSQLのバックエンドも生成します。

AIがレイアウトを妥当と判断すると、「見た目」から「それが何か」への変換を行います:セマンティックなHTML、再利用コンポーネント、一貫したスタイリング。

レイヤーから構造(とロール)へ

多くのツールはデザインレイヤーとグループをDOMツリーにマッピングします:フレーム→コンテナ、テキストレイヤー→見出し/段落、繰り返しアイテム→リストやグリッド。

意図が明確ならより良いセマンティクスを付与することがあります(例:トップバー→<header>、ロゴとリンク→<nav>、クリック可能なカード→<a><button>)。ARIAロール(例:role="dialog")はパターンが明白な場合にのみ推測され、そうでないときは安全策としてプレーンHTMLとアクセシビリティレビューのTODOが付けられます。

コンポーネント境界の切り分け

巨大なファイルを避けるため、AIはUIをプリミティブに切り分けようとします:

  • アトム:ボタン、入力、アイコン、タグ
  • モレキュール:検索バー、フォーム行、リスト項目
  • テンプレート/セクション:ヒーロー、価格表、ページシェル

繰り返し、一貫したパディングやタイポグラフィ、グルーピングされたクリック領域はコンポーネントの信号です。失敗モードは過剰断片化(小さすぎるコンポーネント)や未分割(全てハードコード)です。

スタイリング:CSS / ユーティリティ / CSS-in-JS

生成器はターゲットスタックやデフォルトに基づいてアプローチを選びます:

  • プレーンCSS / モジュール:明確な分離、手編集しやすい
  • ユーティリティクラス:生成が速く一貫性があるがマークアップが冗長
  • CSS-in-JS:コンポーネントとスタイルを共置できるが、トークンの運用がないとノイズになる

ピクセルよりトークン

高品質な出力はデザイントークン(色、スペーシング、半径、シャドウ)に依拠します。厳密なピクセル一致は13pxのような一-off 値を生み、保守が難しくなります。

実務的には:階層とスペーシングのリズムを保ちつつ、トークンに正規化して繰り返し使えるコンポーネントを抽出する(その後レビューでさらにリファクタリング)というバランスが現実的です(参照:/blog/how-to-review-and-refactor-generated-ui-code)。

フレーム固定から適応UIへ(レスポンシブ)

デザインファイルは数個の固定フレームサイズで「完成」して見えます(例:1440と375)。コードはそれを前提にしてはならず、画面幅の間も含めてどう振る舞うか決めねばなりません。ツールは手がかりとデフォルトの組合せで挙動を決めます。

ブレークポイントはどう推定されるか

同じ画面のデスクトップ/タブレット/モバイル版があると、AIはそれらを整列させてレイアウトルールの切り替わり箇所を推定できます。バリアントが無い場合は一般的なブレークポイントにフォールバックし、ぎこちないジャンプを生むことがあります。

折り返し、スタック、リフローの判断

AIは繰り返しカードや等間隔、整列を見て、例えば3カラムを2カラム、1カラムへと変える判断をします。手作業で微調整されたレイアウトは意図か偶発か区別できないため苦手です。

動的コンテンツ:長文とローカリゼーション

多くのデザインは短く整ったコピーを使いますが、実際のプロダクトはそうとは限りません。AI生成コードは固定幅/高さを設定したり過度に省略(truncation)することがあります。

簡単なサニティチェック:

  • タイトルを2–3倍に長くしてテスト(ドイツ語の合成語など)
  • 複数行になるボタンやエラーメッセージ
  • OSのアクセシビリティでテキストを大きくして確認

レスポンシブ画像とメディア

AIはデザインのピクセルクロップを保持しがちですが、レスポンシブUIにはルールが必要です:アスペクト比を維持する、どのようにクロップするか、縮小時にどう振る舞うか。指定がないと「fill」挙動で重要な部分が切れることがあります。

実務的なチェック

出力を信用する前に、極小幅、極大モニタ、中間サイズでプレビューしてください。重なり、切れ、読めない箇所があれば、通常はレイアウト意図の不足が原因であり「悪いコード」ではなく設計上の手がかり不足のサインです。

アクセシビリティ:見える信号、欠落、すぐできる改善

作ってクレジットを獲得
コンテンツを作成したりチームを紹介したりして、Koder.aiで構築しながらクレジットを獲得できます。

AIはピクセルをUIコードに変換するのが得意ですが、「見た目が正しい」と「誰にとっても使える」は違います。多くのアクセシビリティ要件は静的フレームだけでは見えないため、明示的な信号が必要です。

AIがデザインから推測できること

視覚的に現れるアクセシビリティ対応はある程度マッピングできます:

  • コントラストや強調:大きく太いテキストは見出しになりやすい
  • 入力近くのラベル:テキストが直接上/左にあるとそのフィールドのラベルと推定されやすい
  • フォーカス順のヒント:左→右、上→下のクリーンなレイアウトは妥当なDOM順を生むことがある

AIが確実には推測できないこと

  • キーボードフローやトラップ(モーダルやメニューのフォーカス管理)
  • 意味のあるラベル(プレースホルダは代替にならない)
  • 状態のアナウンス(エラーやローディングのARIAパターン)

生成コードでよく見られる不足

  • label/forの欠落
  • 誤った見出しレベル
  • キーボード対応のないクリック可能なdiv
  • フォーカススタイルの欠如
  • アイコンに代替テキストがない

出荷前のクイックチェックリスト

  • 見出しが論理的なアウトラインになっている(h1h2h3
  • ランドマークが存在して重複していない(headernavmainfooter
  • 画像/アイコンのaltが適切(装飾ならalt=""
  • 見えるフォーカススタイルがありコントラスト要件を満たす
  • 入力にラベルがありエラー表示が関連付けられている

明示的なアクセシビリティ仕様を追加するタイミング

モーダル、ドロワー、複雑なフォーム、カスタムウィジェット、ドラッグ&ドロップなど、状態やフォーカス管理が必要な場合は短い仕様を付けてください。例えば「モーダルでフォーカスをトラップ」「Escで閉じる」「インラインエラーをアナウンス」といった数行の注記で生成品質が劇的に改善します。

AI生成UIコードがよく失敗する箇所

AIは見た目は近づけられても、解釈の小さなズレが積み重なって問題になります。多くはデザインがルールを明確にエンコードしていないための「妥当な推測」に起因します。

  • スペーシングがデザインと合わない:余白やパディングが微妙に異なることが多い。これはAuto Layoutと手動調整が混在していると起きやすい。
  • 過剰ネストで冗長なDOM:単純なカードが揃えのために多層のdivに分解される
  • コンポーネント抽出が不適切:繰り返しパターンが似ているが微妙に異なるとAIは複数バージョンを生成する
  • タイポグラフィのズレ:テキストスタイルが正しくマッピングされないと見出しがHTMLで折り返す
  • インタラクション状態の欠落:ホバー、フォーカス、エラー、ローディングがデザインに無ければ生成されない

AIがより良いコードを生成できるようにデザインを準備する方法

AIは構造化されたファイル(レイヤー、制約、スタイル、コンポーネントインスタンス)を読んでいるので、その構造がクリーンであるほど推測が減り、後で解決すべき奇妙なdivが少なくなります。

1) 名前付けに意味を持たせる

レイヤー名は意図とコンポーネントマッピングの強力な信号です。UIで使う命名パターンに合わせて一貫した名前を付けてください:

  • Button/Primary, Button/Secondary
  • Card/Product, Card/Article
  • Form/Input/Text, Form/Checkbox

「Rectangle 12」や「Group 5」のままにしないでください—AIは汎用のラッパーにして再利用可能なコンポーネントを見つけにくくなります。

2) Auto Layoutと制約を使う(ピクセル振り付けではなく)

手動配置はコード化すると絶対座標に変わりがちです。flex/grid出力を望むなら、デザイン自体をflex/gridのように振る舞わせてください:

  • 行/列、スペーシング、揃え、パディングにAuto Layoutを使う
  • 要素が予測可能にリサイズするように制約を適用する(テキストは伸びる、ボタンはピン留め、カードは拡張)

ツール上でデザインが反応するようになれば、生成UIもデフォルトでレスポンシブになりやすいです。

3) トークンとスタイルの定義と再利用

ワンオフの色やフォントサイズ、スペーシングはワンオフCSSを生みます。代わりに:

  • 色/テキストスタイル(タイプ、サーフェス、ボーダー、状態)を作り再利用する
  • スペーシングステップ(例:4/8/12/16)を標準化し、レイアウトが一貫するようにする

これにより一貫性が高まり、後でデザインシステムへリファクタする際も楽になります。

4) ステート、バリアント、短い意図注記を含める

AIは見つけられないものを想像しません。ホバー/押下/無効、入力のエラー状態、ローディング、空状態といった主要バリアントを追加してください。

動作が重要な箇所には短い注釈を付けるとよいです:「モーダルを開く」「サーバ検証」「成功時にトースト表示」など。一行の注釈で誤ったインタラクションコードを防げます。

チームの標準ワークフローとしてチェックリストを作り、内部にリンク(例:/blog/design-to-code-checklist)しておくと品質が向上します。

生成出力をレビュー・リファクタする方法

UIの意図から構築
画面をチャットで説明するだけで、UIの意図を動くReactアプリに変えます。

AI生成UIコードは最初の下書きとして扱い、人の手で整えると大きな時間短縮になります。

1) ピクセルより先にセマンティクスを検証

まずマークアップをスクリーンリーダーの視点で読みます。

  • 見出し順序(h1は1つ、論理的にh2/h3
  • リストは実リスト(ul/ol)か
  • フォームは各入力にラベルがあり、エラー/補助テキストが関連付けられているか
  • インタラクティブ要素が正しい(アクションはbutton、ナビはlink)

セマンティクスが間違っているなら、CSSで誤魔化してもアクセシビリティや使いやすさは救えません。

2) 安定するレイアウトへリファクタリング

多くのジェネレータはスクリーンショットを合わせるため絶対配置や深いラッパーに頼ります。これはコンテンツ変更で壊れやすくなります。

座標ベースのスタイルを見つけたらまずflex/gridに書き換え、ネストを減らして目的のあるラッパーだけ残します。

3) コンポーネントとトークンの抽出

繰り返しパターンを見つけてコンポーネント化し、ハードコード値をトークンへ置換します。既存のチームトークンに合わせるか、最小限のセットを作って段階的に拡張してください(参考:/blog/design-tokens)。

4) 回帰を防ぐ簡易チェックを追加

重いテストスイートは不要です。

  • 主要コンポーネントのStorybookストーリーとスナップ/ビジュアルチェック
  • キーボードナビ、フォーカス、ブレークポイント、長文テキストの簡易QA

5) 想定をドキュメント化する

ジェネレータは推測します。行った編集や決定(インタラクションルール、ブレークポイント、コンポーネントマッピング)を記録して、次回以降や別の開発者が誤って元に戻すのを防いでください。

ワークフロー選択と期待値の設定

AIの「design to code」は加速材として最も役立ちます。最速のチームはデザインシステムの成熟度と画面リスクに合ったワークフローを選びます。

二つの一般的なワークフロー

1) デザインツール内でのAI支援(例:Figmaプラグイン):ソースファイルに近いまま素早いスキャフォルドが得られ、名前付けやコンポーネント、トークンの整合を保ちやすい。

2) 外部コンバータ(アップロード/エクスポート → コード):多数ファイルの一括変換やチーム横断のパイプラインに有用。構造の掃除やインタラクション配線に時間がかかることがある。

多くのチームはdesign-to-codeを「仕様から出荷する」フローに組み込み、生成を下書きとして手作業で整える運用に落ち着きます。例えば Koder.ai のようなプラットフォームはフロントエンド(React)とバックエンド(Go/PostgreSQL)、モバイル(Flutter)をチャットで生成し、プランニングやスナップショット、ロールバック、ソースコードのエクスポートまで対応する例です。

AIが最も役立つ場面

  • スピードが重視されるプロトタイプやMVP
  • グリッド、スペーシング、基本的なコンポーネントマッピングのスキャフォルド
  • 繰り返しの多いUI(テーブル、カード、設定画面)

AIを避ける/限定するべき場面

  • 状態管理や検証、エッジケースが重要な複雑なマルチステップフロー
  • キーボード挙動やARIAの細かな配慮が必須なアクセシビリティ重視画面
  • 条件レンダリングやパフォーマンスに配慮が必要なデータ中心UI

フィードバックループの構築

各生成を下書きとして扱い、出力をレビューして繰り返し課題(命名規則、欠落する状態、誤ったセマンティクス)を記録し、プロンプト/仕様やデザイン規約を更新してください。数回の反復で品質は大きく向上します。

次のステップと評価基準

コミットする前に小さなパイロットを回し、次の観点で評価してください:レイアウトの忠実度、コンポーネント再利用、レスポンシブ性、アクセシビリティ基本、リファクタリング所要時間。ツールやプランを比較する際は /pricing を確認してください。

よくある質問

「design to code」AIは具体的に何をするの?

AI支援による、ビジュアルなUI(Figmaフレーム、デザイン書き出し、またはスクリーンショット)を実行可能なUIコードに変換するプロセスです。目的は「完璧なコード」ではなく、レイアウト、スタイルのリズム、基本的な構造を備えた堅実なファーストドラフトを出し、開発者がトークンやコンポーネント、プロダクション品質のセマンティクスにリファクタリングできるようにすることです。

デザインのどの部分をAIは信頼して翻訳できる?

通常、次の要素を翻訳できます:

  • レイアウト(行/列、揃え、ギャップ、グリッド)
  • 階層(見出しと本文、プライマリとセカンダリのアクション)
  • コンポーネントパターン(繰り返されるカード、フォーム行、ナビアイテム)
  • 基本的な意図の推定(一般的なUI慣習に基づくボタン/リンク/入力など)
ピクセルだけからAIは何を推測できない?

ピクセルだけでは全ては表現できません。通常、あなたが指定するか別途提供する必要があるのは:

  • デザイントークン(色、タイポグラフィスケール、スペーシングスケール)
  • ライブラリに合わせたコンポーネント名/バリアント
  • 検証、ナビゲーション先、アナリティクスなどのインタラクションルール
  • ホバー/フォーカス/無効/エラー/ローディング/空状態などの状態
  • デザインに示されていないブレークポイントやレスポンシブルール
なぜFigmaファイルはスクリーンショットより優れているの?

スクリーンショットは最も情報が薄い入力です:色や形は分かりますが、レイヤーや制約、コンポーネントといった構造的な事実が欠けます。したがって推測が多くなり、絶対配置が増え、再利用可能なコードは得にくくなります。

Figma/Sketchのファイルや構造を保った書き出しは、フレーム、レイヤー名、Auto Layout、制約、スタイルといったメタデータを提供します。これらはフレキシブルなレイアウトや正確なコンポーネント境界を作るうえで重要な信号になります。

AIはどうやってグリッドやカラム、スペーシングを検出するの?

繰り返しの整列や等しい間隔を探して、UIをflex/gridルールとして表現しようとします。明確なスペーシングのリズム(例:8/16/24)が見つかれば、安定したスタックやグリッドを生成できます。

逆にスペーシングが不揃いだったり要素がわずかにズレていると、モデルは精密な見た目を保つために絶対座標に頼ることが多く、その代償としてレスポンシブ性が損なわれます。

カードやセクションのようなコンテナやネストされたグループをAIはどう認識する?

次のような“囲い込み”のビジュアル信号を探します:

  • 背景やボーダー、シャドウ(カードやパネルの境界)
  • 内側の余白に見えるパディング的な空白
  • 近接性と整列(一緒に属しているように見えるアイテム)

デザインツール上でフレームやAuto Layoutなどのきれいなグルーピングがあると、親子関係をコード上で再現しやすくなります。

なぜ生成コードで絶対配置が出るの?それはなぜ問題?

関係性が曖昧なとき(重なり、不揃いのスペーシング、手動での微調整が混在している場合)に絶対配置が出やすくなります。絶対配置は一つの画面サイズでは見た目が正しくても、次のようなときに崩れやすいです:

  • 異なるビューポート幅
  • 長いテキスト/ローカライズ
  • ユーザーによるフォント拡大(アクセシビリティ)

柔軟な出力を望むなら、Auto Layoutや制約でデザインをフレックス/グリッド的に振る舞わせてください。

AIはどうやって階層(見出し、セクション、プライマリアクション)を推定する?

タイポグラフィは優先度を示す最も強い手がかりの一つです。大きなサイズ、太いウェイト、高いコントラスト、広い行間は一般に高い優先度を示します。

例えば32pxの太字タイトルと16pxの通常の段落があれば「見出し+本文」と判別しやすいです。スタイル差が1~2pxしかない、または同じウェイトで色だけ違う、というようなケースではAIが見出しレベルを誤って判定することがあります。

AIはどうやってユーザーの意図やインタラクションを推測する?

AIは学習した多くのUIパターンに基づいて意図を推測します。例えば:

  • 左にロゴ、右にテキスト項目が並ぶ上部の横帯はナビゲーションバーである可能性が高い
  • 幅が等しい項目の行で一つが目立っていればタブのように扱われる
  • 画像・タイトル・短いテキストの繰り返しはカードとして扱われやすい

これらの判定は構造に影響します:タブなら選択状態やキーボードナビゲーションが必要だと推測されますが、単なるボタン列だとそうしたふるまいは期待されません。

AIはどのようにして何がインタラクティブかを判断する?

インタラクティブであることを示す手がかりを探します:

  • ボタンらしい形状(塗りつぶし、角丸矩形、高いコントラスト)
  • リンクスタイル(青いテキスト、下線)やナビ配置
  • 入力欄(ボーダー、プレースホルダ、キャレット表示)
  • 差し示しアイコン(矢印はドロップダウン、虫眼鏡は検索、“⋯”はメニュー)

そこからクリック、メニュー開閉、ナビゲート、送信、展開/折りたたみなどの振る舞いを割り当てます。要素がインタラクティブかどうかを明確に区別しておくほど、正確さが上がります。

状態やインタラクションの意図が曖昧なときはどうなる?

状態(ホバー、アクティブ、無効、エラー、ローディング)が複数示されていれば、AIはそれらを状態を持つコンポーネントにマップできます。状態が明示されていない場合、多くは省略されます。

曖昧なケースはよくあります:カードはクリック可能なのか情報表示だけなのか?矢印は装飾なのかディスクロージャコントロールなのか?こうした場合は命名、注釈、あるいは別フレームでインタラクションのバリアントを示しておくと良いです。

AIはデザインをどうやってHTMLやコンポーネントへ変換する?

ツールはデザインレイヤーやグループをDOMツリーにマッピングします:フレーム→コンテナ、テキストレイヤー→見出し/段落、繰り返しアイテム→リストやグリッド。

意図が明確ならより適切なセマンティクスを付ける場合があります(例:トップバー→<header>、ロゴとリンク→<nav>、クリック可能なカード→<a><button>)。ARIAロール(例:role="dialog")はパターンが明白な場合に限り推測されます。多くは安全策としてプレーンなHTMLとアクセシビリティ確認のTODOを出すことが多いです。

デザインをプリミティブやコンポーネントに落とすには?

コンポーネント化のためにUIをプリミティブに切り分けようとします:

  • アトム:ボタン、入力、アイコン、タグ
  • モレキュール:検索バー、フォーム行、リスト項目
  • テンプレート/セクション:ヒーローブロック、価格表、ページシェル

繰り返しや一貫したパディング・タイポグラフィがあればコンポーネントの信号になります。失敗パターンは過剰分割(ラベルごとにコンポーネント化)や過度の一体化(画面全体が単一コンポーネント)です。

スタイリングはどのアプローチを使うの?(CSS / ユーティリティ / CSS-in-JS)

生成器はターゲットスタックやデフォルトに基づいてスタイリング方式を選びます:

  • プレーンCSS / モジュール:編集しやすく分離が明確
  • ユーティリティクラス:生成が速く一貫性があるがマークアップが冗長
  • CSS-in-JS:コンポーネントにスタイルを共置できるが、トークン運用がないとノイズになる

高品質な出力はデザイントークン(色、スペーシング、半径、シャドウ)を活用して、設計変更時にも一貫性を保つようにします。ピクセル単位を厳密に再現すると13pxのような一-off 値で保守が難しくなることが多いです。

レスポンシブはどのように推測される?

デザインファイルは固定フレーム(例:1440、375)で描かれることが多いですが、コードはそれ以上に適応する必要があります。ツールは複数サイズのバリエーションがあれば整列させてブレークポイントを推定できますが、バリアントが無い場合は一般的なブレークポイントにフォールバックし、不自然なジャンプを生むことがあります。

折り返し・スタック・リフローはどう決める?

AIは繰り返しカードのグリッドや等間隔、整列を見て、例えば3カラムが2カラム、1カラムへと変わると判断します。手作業で微調整されたように見えるレイアウトは意図か揺らぎか区別できないため苦手です。

動的コンテンツ(長いテキストやローカライズ)については、生成コードが固定幅/高さを設定したり過度に切り捨て(truncation)することがあります。簡単なチェックとしては:

  • タイトルを2〜3倍に長くしてみる(ドイツ語の合成語など)
  • ボタンやエラーメッセージが複数行になるケース
  • OSのアクセシビリティ設定でテキストを拡大する

画像やメディアはピクセルクロップを保持しがちなので、アスペクト比を保つ、どのようにクロップするか、縮小時にどう振る舞うかといったルールを明示しておくと良いです。

アクセシビリティでAIができること・できないことは?

AIは見た目からは分からない要件を扱うのが苦手です。視覚的に表れる要素はある程度推測できますが、アクセシビリティの多くは明示が必要です。

推測できること:

  • コントラストや強調は見出しやプライマリボタンへ反映されやすい
  • 入力近くのラベルはそのフィールドのラベルと推定されることがある
  • 左から右、上から下のクリーンなレイアウトは妥当なDOM順を生みやすい

推測できないこと:

  • キーボードのフォーカス制御やフォーカストラップ(モーダルなど)
  • 意味のあるラベル(プレースホルダはアクセシブルなラベルと同等ではない)
  • エラーやローディングなどの状態通知(ARIAでのアナウンス)

生成コードでよく見られるミスは、label/forの欠落、誤った見出しレベル、クリック可能なdiv(キーボードサポート無し)、フォーカススタイルの欠如、代替テキストの無いアイコンなどです。

出荷前の簡単なチェックリスト:

  • 見出しは論理的なアウトラインになっている(h1h2h3
  • ランドマークが存在する(headernavmainfooter
  • 画像/アイコンに適切なalt(装飾ならalt="")がある
  • 見えるフォーカススタイルがあり、コントラスト要件を満たす
  • 入力にラベルがあり、エラー表示が明確である

モーダル、ドロワー、複雑なフォーム、カスタムセレクト、ドラッグ&ドロップのような非自明な状態を持つUIには短いアクセシビリティ仕様(例:「モーダルでフォーカスをトラップする」「Escで閉じる」「インラインエラーをアナウンス」)を追加すると生成品質が大きく向上します。

AI生成のUIコードでよく間違うところは?

生成されたUIコードは一見近い見た目でも、解釈ミスが累積すると問題になります。多くはデザインがルールを明確にエンコードしていないために起きる「合理的な推測」に由来します。

よくある失敗例:

  • デザインと合わないスペーシング(ボタンの位置やセクションの余白が微妙にずれる)
  • 過剰なネストで冗長なDOM(単純なカードが揃えのために5階層のdivに)
  • コンポーネント切り出しが的外れ(細かく分かれすぎる、あるいは全てが一つ)
  • タイポグラフィのズレ(行間や文字幅の差で見出しが折り返す)
  • インタラクション状態の欠落(ホバー、フォーカス、エラーがない)
AIでより良いコードを得るためのデザイン準備は?

生成結果は下書きとみなして、人間が手を入れる前提で作業を組むのがベストです。準備のポイント:

  1. レイヤー名に意味を持たせる(例:Button/PrimaryCard/ProductForm/Input/Text)。「Rectangle 12」や「Group 5」は避ける。

  2. Auto Layoutや制約を使う(ピクセルベースの振る舞いではなく、flex/grid的に振る舞うデザインにする)。

  3. トークンとスタイルを定義して再利用する(色・フォント・スペーシングを変数化)。

  4. ステートやバリアント、短い意図注記を含める(hover/pressed/disabled、エラー状態、ロード状態、短い注釈)。

チームでチェックリストをつくり、内部リンク(例:/blog/design-to-code-checklist)を追加すると品質が安定します。

生成コードをどうレビュー・リファクタリングするのが良い?

AIが生成したコードは時間を大きく節約できますが、以下の手順でレビューとリファクタリングを行ってください:

  1. セマンティクスを優先して確認する
  • 見出し順序(h1が一つであるか、論理的なh2/h3になっているか)
  • リストはul/olか(divで積み上げられていないか)
  • フォーム:各入力にラベルが付いているか、エラーや補助テキストが関連付けられているか
  • インタラクティブ要素が適切か:アクションはbuttonナビゲーションはaなど
  1. レイアウトを安定させる
  • 絶対配置や深いネストがあれば先に書き換える(flex/gridを優先)
  • 不要なラッパーを減らし、各ラッパーに明確な役割を与える
  1. コンポーネントとトークンを抽出する
  • 繰り返し要素をコンポーネント化し、ハードコード値をトークンへ置換する
  • 既存のトークンガイドに合わせるか、最小限のセットを定義して拡張する(例:/blog/design-tokens)
  1. 回帰防止のための簡易チェックを追加する
  • Storybookに主要コンポーネントのストーリーを用意し、スナップショットやビジュアルチェックを行う
  • キーボード操作、フォーカス状態、レスポンシブ、長文テキストのテストを行う
  1. 想定をドキュメント化する
  • ジェネレータが推測した意図や、あなたが修正した点(インタラクションルール、ブレークポイント、コンポーネントマッピング)を記録し、次回の自動生成や別の開発者が元に戻さないようにする
どのワークフローを選び、期待値をどう設定する?

AIはアクセラレータとして使うのが最適で、自動操縦(オートパイロット)として頼り切るべきではありません。ワークフローはデザインシステムの成熟度や画面のリスクに合わせて選択します。

二つの一般的なワークフロー:

  • デザインツール内のAIアシスト(例:Figmaプラグイン):ソースファイルに近いままスキャフォルドを得られるので、デザイナーの反復と名前付け・コンポーネント・トークンの整合を保ちやすい。

  • 外部コンバータ(アップロード/エクスポート → コード):多くのファイルやチームに対する一括変換に向くが、構造の掃除やインタラクションの配線に時間がかかることが多い。

実務では、design-to-codeを「仕様から出荷まで」のフローに組み込み、生成を下書きとして扱い、追加の査読とリファクタリグを行うことが多いです。例えば Koder.ai のようなプラットフォームは、フロントエンド(React)とバックエンド(Go/PostgreSQL)、モバイル(Flutter)をチャットで記述して生成し、スナップショットやロールバック、ソースコードのエクスポートまで対応する例です。

AIが最も効果を発揮する場面:

  • スピードが優先されるプロトタイプやMVP
  • グリッド、スペーシング、基本的なコンポーネントマッピングのスキャフォルド
  • 繰り返しの多いUI(テーブル、カード、設定画面)

注意が必要な場面:

  • 状態管理や検証、エッジケースが重要な複雑なマルチステップのフロー
  • キーボード操作やARIAの細かな配慮が必要なアクセシビリティ重視の画面
  • 条件レンダリングやパフォーマンスに配慮が必要なデータ中心のUI

最後に、少量のパイロットを回して評価基準(レイアウトの忠実度、コンポーネント再利用率、レスポンシブ性、アクセシビリティの基本、リファクタリング時間)で採点してください。ツール比較やプラン検討の際は /pricing を確認すると良いでしょう。

Related posts