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

 5月13日(土)、目が覚めて時計を見ると、なんと午前10時30分。何かの間違いだと思い二度見したがやっぱり10時半だ。私は慌ててベッドから飛び起きた。昨晩は夜中の3時までYouTube(ユーチューブ)を見ていたせいで、完全に寝過ごした。授業は午前10時50分から始まる。私は急いで家を飛び出した。

 走って大学に向かい、教室に着いたのはちょうど11時。息を切らしながらドアを開けると、佐々木先生は既に授業を始めていた。席に着くと、走り疲れからか少し頭がぼーっとする。

 「今日はMatplotlib(マットプロットリブ)を使って、様々な図形やグラフを描画してみましょう」

 スクリーンにはカラフルな線や図形が映し出されている。私はパソコンを立ち上げ、授業の内容に追いつくためにスライドをダウンロードし、パラパラと眺めた。MatplotlibはPythonでグラフなどを描くためのライブラリだという。

 最初はスライドにあるコードを写しながら、線や円を描画してみた。色を変えたり、線のスタイルを変えたり、Matplotlibの基本的な使い方を学ぶにはよい練習なのだと思う。しかし、しばらくすると単調に感じて飽きてきた。

 「Matplotlibを使って何か面白いことができないかな」

 前に作ったオセロのプログラムを思い出した。

 「Matplotlibでオセロの盤面を描画できたら、見た目もよくなるし面白そうだ」

 早速ChatGPTに指示してみる。

このオセロのプログラムのprint_board関数をMatplotlibで描画するように変更して。
了解しました。盤面をMatplotlibで描画するコードを提供します。

 提示されたコードを自分のプログラムに組み込んでみたが、エラーが出て動かない。

コードが動かないんだけど、どうすればいい?

 私はエラーコードを貼り、再びChatGPTに質問した。

 ChatGPTは改善されたコードを提供してくれたが、またしても動かない。こんなことを5回繰り返したが、動く気配すらなかった。私は考え方を少し変えて見ることにした。そもそも、Matplotlibでオセロの盤面は描画できるのだろうか? それを確かめるべく、新たなプロンプトを書いた。

Matplotlibでオセロの初期盤面を描画してみて。

 すると、ChatGPTは新しいコードを提供してくれた。そのコードをColabにコピーして実行してみると、見事にオセロの初期盤面が描画された。その出来に思いがけず「おお、できた!」と声を上げてしまった。Matplotlibでオセロの盤面は描画できるのだ。

 次に、私が指定した盤面を描画できるようにしたいと思い、ChatGPTに聞いてみた。

初期盤面だけじゃなくて、任意の盤面を指定して描画できるようにして。
承知しました。盤面の状態を引数として受け取る関数に修正しますね。

 ChatGPTはそう言うと、新しいコードが提示され、それを試してみると、私が指定した盤面が正しく描画された。

 「これを前に作ったオセロのプログラムに組み込めないかな?」

 そう思い、再びChatGPTに依頼した。

この描画機能を、以下に添付したオセロのゲームプログラムに組み込んでほしいんだけど、どうすればいい?
print_board関数をMatplotlibを使った描画関数に置き換えます。以下が修正したコードです。

 指示に従ってコードを編集し、実行してみると、今度は見事に動作した。ゲームを進めるたびに、盤面がグラフィカルに更新されていく。視覚的に状況を確認できるので、操作が格段に楽になった。

 「やった、これでゲームの進行が見やすくなった!」

「学会で発表してみないか?」

 授業が終わり、パソコンを片付けようとしていると、佐々木先生が別の先生と一緒に近づいてきた。その先生は、40歳前後に見える佐々木先生と比べてかなり年上で、いかにも教授という感じだが、優しそうな目をしている。佐々木先生が話しかける。

 「この学生がすごいんですよ。ChatGPTを使ってオセロを作ったんです。伊藤先生、見てください。」

 私は突然注目を浴びて少し戸惑ったが、佐々木先生と伊藤先生に促され、オセロのプログラムについて即興で説明を試みた。

 「実は、前に作ったオセロのプログラムを改良し、Matplotlibを使ってグラフィカルに表示できないか試してみたんです」

 私はプログラムを実行してみせた。盤面がカラフルに描画され、石を置くたびに更新されていく様子に、2人の先生は驚いた表情を浮かべた。

 「これはすごいね。Matplotlibでここまでできるとは思わなかった」

 と佐々木先生が感心してくれる。

 「どうやって作ったの?」と伊藤先生が興味深そうに尋ねてくる。

 「最初はテキストベースのオセロを作っていたのですが、見た目が味気ないなと思って。そこで、ChatGPTに相談してみたんです」

 私はChatGPTとのやり取りの履歴を画面に表示した。それを見て伊藤先生が言った。

 「なるほど、ChatGPTと相談しながらプログラムを書いて、さらにエラーが出たときも自分で解決できるのか」

 「そうですね。ChatGPTに聞きながら作ったら結構うまくできました」

 私は作り方について、5分ほどかけて具体的に説明した。すると、伊藤先生が言った。

 「来月、学会があるんだ。ぜひ君も参加して、このオセロのプログラムを発表してみないか?」

(写真:YUTO PHOTOGRAPHER/stock.adobe.com)
(写真:YUTO PHOTOGRAPHER/stock.adobe.com)

(次回に続く)

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

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