比較の条件と限界

この記事は、掲載済みのプロンプトと出力例を比較するものです。元の生成日時、モデルの詳細な版、会話履歴、試行回数の記録は記事に残っていません。「無料版」などの表記は掲載時の呼称であり、現在提供されているモデルを保証するものではありません。

同じプロンプトでも出力は変わります。以下の評価は、このページのサンプルに限定した観察です。各サービス全体の性能ランキングとしては扱わず、自分の用途・入力・評価条件をそろえて試してください。

2026年10月7日更新:比較条件の限界、確認できる根拠、参照先を追記しました。新しいモデルを使って再実験したという意味ではありません。

実験①:グラフ作成コードを書いてもらった

Pythonで月別売上の折れ線グラフを作るコードを依頼しました。ライブラリや見た目の指定は一切なし。何を選んでどこまで仕上げてくるかが、AIによって大きく変わります。

使ったプロンプト
Pythonで月別売上の折れ線グラフを作るコードを書いてください。
ChatGPT GPT-4o(無料版)
from matplotlib import pyplot as plt

# 架空の売上データ(単位:千円)
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
sales = [120, 150, 170, 160, 210, 250]

plt.figure(figsize=(8, 5))
plt.plot(months, sales, marker='o')

plt.title("Sample Sales Trend (Fictional Data)")
plt.xlabel("Month")
plt.ylabel("Sales (in thousands)")
plt.grid(True)

plt.show()
Gemini Gemini(無料版)
import matplotlib.pyplot as plt

# 1. 架空データの作成(1月〜12月の月別売上)
months = [f"{i}月" for i in range(1, 13)]
sales = [120, 145, 180, 165, 210, 230, 280, 310, 290, 320, 350, 420]

# 2. グラフの設定
plt.figure(figsize=(10, 6))
plt.plot(months, sales, marker='o', linestyle='-', color='b', label='売上高')

# 3. 装飾(タイトル、ラベル、グリッド)
plt.title('2025年度 月別売上推移', fontsize=16)
plt.xlabel('月', fontsize=12)
plt.ylabel('売上(万円)', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.7)
plt.legend()

# 4. グラフの表示
plt.show()
Claude Claude Sonnet(無料版)
import matplotlib.pyplot as plt

months = [f"{i}月" for i in range(1, 13)]
sales = [98, 112, 134, 128, 156, 172, 188, 203, 195, 221, 244, 268]
x = range(len(months))

fig, ax = plt.subplots(figsize=(10, 5))
fig.patch.set_facecolor('#f8f8f6')
ax.set_facecolor('#f8f8f6')

ax.plot(x, sales, color='#5a4fcf', linewidth=2, marker='o',
        markersize=6, markerfacecolor='white', markeredgewidth=2)
ax.fill_between(x, sales, alpha=0.08, color='#5a4fcf')

ax.spines[['top', 'right', 'left']].set_visible(False)
ax.grid(axis='y', linestyle=':', color='#cccccc', linewidth=0.8)
ax.tick_params(colors='#555555', labelsize=10)
ax.set_xticks(x)
ax.set_xticklabels(months)

ax.set_title('2025年度 月別売上推移', fontsize=14, fontweight='bold',
             color='#222222', pad=16)
ax.set_xlabel('月', fontsize=11, color='#555555')
ax.set_ylabel('売上(万円)', fontsize=11, color='#555555')

plt.tight_layout()
plt.show()

▼ 掲載コードに合わせたグラフの表示イメージ

ChatGPT 出力イメージ
Gemini 出力イメージ
Claude 出力イメージ
読んでみて気づいたこと
GPTはMatplotlibのデフォルト設定をほぼそのまま使い、データは6ヶ月分、ラベルは英語。コメントなし。「動作確認してから拡張する」目的には十分で、これをたたき台にするのは合理的です。ただし「このコードで本当に良いですか?」とは聞いてきません。
Geminiは12ヶ月・日本語ラベル・色指定・凡例・グリッドのalphaまで設定し、コメントを番号付きで整理しています。「見せるグラフ」を最初から意識した構成で、コメントが日本語・番号付きなのはチーム共有を想定しているようにも読めます。実務で使えるレベルに一番近いです。
Claudeはfig/axオブジェクトを明示的に使い、スパインの非表示・面塗り・カスタムカラーまで設定しています。「デフォルトを使わない」という選択自体がmatplotlib上級者の書き方で、出力グラフは3つの中で最もデザインが洗練されています。ただしコードの複雑さも上がっているため、コードをそのまま読み解くのは初学者には難しいかもしれません。

実験②:シューティングゲームを作ってもらった

次はHTMLとJavaScriptでシューティングゲームを作るよう依頼しました。仕様の指定は「シューティングゲーム」とだけ。構成・操作感・見た目はすべてAIに委ねています。以下から実際に遊べます。

使ったプロンプト
HTMLとJavaScriptだけでシューティングゲームを作ってください。
ChatGPT GPT-4o / Simple Shooting Game
←→キー:左右移動 / スペース:射撃(縦スクロール型)
Gemini Gemini / Simple Starship Shooter
↑↓キー:移動 / スペース:射撃(横スクロール型 / 敵を逃すと減点)
Claude Claude Sonnet / Space Defender
←→キー:移動 / スペース:射撃(星背景・ライフ制・ゲームオーバーあり)
遊んでみて気づいたこと——そしてコードを読んで気づいたこと
GPTのゲームには実際のバグがあります。縦スクロール型で素早く動く最小構成を出してくるのは確かですが、プレイヤーの左右移動に境界チェックがなく、画面の外に出続けることができます。射撃制限もありません。「動く最小構成」ではなく「最低限の動作しか確認していない構成」と言う方が正確です。プロトタイプとして渡すのは問題ありませんが、そのまま公開するには手を入れる必要があります。
Geminiの設計思想は、3つの中で最も「ゲームらしい」です。横スクロール型という独自路線を選び、弾数上限(5発)・敵を逃すと減点というゲームデザインが加わっています。コードにも上下移動の境界チェックが実装されており、単なる動作確認を超えています。ただしスコア表示をHTMLのdivで実装するなど「見栄え」に寄った構成が、コードの見通しを下げています。
掲載されたClaudeのコードには、境界制限と再開処理があります。プレイヤー移動にMath.max・Math.minの境界クランプ、射撃クールダウン(連打防止)、ライフ制、ゲームオーバー後のリスタート——これらの処理は、このサンプルの操作と状態管理を助けます。ただし、すべての不具合を防ぐものではありません。端末による速度差やタッチ操作は別途確認が必要です。

この掲載例では、GPTのコードは小さく、Claudeのコードには状態管理が多く含まれます。用途に必要な処理があるかを読むことが大切で、この結果だけで次の生成でも同じ差が出るとは言えません。

公開コードを読む:確認手順と直し方

この節では、サイト上で公開している3つのゲームの実装を確認します。生成時の会話を再現する検証ではなく、読者が同じファイルで確認できるコードレビューです。デモにはタッチ操作用の追加コードも含まれるため、生成直後の出力そのものとは区別してください。

確認項目GPTの掲載例Geminiの掲載例Claudeの掲載例
移動左右。境界制限なし上下。移動前に位置を判定左右。Math.min/maxで位置を制限
射撃keydownイベントで発射キー保持中、弾が5個未満なら発射キー保持中、10フレームの間隔で発射
敵を逃したとき削除。スコアは変化しない5点減点。0点未満にはならないライフ減少。0でゲーム終了
タッチ射撃追加コードはキー状態を変えるだけで、発射処理にはつながらないキー状態をupdateで読み取るキー状態をupdateで読み取る

参照するファイル:GPTの掲載デモ/Geminiの掲載デモ/Claudeの掲載デモ。PCでは別タブで開き、ブラウザの「ページのソースを表示」からupdate・shoot・touchstartを探すと、表の根拠を確認できます。

1. 境界チェックは「判定」と「制限」を分けて読む

GPT版のupdateは左キーでplayer.xを6ずつ減らします。初期値180から31回更新すると−6になり、左端を越えます。Gemini版は移動前にplayer.y > 0を確認しますが、上限・下限へ値を固定する処理ではないため、端数がある場合は1回分だけ境界を越える可能性があります。Claude版は移動後の値をMath.maxとMath.minで制限しています。

GPT版を教材として修正するなら、左右移動の直後に次の1行を加えます。右端の上限は「キャンバスの幅−プレイヤーの幅」です。掲載デモは比較用の状態を保持しているため、この修正は適用していません。

player.x = Math.max(0, Math.min(canvas.width - player.width, player.x));

2. 画面にボタンがあっても、入力が処理につながっているか確認する

GPT版のタッチボタンはkeys[' ']をtrueにします。一方、shootを呼ぶのはキーボードのkeydownイベントだけです。状態を変えても発射イベントは発生しないため、タッチの●ボタンからは射撃できません。修正する場合は、タッチ開始時にshootを呼ぶか、ほかの版と同様にupdateでキー状態と発射間隔を処理する必要があります。

3. 10フレームは、どの端末でも同じ秒数ではない

Claude版のcooldownは1更新につき1減ります。毎秒60更新なら10フレームは約0.167秒、120更新なら約0.083秒です。3つとも移動量をフレームごとに加算しているので、画面の更新頻度で速度が変わります。時間を基準にするゲームでは、requestAnimationFrameの時刻から経過秒を求め、移動量と待ち時間に反映します。

自分で確かめる順番

  1. PCでデモを別タブに開き、ゲーム画面をクリックしてから左右または上下キーを押す。
  2. 端まで移動し、画面外への移動を防ぐ処理があるかソースと照合する。
  3. スペースを短く押す場合と長押しする場合を比べ、発射イベントとキー状態の違いを確認する。
  4. スマートフォンでは移動ボタンと射撃ボタンを別々に試す。表示されているだけで動作すると判断しない。
  5. 端末・ブラウザ・確認日・操作・期待した動作・実際の結果を残す。モデル名だけで原因を決めない。

確認対象は2026年10月7日時点の掲載ソースです。ゲームの乱数、フレーム数、入力方式が異なるため、スコアや画面の華やかさだけをAIの性能指標にはできません。これらの確認項目は、別のAIで生成したコードを公開するときにも使えます。

掲載例を用途に合わせて読む

掲載したサンプルには、構成と処理の違いがあります。どれが最強ではなく、目的によって選ぶのが正解だと思っています。

こんなときは…確認する掲載例理由
とりあえず素早く動かしたいChatGPT掲載コードは小さいが、境界や入力の修正が必要
Google系サービスと連携したいGemini連携の可否は公式プランとアカウントで別途確認
文章の精度・ニュアンスを重視Claude中編の文体についての感想。正確さは別途確認
きれいなコードが欲しいClaude掲載ゲームには境界制限・ライフ・再開処理がある
見せるグラフ・実用的な出力Gemini数字・構造・装飾のバランスが良い
汎用的なたたき台が欲しいChatGPTシンプルで改変しやすい
後編のまとめ
シリーズ完結
3回読んで、あなたの答えは出ましたか?
前編で選び方と料金の確認先、中編で文章の個性、後編でコードの品質を比べてきました。「どれが最強」という問いの答えは、正直まだ存在しないと思っています。でも「どれを信頼するか」という問いには、うすいなりの答えが出ました。コードや長文はClaude。情報収集やリアルタイム調査はGemini。最初の一手やラフなアイデア出しはChatGPT。3つを使い分けるのではなく、用途ごとに「メイン」を決めてしまうのが、今のうすいには一番しっくりきています。

このコードレビューの一次資料は、上記の公開デモ3ファイルです。APIの参照:MDN:Math.min/MDN:requestAnimationFrame。参考資料はAPIの意味を確認するためのもので、AIの性能順位を裏付けるものではありません。