――大学4年の春。授業でChatGPTを知った私は、宿題をサボるためにその活用法を編み出した。プログラミングにも使えることを知り、出来心で「#100日チャレンジ」に取り組み始めた。毎日1本、新しいアプリ(作品)を作り、X(旧ツイッター)に投稿するというものだ。暇つぶしで始めたそれは、過酷な挑戦であると同時に、日常的な興味と学び、そして飛躍をもたらした――。Z世代の著者によるAI駆動型プログラミング学習探究記『#100日チャレンジ 毎日連続100本アプリを作ったら人生が変わった』(大塚あみ著)から、100日チャレンジの前日譚「ステップ0 プロローグ」編を抜粋・再編集してお届けします。その第3回。

 4月29日(土)、私は少し遅れそうになりながらも急いでワークステーション室に向かっていた。授業の開始は午前10時50分だったが、時計を見ると既に10時52分。まだ授業が始まったばかりだろうと自分に言い聞かせながら、少し焦った気持ちで教室のドアをそっと開けた。中に入ると、佐々木先生はまだ準備中で、他の学生たちは静かに自分のパソコンを立ち上げていた。どうやらセーフのようだ。私はホッとしながら、いつもの席に着いた。

 しばらくして佐々木先生が教壇に立ち、今日の授業が始まる。先生は早速、プロジェクターでスクリーンに映し出した画面を指しながら説明し始めた。

 「今日はPython(パイソン)を使って簡単なプログラムを作成するところから始めます」

 前方のスクリーンに映し出されたタイトルには、「GoogleColaboratory(グーグルコラボラトリー)で学ぶPythonプログラミング」と書かれている。どうやら今日はオンライン上でPythonを実行できるツール「Colaboratory 以下Colab(コラボ)」を活用した授業のようだ。Colabを使えば、ウェブブラウザ上で直接Pythonコード、言い換えるとプログラミング言語のPythonを使って書いたプログラム、を入力して実行できるため、パソコンに複雑な設定をする必要がない。

 佐々木先生は全員に向かってColabへのログイン手順を説明し始めた。私はその説明を聞きながら手元のパソコンを操作し、指示に従ってColabにログインしてみる。先生が説明していた通り、手順はとても簡単で、すぐにPythonの実行環境が立ち上がった。「これなら、すぐに使えそうだな」

 佐々木先生が指示を出す。

 「まずは簡単なPythonのコードを書いてみましょう」

 佐々木先生がスクリーンに投影したサンプルコードは、変数の代入や四則演算を行う基本的なものだった。私はその内容をパソコンに打ち込み、すぐに実行してみる。コードを実行すると、指定した計算結果が画面に表示され、とくに問題なく動作していることが確認できた。

 私は以前、VBA(ブイビーエー=Visual Basic for Applications)というExcel(エクセル)を自動化するプログラミング言語の授業を受けたことがある。簡単なプログラムや入力フォームを作ったのだ。そのため、ColabもPythonもとても簡単に感じ、すぐに退屈し始めた。

 そのときに思い出したのは、以前VBAで作成した数当てゲームだった。あのときは、数字をランダムに生成して、それをプレイヤーが当てるというシンプルなゲームを作ったけれど、完成までにかなりの時間がかかった。構文の正しい綴(つづ)りなんて覚えておらず、いちいち調べ、プログラムの誤りであるバグが生じたらまた確認する、といったことを繰り返したため、2時間くらいかかったのだ。しかし、今回は違う。私の手元にはChatGPTがある。

 「もしかして、ChatGPTは数当てゲームなら簡単に作れるのでは?」

 私は先生の説明をそっちのけでChatGPTを起動し、次のようなプロンプトを打ち込んだ。

数当てゲームをPythonで作って。環境はColaboratory。

 すると、あっという間にコードが表示された。ゲーム内容は、コンピューターが1から100までのランダムな数字を生成し、それをプレイヤーが当てるというものだ。数字を予想するたびに「もっと大きい」「もっと小さい」とヒントが出るようになっている。生成されたコードをColabにコピペして実行してみたところ、何の問題もなく動いた。私は驚きつつも感心してしまった。前にVBAで同じゲームを手作業で作ったときの苦労を思い出しながら。

「たった数分でできるなんて……」

 数当てゲームがうまく動作したことで、私はすっかり気分をよくしていた。授業の残り時間はまだ1時間ほどあった。せっかくだから暇つぶしにもうひとつ何か作ろうと考え、ふとオセロが頭に浮かんだ。

 「オセロのような複雑なゲームも、ChatGPTなら作れるだろうか?」

(写真:Manovector/stock.adobe.com)
(写真:Manovector/stock.adobe.com)

「play_game」関数を実行すると…

オセロ風ゲームをPythonで作って。環境はColaboratory。
分かりました。まずは基本的な関数を作成します。これで盤面を初期化し、表示し、プレイヤーが石を置けるようにします。

 ChatGPTは関数を3つ出力した。「initialize_board」、「print_board」、「make_move」という名前だ。しかし、これらの関数をColabで実行したものの、動かなかった。私は尋ねた。

動かないんだけど……。
すみません、これではまだ動かないです。次に、プレイヤーのターンを交互に切り替え、石を置くロジックを追加します。この関数で、盤面を表示し、プレイヤーに入力を促しながら進行させます。

 ChatGPTはそう言うと、「play_game」関数を出力した。

これで、オセロの基本的なルールに従って動くはずです。石を置ける場所も正しく判定されるようになりました。

 私が「play_game」関数を実行すると、盤面には文字列が現れた。盤面は●と○で表現され、プレイヤーは手動で座標を入力して石を置く形式だ。画面上には8×8の盤面が表示され、手を進めるごとに盤面の状況が更新されていく。派手なグラフィックスこそないが、基本的なオセロのルールに従って進行するゲームだった。

 私は「おお、動いた!」と小さな声で呟き、しばらく盤面を見つめていた。思ったよりも簡単に動かせたことに驚きと感動があった。VBAで数当てゲームを作ったときの苦労をまた思い出し、技術の進歩に感謝せずにはいられなかった。

画像のクリックで拡大表示

 次の瞬間、背後から声が聞こえた。

 「何が動いたんだ?」

 振り返ると、佐々木先生が私の後ろに立っていた。私は慌てて画面を隠そうとしたが、もう遅い。先生の視線は私のパソコンの画面を凝視していた。

 「いや、その、if文の練習をしていて……」

 私はごまかすように答えたが、先生はニヤリと笑った。

 「オセロを作ったのか? ちょっと動かしてみてよ」

 私は数字を2つ入力すると、白のターンに移った。

 「これはすごい。ChatGPTに作らせたのか?」

 「はい。作るように指示して、いろいろと触っていたらできました」

 「いくつか授業を持っているけど、授業中にゲームを作った学生は初めて見た。また改善したら見せてよ」

 予想外の展開に戸惑い、どう反応すればいいのか分からなかった。

 「はい、また作ってみます!」

 先生は教室の前に戻り、授業を再開した。

「置ける場所を教えて」

 作ったゲームを試していくうちに、ある問題に気づいた。間違った場所に石を置こうとすると、プログラムがエラーを出して止まってしまうのだ。そのたびにプログラムを再実行しなければならず、面倒だ。「これではスムーズに遊べないな」

 私は、再びChatGPTに助けを求めることにした。

置ける場所を教えてくれるようにしてほしい。

 ChatGPTからすぐに返信があった。

承知しました。置ける場所を判定するために、is_valid_moveとget_valid_movesという関数を作成します。
それらの関数をどうやって既存のコードに組み込めばいいの?

 尋ねると、ChatGPTは詳細な説明とともに新しいplay_game関数のコードを送ってくれた。

play_game関数を修正して、置ける場所を表示し、無効な入力を防ぐようにしました。これで快適にゲームを進められるはずです。

 直ちにそのコードをColabにコピーし、実行してみた。しかし、またエラーが発生した。

NameError: name 'is_valid_move' is not definedって出るんだけど、どうすればいい?

 エラーメッセージをそのまま送ると、ChatGPTはすぐに対応してくれた。

申し訳ありません。先ほどのコードに関数の定義が抜けていました。以下に完全なコードを提供します。

 再びコードを試してみたが、今度は別のエラーが出た。

TypeError: 'NoneType' object is not subscriptableって表示された。なんで?

 ChatGPTが答える。

それは関数が正しい値を返していないためです。return文を追加する必要があります。修正したコードを送りますので、再度お試しください。

 何度かこうしたやり取りを繰り返し、ようやくプログラムがエラーなく動くようになった。石を置ける場所がリストとして表示され、間違った場所を選択すると「その場所には置けません」とメッセージが出るようになった。「これで間違えてもプログラムが止まらない!」

 そのとき、授業終了のチャイムが鳴った。佐々木先生が「今日はここまで。みなさん、お疲れ様でした」と声をかける。私は急いでノートパソコンを片付け、教室を出た。校舎の横をゆっくりと歩く。心地よい春の風が頬をなでた。

(次回に続く)

怠け者の大学4年生がChatGPTに出会い、ノリでプログラミングに取り組んだら、教授に褒められ、海外論文が認められ、ソフトウェアエンジニアとして就職できた――。Z世代の著者によるAI駆動型プログラミング学習探究記。

大塚あみ著、日経BP、1980円(税込み)