🧠

GPT-4を䜿っお ぷよぷよ 䜜っおみたずきの感想

に公開
2023/03/19

以䞋のツむヌトに反響があったので、どういう感じで䜜っおいったかず感想をメモ

https://twitter.com/corocn/status/1636191538182238214

芁玄

この蚘事ではAIのChatGPTGPT-4を䜿甚しお、JavaScriptでぷよぷよを䜜成する手法に぀いお玹介しおいたす。最初の䟝頌は「JavaScriptで動くぷよぷよのコヌドを曞いお」ずされおおり、最初に生成されたコヌドは䞍完党であったずのこずです。

その埌、AI偎からは、1.ぷよの衝突怜出、2.プレむダヌの入力によるぷよの操䜜、3.ぷよの回転の順に実装するように指瀺があり、埐々に改善を斜しおいきたした。

短時間で開発を終えるこずができるため、゚ンゞニアずしおのスキルや芁求、䞍具合の蚀語化胜力があれば有効だずされおいたす。珟時点では優秀なプログラミングのアシスタントずしお機胜しおいたす。

゚ンゞニアが盎面するストレスや䞍安を軜枛できる可胜性がありたす。䞀䟋ずしお、短期間で開発を終えるこずができるため、長期間の開発に䌎うモチベヌションの䜎䞋を防ぐこずができたす。

いく぀かの課題も存圚したす。AIが生成するコヌドには、゚ンゞニアのスキルが必芁な郚分が含たれおいる堎合があるため、゚ンゞニアリングのスキルがない人が利甚する堎合は、コヌドの改良や䞍具合の解決が困難になるこずがありたす。

※䞊蚘芁玄は Notion AI の芁玄をベヌスに、筆者が軜く添削したした

やったこず

  • ChatGPTGPT-4で ぷよぷよを䜜った
  • HTML, CSS, JavaScript を䜿った
  • 䜜成環境は codepen を䜿った

最初の䟝頌

最初の䟝頌は「JavaScriptで動くぷよぷよのコヌドを曞いお」のみ

  • 枠ず䞊から䞋に萜ちおいくだけのコヌドが生成された
  • ブロックは枠を超えお䞋に突き抜けお消えおしたう

ただ、このコヌドが䞍完党であるこずも説明されおいた。

AI曰く「次のコヌドを远加するこずで改善できたす」ずのこず

1. ぷよの衝突怜出
2. プレむダヌの入力によるぷよの操䜜
3. ぷよの回転

この時点で、最䞋郚で止たるずいう凊理も “衝突怜出” に含たれるこずを私は理解した

実際の察話 䞀郚分

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ぷよぷよ</title>
    <style>
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            background-color: #222;
            margin: 0;
        }
        canvas {
            border: 1px solid #fff;
        }
    </style>
</head>
<body>
    <canvas id="puyopuyo" width="320" height="640"></canvas>
    <script src="puyopuyo.js"></script>
</body>
</html>

次に、puyopuyo.jsファむルを䜜成し、以䞋のコヌドを远加しおください。

const canvas = document.getElementById('puyopuyo');
const ctx = canvas.getContext('2d');
const blockSize = 32;
const columns = 10;
const rows = 20;

const colors = [
    null,
    'red',
    'blue',
    'yellow',
    'green',
    'purple',
    'cyan'
];

class Puyo {
    constructor(x, y, color) {
        this.x = x;
        this.y = y;
        this.color = color;
    }

    draw() {
        ctx.fillStyle = colors[this.color];
        ctx.fillRect(this.x * blockSize, this.y * blockSize, blockSize, blockSize);
    }
}

class PuyoPair {
    constructor() {
        this.puyos = [
            new Puyo(4, 0, Math.floor(Math.random() * (colors.length - 1)) + 1),
            new Puyo(5, 0, Math.floor(Math.random() * (colors.length - 1)) + 1)
        ];
        this.direction = 0;
    }

    draw() {
        this.puyos.forEach(puyo => puyo.draw());
    }
}

let pair = new PuyoPair();
let dropCounter = 0;
let dropInterval = 1000;

function update(time = 0) {
    dropCounter += time;
    if (dropCounter > dropInterval) {
        pair.puyos[0].y++;
        pair.puyos[1].y++;
        dropCounter = 0;
    }
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    pair.draw();
    requestAnimationFrame(update);
}

update();

...ずいった感じ

その埌の流れ

  • 前述した画像を芋る通り、AIが最初にCoTchain-of-thought的に呜什しろず瀺唆しおきたので、順番に呜什しおいった
  • 1、2、3の実装を順番に呜什し、生成されたコヌドをコピペしお挙動を確認、想定しおない挙動をしたら蚀語化し、AIにフィヌドバックした
  • 連鎖刀定や、浮いおいるぷよぷよを萜䞋する凊理などは1回では完璧なコヌドにならず、数回の返答を芁した
  • 完党にGPT-4が生成したわけではなく、98%コピペ、2%の修正
  • 最終的に20〜30察話で完成、所芁時間は1時間皋床

%の修正はどこで行ったか

  1. 回答を続けるうちに倉数が眮き換わり、VARIABLE is not defined の゚ラヌが出おしたう -> 人間が手で曞き換え
  • columns ずいう倉数名が、cols に眮き換わっお生成される
  • rows ずいう倉数名が、 boardHeight になっお生成される

  1. ぷよぷよの色が6色だったので、4色に倉曎 -> 䞀郚コヌドを削陀
  • コヌド芋ればすぐ分かったのでAIには聞かなかった
  • 色の配列から削っただけ
  1. 連鎖刀定の順番がおかしく、その郚分だけロゞックを盎した -> ロゞックのコピペ
  • すでにあるロゞックを別のタむミングで呌ぶようにコピペした
  • もうちょっずAIに頌っおみおもよかったかもしれない。

修正ずいっおもコヌドを削ったり、コピペしたりで枈むレベルだった。コヌドを読むずころで䞀定頭は䜿った。もっずAIに任せちゃっおもいいが、䞍具合が理解できれば人間が盎したほうが速いケヌスもある。

感想

立ち䞊がりが楜

  • 「やる気は最初からあるものではなく、䜜業に着手するず自然ず湧いおくるもの」らしい
  • 立ち䞊がりが楜だず、やる気が出るたでがはやくなる

やる気がなくなる前に完成する

  • 䟋えば個人開発で週末䜜業しお1ヶ月かかるず、埐々にやる気がなくなっおくる少なくずも自分は
  • やる気がれロになる前に、ある皋床のものが完成する
  • 短時間でできるこずが分かっおいるので、䜜業に着手しやすくなる

芁求や䞍具合を適切に䌝える蚀語化胜力が必芁

  • なんか思ったような挙動にならないが、AIにどう䌝えたらいいかわからない状況が発生する
  • 経隓から「なんかこの関数が怪しい」ず䌝えおあげるず盎しおくれたり

珟時点では優秀なプログラミングのアシスタント

  • 完璧なコヌドが生成されるわけではないので手盎しは必芁
  • そのずきに既存の゚ンゞニアリングのスキルが必芁になる
  • 前述した芁求や挙動を適切に蚀語化できる人はうたく波に乗れる

廃業するず嘆いおいる時間があれば觊っおみるずいい

  • 1時間でぷよぷよぐらいなら䜜れる
  • 盎近の䞍安は解消されるだろう
  • ただし1幎埌にどうなっおるかは正盎分からない 

ただしばらく仕事はあるなあ、、ず思い぀぀も結構な衝撃だった。もずもず問題解決できるなら手段はなんでもいい掟の人間なので、軞足を移しおいくのは問題ないが、どうなるかなあ。

䞍安はあり぀぀も色々觊っおみるのは楜しいですね

Discussion