GPT-5が出ましたね。コーディング能力もめっちゃあがってる!みたいなことが書いてあるので、いろいろ試してみました。
開発者向け GPT-5 のご紹介 | OpenAI
結論を書いておくと、GPT-5のコーディング能力は確かにあがってSonnet 4と同等くらいになってるけど、ChatGPTというサービスがコーディングツールとして使い物にならなくなっていました。
チャットUIでコード書くならClaude。
マリオ
なんかマリオができるという話だったので、やってみました。
javaのswingでリアルなマリオのようなゲームを作って。
1ソースで完結して。
背景もかわいいほうがいい。
だいぶいいですね。背景かわいいし、スコア表示もゲームっぽい。
GPT-4oではこうだったので、かわいさが増してます。敵もコインもなくジャンプするだけのゲームだったし。
ちなみにSonnet 4。敵を踏んで潰すのもできてます。GPT-5版では自分が死ぬ。かわいさではちょっと負けてます。
ということで、GPT-5ではコーディング能力だけじゃなくかわいさも理解するようになったのか?と期待が高まったのでした。
ドラゴンゲーム
さて「ワイヤフレームのドラゴンと勇者が戦うゲームを作ってほしい」とやったらこれ。ドラゴンも勇者もない。
Claude Sonnet 4ではこうでした。ドラゴンかっこいい、勇者が剣を振るのかわいい。
プロンプトはこう
Javaのswingで、ワイヤフレームのドラゴンと勇者が戦うゲームを作ってほしい。
操作は2dで、表示は3dで。
ハルシネーションが減った代わりに創造性もなくなったという話がありますが、こういうところにも影響してるんだろうか。指示がない限りは最低限の表現にしてそう。
他のゲームでも、ちょっとそっけない感じがありました。
なんか、マリオだけちゃんとやってる感。
砂時計
「それっぽく砂が動く砂時計をjavaのswingで作って」として砂時計を作ってもらいました。
そうすると、容器からはみだして変な感じに。
これはガチのシミュレーションをやろうとして制御できてない感じで、これは仕方ない。
コーディング能力は高そう。
OpenRouterにあったHorizon betaで試したときと同じなので、このことからもHorizon betaがGPT-5のステルスモデルだったことがわかります。
手作業でコードを修正して、はみ出した判定を処理の最後にやると、容器からはみ出ることはなくなりました。
どうやら離散要素法という手法らしいので、「離散要素法を使って砂時計のシミュレーションをjavaのswingで作って」とやってみたら、一発でこんな感じに。クビレを抵抗なく通り過ぎな気がする。
Sonnetでも同じ感じになりました。
Sonnet 4で「それっぽく砂が動く砂時計をjavaのswingで作って」としたときはこれでした。
一番砂時計っぽい動きをするけど、かなり簡易な処理ですね。
なので、これは引き分けか、最初からガチシミュレーションしようとしてたGPT-5の勝ちか。
パストレーシング
光の動きをシミュレーションするCGの手法、パストレーシングもできるんでは、と試してみました。
パストレースでガラス玉となにかポリゴンを描画するJavaプログラムを作って
天地が逆だったのを調整してもらったけど、最初からオブジェクトが全部画角に入っててえらい。
ハイライトがないし、レンズの効果もないし、なんか光源の設定か処理がおかしいかな?
Sonnet 4に作ってもらったらこう。パストレースといえばこれ、というコーネルボックスになってるし。
金属マテリアルも追加してもらった。
処理過程も表示してくれてかっこいい。これはサンプリングを減らしてるけど、このザラツキがパストレーシング。
これはSonnet 4の勝ちかなぁ。
このブログのタイトルのところにも、Javaで書いたパストレーサーで出したCG使ってますが、あたたかみのある手作業で結構時間をかけて書いてます。それが、AIさんに指示あたえるだけで書けてしまうなんて、という驚き。
キャビティ流れ
さて、パストレーシングができるなら、流体計算もできるのかなとやってみました。定番のキャビティ流れ。GPT-4oではできなかったんですよねぇ。
川の底に四角いくぼみ(=cavity)があるときに、そのくぼみの中でどんな流れになるかというシミュレーションです。
手法を明示すると出してくれやすいようなので、プロンプトに有限要素法を指定。
JavaのSwingでキャビティ流れのシミュレーションを有限要素法を使って実装して。
GPT-5ではこんな感じ。時間発展じゃなく定常状態になったところを出してるみたい。けど、なんかちょっと違うかな。
動いてるように見えるかもしれませんが、PNG画像の静止画です。
時間発展するバージョンを出してもらおうと思ったけど、爆発。
爆発対策をしてもらおうと思ったら、最後に書いた、コード出す出す詐欺にあってしまった。
そして、Sonnet 4。ちゃんと出してくれた。
Sonnet 3.7のときはこう。ちゃんと動いてそう。4になって表現とかが進化してるかな。
ところでSonnet 4にHTML+JSを出してもらった。
これまで見ないふりをしてましたが、Java+Swingで出すよりHTML+JSで出すほうが圧倒的にいいUIを作って、動きもちゃんとしてがち。。。
ちなみにGPT-oss 20B。それっぽいけどなんか違う。16GBで動くモデルでここまでできるのもすごい。
ChatGPTはコーディングツールとして使い物にならない
ということでまとめ。コーディング能力は確かにかなりあがってる。今までできなかった実装ができるようになってる。
でも、ChatGPTというサービスではコーディングできなくなっていました。
Timerの参照のエラーはGPT-5でも健在。というか、指示しなかったら必ずこれでコケる。まあ、これはプロンプトで指定すれば問題ない。
コードの修正したときに、コメントが全部消えがち。あと、バグ修正したときに関係ないところも変わってるというのもよくあった。メソッド内に3つあった処理が1つになって消えてる、とか。信用できない。
完全なコードを出してと言ってるのに省略することも多すぎ。Canvasモードで省略してしまうので、中途半端なコードが残ってしまうことも。このあたりはモデルの問題だけではなく、ツール含めたUIの問題でもありそう。
コードの問題点を指摘しても、単に問題点と解決策だけを提示して解決コードを出さないこともある。
また、更新しましたといいつつ更新されてないことも多い。
そのままコード出さずにFreeプランの制限に達したりする。
これ、もう無駄に対話を増やしてリミットを早くさせようとしてるとしか思えない。
ということで、GPT-5のモデル性能の問題とは別に、ChatGPTというサービスがコーディングのツールとして使い物にならなくなっています。
挙動には関係ないけど、コンパイルエラーのことを「Javaが怒っています」と言ってますね。こういうスラングが取り込まれてるのはちょっとおもしろい。
お気に入りの表現なんだろうか。
※ コンテキストウィンドウが無料だと8Kになったからという話があります。
でもこれは4oのときから変わってなさそう。