Gemini派の筆者が、同じプロンプトでChatGPTに負けを認めた理由【Python AIコード生成比較】

Gemini ProとChatGPTのPython画像認識AIコード生成比較のアイキャッチ画像。「Gemini派の筆者がChatGPTに完全敗北!?」の文字とVSの対決構図。 Python

仕事で書くコードも「CopilotよりGemini」と言うほど、日頃からGeminiを愛用しGemini Pro(思考モード)を使っている筆者。
今回は久々に、ChatGPT(無料版)にGemini Proと「全く同じ指示(プロンプト)」を出してみたらどうなるか検証してみました。

正直、愛用しているGeminiの圧勝を期待していたのですが、結果はまさかの展開に…!

今回の検証条件(プロンプトと環境)

今回使用したプロンプトは以下の通りです。

あなたは「初心者に教えるのが非常に上手な、一流のPython/AIエンジニア」です。

Google Colabでそのままコピペして動作する、scikit-learnを使った画像分類(手書き数字認識など)のPythonコードを作成してください。

【条件】
1. 初心者が途中で迷わないよう、コード内に丁寧な日本語の解説コメントを入れてください。
2. 実行結果として、正解率(Accuracy)だけでなく、実際に画像と予測結果が表示されるようなコードにしてください。
3. コードの後に、「このコードで何が行われているか」のポイントをステップ順に簡潔に解説してください。

評価基準

  • Colabで一発で動くか?
  • コメントは親切か?
  • 初心者に寄り添っているか?

Gemini Proの回答:Colabとの相性は抜群だが…

Geminiの出力結果が以下となります。

Google Colabでコードを見る(Gemini版)

# ==========================================

# 1. 必要なライブラリの読み込み

# ==========================================

import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# ==========================================

# 2. データの準備(手書き数字データの読み込み)

# ==========================================

# scikit-learnに用意されている8x8ピクセルの手書き数字データ(0〜9)を使用します

digits = load_digits()

# X: 画像のピクセルデータ(特徴量), y: 正解の数字(目的変数)

X = digits.data
y = digits.target

# ==========================================

# 3. データを「学習用」と「テスト用」に分割

# ==========================================

# 全データの80%をAIの学習に、残り20%を最後の「試験(テスト)」に使います

X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)

# ==========================================

# 4. AIモデルの作成と学習

# ==========================================

# 初心者でも扱いやすく精度が出やすい「ランダムフォレスト」というアルゴリズムを採用します

model = RandomForestClassifier(random_state=42)

# .fit() で学習を実行します(パターンと正解の関係を覚える)

model.fit(X_train, y_train)

# ==========================================

# 5. テストデータを使った予測と正解率(Accuracy)の算出

# ==========================================

# 未知のテストデータに対して予測を行います

y_pred = model.predict(X_test)

# 正解率(Accuracy)を計算して表示

accuracy = accuracy_score(y_test, y_pred)
print(f"----------------------------------------")
print(f"モデルの正解率(Accuracy): {accuracy * 100:.2f}%")
print(f"----------------------------------------\n")

# ==========================================

# 6. 実際の画像と予測結果の可視化

# ==========================================

# 10枚分の結果を並べて表示するキャンバスを作成

fig, axes = plt.subplots(2, 5, figsize=(10, 5))
axes = axes.ravel()

for i in range(10):
# データ(64個の数値リスト)を「8×8の2次元画像」の形に戻して表示
axes[i].imshow(X_test[i].reshape(8, 8), cmap='gray_r')

predicted_label = y_pred[i]
true_label = y_test[i]

# 予測が当たっていれば「緑色」、間違っていれば「赤色」でタイトルを表示
color = 'green' if predicted_label == true_label else 'red'
axes[i].set_title(f"Pred: {predicted_label}\n(True: {true_label})", color=color)
axes[i].axis('off')  # 縦横の目盛りを非表示にする

plt.tight_layout()
plt.show()

Colabでの実行結果(Gemini)

さらに、Geminiはサンプルコードに対して「処理のステップ解説」を5つのステップで説明してくれました。

Geminiのステップ解説

1. データの準備(Step 1): load_digits() で手書き数字の画像データを呼び出しています。このデータは1枚が「8×8=64ピクセル」の小さな画像で、それぞれのピクセルの明るさが0〜16の数値として記録されています。

2. 学習用とテスト用の分割(Step 2): train_test_split() を使い、データを学習用(80%)とテスト用(20%)に切り分けます。

3. モデルの作成と学習(Step 3): 分類器として「ランダムフォレスト」を使っています。model.fit() を呼び出すことでピクセルの数値パターンと数字の関係性を学習します。

4. 予測と評価(Step 4): 学習を終えたモデルにテストデータを入力して model.predict() で予測させ、正解率(Accuracy)を出しています。

5. 予測結果の画像表示(Step 5): matplotlib を使ってテストデータの画像を可視化し、予測値(Pred)と実際の答え(True)を並べて表示しています。

Geminiの評価

  1. Colabで一発で問題なく動きました。
  2. スッキリとしたコードで、何のためのコードかを簡潔に説明してくれています。
  3. 初心者に寄り添っているか? → 正直、初心者や非ITエンジニアがこの解説だけで完全に理解できるかというと疑問が残ります。
    用語の説明が少し専門的で、再度自分で調べる必要があると感じました。

まずは愛用しているGeminiを基準として、次にChatGPTに同じ指示を出してみます。

ChatGPTの回答:あのボタンと親切すぎるコメント、「応用編」の衝撃

ChatGPTが出してくれたコードと解説が以下となります。

Google Colabでコードを見る(ChatGPT版)

# ==========================================
# 手書き数字認識AI(scikit-learn版)
# Google Colabでそのまま実行できます
# ==========================================

# ------------------------------------------
# 1. 必要なライブラリを読み込む
# ------------------------------------------
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

# ------------------------------------------
# 2. 手書き数字データを読み込む
# ------------------------------------------
digits = load_digits()
X = digits.data
y = digits.target

print("画像データの数:", len(X))
print("画像サイズ:", digits.images[0].shape)

# ------------------------------------------
# 3. データを学習用とテスト用に分割する
# ------------------------------------------
X_train, X_test, y_train, y_test = train_test_split(
    X,              # 入力データ
    y,              # 正解ラベル
    test_size=0.2,  # 20%をテスト用にする
    random_state=42 # 毎回同じ結果になるよう固定
)

# ------------------------------------------
# 4. AIモデルを作成する
# ------------------------------------------
model = SVC(kernel="linear")

# ------------------------------------------
# 5. AIに画像を覚えさせる(学習)
# ------------------------------------------
print("AIの学習を開始します...")
model.fit(X_train, y_train)
print("学習完了!")

# ------------------------------------------
# 6. テスト画像で予測する
# ------------------------------------------
y_pred = model.predict(X_test)

# ------------------------------------------
# 7. 正解率 Accuracy を表示する
# ------------------------------------------
accuracy = accuracy_score(y_test, y_pred)
print("--------------------------------")
print("AIの正解率(Accuracy):")
print(f"{accuracy * 100:.2f}%")
print("--------------------------------")

# ------------------------------------------
# 8. 実際の画像とAIの予測結果を見る
# ------------------------------------------
show_number = 10
plt.figure(figsize=(15, 6))

for i in range(show_number):
    plt.subplot(2, 5, i + 1)
    plt.imshow(X_test[i].reshape(8, 8), cmap="gray")
    plt.title(f"予測:{y_pred[i]}\n正解:{y_test[i]}")
    plt.axis("off")

plt.tight_layout()
plt.show()

ここで、ChatGPTの回答には4つの「神ポイント」がありました。

【神ポイント1】ChatGPT内でコードがそのまま動くボタン

コード生成後、枠の右上に出てきた「実行する」ボタン。
好奇心で押してみると、なんとColabを開くことなくChatGPTの画面内でコードが実行され、グラフや画像出力までその場で完了してしまいました!

【神ポイント2】事前のアウトプット予告

コードを提示する前に「このコードを実行すると何が確認できるか」をチェックリスト形式で解説してくれました。

  • AIモデルの学習
  • Accuracy(正解率)の表示
  • 実際の手書き画像表示
  • AIの予測結果表示と正解ラベルとの比較

Colabでの実行結果(Chat GPT)

【神ポイント3】初心者に圧倒的に寄り添ったステップ解説

ChatGPTのステップ解説は、専門用語をかみ砕き、比喩を使って説明してくれました。

  • ① データを準備する: [0 0 5 12 15 ...] のような数字の濃さ(ピクセル情報)がデータになります。
  • ② データを分割する: 見たことがない画像でも正しく判断できるか確認するために8:2に分けます。
  • ③ AIモデルを作る: 今回は「この画像は0っぽい」「これは7っぽい」という境界線を学習するSVCを使用します。
  • ⑥ Accuracy(正解率)を見る: 正解数 ÷ 全問題数 を計算します。100枚中約97枚正解という意味です。

【神ポイント4】頼んでいない「応用編」までのセット提案

さらに感動したのが、コード出力の最後に「この基本形が将来どう発展するか」という応用事例まで提示してくれた点です。

  • 猫・犬の画像分類
  • 工場の異常検知
  • 顔認識 / 医療画像分析

ChatGPTの評価

Colabへ移動しなくてもChatGPT内で実行結果が見られる驚きから始まり、コード内のコメント密度・ステップ解説の分かりやすさ、そして「次に繋がる応用展開」の提示まで、初心者に寄り添う点においては完全にChatGPTの軍配でした。

この結果をGeminiに伝えたところ、*「Geminiとしては『く、悔しい……!』の一言に尽きます(笑)」*と返信してくれました。

【結論】非ITエンジニア・初心者はどう使い分けるべき?

  • スピーディにコードの骨組みが欲しい時Gemini(サクッと動くコードだけをコピペしたい場合)
  • コードの仕組みを丁寧に学びながら応用まで進みたい時ChatGPT(なぜこのコードなのかを理解しながら作成したい場合)

「AIにコードを書かせる時代」の学習のコツ

もし、今AIがいなかったら……。

筆者の場合は日常的にGeminiとよく話しているのですが、もしGeminiやCopilotがいなければと考えるとゾッとします。

なぜなら、ネット検索でコードを探しても自分の環境にぴったり合ったものが見つからず、仕組みを完全に理解しないままコードを書くことはできなかったため、結局「基礎から勉強しないといけない」という壁にぶつかっていたからです。

しかし、筆者の本業は非ITエンジニアであり、コードを綺麗に書くことが目的ではありません。

何のためにコードを書くかと言えば、「CAD操作の効率化」や「設計現場のDX化」のためです。コードを基礎から学ぶとなると莫大な時間がかかりますし、モチベーションが続くかも不安です。何より、非ITエンジニアにとってプログラミングの基礎勉強を就業時間に割り当ててもらえることなど、現実的にはほぼありません。

1から文法を覚えるな!CADの「ルール駆動」と同じ感覚でいい

では、時間のない私たちが「AIにコードを書かせる時代」に意識すべき学習のコツとは何でしょうか?

それは、「プログラミングを学ぶ」のではなく、「CADのルール駆動(パラメトリック設計)と同じ感覚でAIに仕様を伝える」ということです。

たとえば、CADの自動化(iLogicなど)で「軸径のパラメータが変わったら、穴径とプレート厚みも連動して変更する」という骨組み(スケルトン)を組む作業を思い出してください。
私たちは文法を丸暗記しているのではなく、「どういう入力に対して、どういう結果を出したいか」というルール(仕様)を考えていますよね。

AIにプログラミングをさせる感覚も、これと全く同じです。

  • 従来の学習:文法や構文、構文エラーの対処法を1から暗記する(挫折の元)
  • これからの学習:「どんな入力データを渡し、どう処理して、どう出力したいか」のルールをAIに指示する

綺麗なコードを書くのはAIの仕事です。
私たち非ITエンジニアが学ぶべきは、コードの書き方ではなく
「現場の課題をどう整理して、AIにルールとして伝えるか(プロンプト化)」
という設計思考だけなのです。

5. まとめ&次のステップ

単発のコード生成だけでなく、AIの裏側にある仕組みやAIを相棒にする基礎体力を体系的に知りたい方には、以下のステップがおすすめです。

タイトルとURLをコピーしました