GPT-4o の画像解析とコード生成能力:実用レベルに到達したAIアシスタント

本稿では、画像から構造化されたHTML/CSSを自動生成するという具体的なタスクを通じて、GPT-4o と国内の代表的な大規模言語モデル(例:Qwen)の実用性を比較検証します。対象は、技術メディア「掘金」の「人気記事ランキング」スクリーンショット——視覚情報をもとに、セマンティックなマークアップとBEM準拠のスタイルを出力させるという明確な要件です。

評価方法

両モデルには同一のプロンプトを提示しました:

「あなたはベテランフロントエンドエンジニアです。添付のスクリーンショットを基に、完全なHTMLファイルと対応するCSSファイルを出力してください。HTMLはW3C準拠のセマンティック要素(<header>, <section>, <ol>, <footer>など)を積極的に活用し、クラス名はBEMメソッドに従って命名してください。」

Qwen の出力結果

生成されたHTMLは<section>のみをセマンティック要素として使用し、<header><footer>といった意味的コンテナが欠落していました。リスト要素も<ul>で記述されており、順序付きリストであるという文脈情報(ランキング)を反映していませんでした。

CSS側では、基本的なリセットとレイアウト定義は適切でしたが、レスポンシブ対応やアクセシビリティ配慮(例:フォーカス状態の定義)は含まれていませんでした。

GPT-4o の出力結果

一方、GPT-4o の出力は以下の特徴を持ちました:

  • <header>内にタイトルと「換一換」ボタンを配置し、<ol>で順位リストを正確に表現
  • トップアイテムにarticle-list__item--topという修飾子クラスを適用し、視覚的優先度をマークアップレベルで表現
  • <footer>に「查看更多」リンクを配置し、ページ構造の整合性を保証
  • CSSでは、シャドウ、境界線、ホバー状態、テキストオーバーフロー処理(text-overflow: ellipsis)など、実際のUI実装に即した細かいスタイリングを含む

以下はGPT-4oが生成したHTMLの一部抜粋です:

<section class="article-list">
  <header class="article-list__header">
    <h1 class="article-list__title">文章榜</h1>
    <button class="article-list__refresh-button">换一换</button>
  </header>
  <ol class="article-list__items">
    <li class="article-list__item article-list__item--top">
      <span class="article-list__item-number">1</span>
      <span class="article-list__item-title">后端同事下班早,前端排序我来搞定!</span>
    </li>
    <!-- 以降、同様に4件 -->
  </ol>
  <footer class="article-list__footer">
    <a class="article-list__more-link" href="#">查看更多</a>
  </footer>
</section>

なぜセマンティックマークアップが重要か

単なる見た目再現ではなく、意味的構造をコードに反映することは、以下の理由から不可欠です:

  • SEO最適化:検索エンジンがコンテンツの階層と重要度を正しく解釈できる
  • アクセシビリティ向上:スクリーンリーダーが<nav>, <article>, <aside>などを通じてナビゲーションを支援
  • 保守性の向上:チーム開発時、article-list__item--topのような修飾子クラスは、デザイン変更時の影響範囲を明確に限定

多様なユースケースへの展開

GPT-4o の「omni(全能)」という名称は、テキストだけでなく画像・音声・動画を統合的に理解・生成できる多モーダル能力を示しています。例えば、売上CSVデータを入力し、自然言語で質問すれば、即座に集計結果を返すことも可能です:

import { OpenAI } from "openai";
import * as fs from "fs";

const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

async function generateSalesInsight(csvData, question) {
  const response = await openai.chat.completions.create({
    model: "gpt-4o",
    messages: [
      {
        role: "system",
        content: "You are a data analyst. Parse the CSV and answer the question precisely."
      },
      {
        role: "user",
        content: `Data:\n${csvData}\n\nQuestion: ${question}`
      }
    ]
  });
  return response.choices[0].message.content;
}

// 使用例
console.log(await generateSalesInsight(
  "date,product,quantity,unit_price,total\n2023-01-01,iPhone 13,100,6000,600000",
  "iPhone 13 の総売上を計算してください"
));

実用導入のための前提条件

GPT-4o を開発ワークフローに組み込むには、以下の点に留意が必要です:

  • 画像入力にはgpt-4oモデル(またはgpt-4o-mini)を明示的に指定
  • 日本語プロンプトでも高精度な出力を得るため、システムメッセージで役割(例:「日本語ネイティブのフロントエンド専門家」)を明確化
  • 実稼働環境では、出力のバリデーション(例:HTML構文チェック、CSSプロパティの有効性確認)を追加する設計が推奨される

タグ: GPT-4o HTML5 CSS bem semantic-markup

6月29日 00:47 投稿