本稿では、画像から構造化された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プロパティの有効性確認)を追加する設計が推奨される