第14回 生成AI(Gemini)を使ったプログラミング

Colabノートブックにのコードセルを追加すると、毎回「コーディングを開始するか、AIで生成します」と表示される。あれ、気になりませんでした(全然ならなかった人は好奇心が足りてない)? そう、ColabにはGemini君という生成AIが常駐しており、コードを自動で生成したり、プログラミングのさまざまな相談に乗ってくれるのだ。
今回の講義資料を書くために初めて利用したが、その技術進歩に感心し、これは未来のプログラミングを大きく進化させると確信した。体感では、すべて自分で書くのに対して50%は速くて楽。まあプログラミング用の電動アシスト自転車ですな。プログラマ歴50年以上の私でもそう思うのだから、これから学ぶみなさんは、ぜひこの技術を活用して習得を加速させない手はない。
とはいえ、あまりに過大な期待をして後で幻滅したり、うっかり誤った知識を植え付けられることも起こりうるから、利用上の注意点についても解説する。

この回の内容

AI駆動プログラミングとは

生成AIは、ユーザの簡単な指示にしたがって、あらかじめ収集され組織化された膨大な知識を駆使し、意味のあるコンテンツ(テキスト・画像・音声・動画・3Dモデルなど)を自動的に生成する技術だ。生成されたコンテンツに対し、さらに指示を加えて修正を加える「対話」も可能である。
Pythonプログラムはもちろんテキストの一種であり、一定の文法にしたがう定型テキストである。初心者はしばしば文法の詳細がわからず試行錯誤したり、調べなくては分かるはずのないことを自分で考えようとして余分な労力と時間を費やすことがある。さらにいえば、プログラムはそれ以外の文章(たとえば小説やレポート)に比べ、過去のテキストの蓄積にヒントが隠されている可能性がとても高い分野だ。そこに生成AIが活躍する余地がある。
さらに、プログラミングに限らないが、たとえばGoogle Colabのような新たな環境に放り込まれたとき、まず迷うのが、「そこで何ができ、何ができないか。何をするには何を使うべきか」といった環境特有のノウハウについてだ。実際、この講義資料用に多くのサンプルプログラムを書くのに、Colab専属の生成AIであるGemini君の生成するコードは大いに役立った。
とはいえ、Geminiは私の意図を100%把握できるわけではないから、常に完璧なコードを生成するとは限らない(むしろ、細部はどこか違っていることが多い)。その場合はコードセルを自分で修正しなくてはならないから、開発をGeminiに丸投げできるはしない。生成AIだろうが、今流行のノーコードだろうが、それらに意図を100%伝えるテキストは、つまり高次のプログラムに他ならないからだ。それよりも、Gemini君が生成してくれたコードを参考に、その領域(画像処理・音声処理・統計解析など)の知識をすばやく身につけ、自分はより本質的な問題に取り組むのが本来の使い方だろう。そうした生成AIとの協同開発を、「AI駆動プログラミング」という。

画像処理プログラム(Geminiとともに)

一般論はこのくらいにして、さっそく画像処理のプログラムを書いてみよう。前提として、私はColabで画像を扱うにはどのモジュールをどう使うか、まったく知らない。
まず素材を用意する。有名な「いらすとや」から無料でもらってきたガチョウの絵(gachou.png)だ。授業フォルダに置いておくので、いつものノートブックのディレクトリにアップロードすること。

図14-1: ガチョウの画像(協力:いらすとや)

最初と次のコードセルはCWDを移動するいつものオマジナイだ(関数move_cwd()として定義した)。
あとはいつもと違い、できる限り自分で書かず、Gemini君に任せた。各コードセルの上にある「🖊生成」以下が、Geminiに対する指示だ※1。今回のノートブックはかなり長いので、前後半に分けた。
前半は画像ファイルを表示させ、大きいので1/3サイズに縮小するところまで。これは全く手放し(修正なし)でいけた。
大事なのは、生成されたコードセルをさっと読み、自分でも内容を把握することだ。そうしないと、何かこちらの意図と違ったことが起きたとき、修正を指示できないではないか。

1 指示文は人間相手に話しかけるように書く。「あなたは画像処理の専門家です。私は何も知らない中学生です」みたいないロールプレイも有効である。まさかこんな時代が来ようとは!

リスト14-1(前半): Geminiが生成した画像処理プログラム(use_gemini.ipynb)

リストの後半では、指示内容がより複雑になり、人手での修正も必要になった、さきほどコードの内容を把握したのが役に立ってくる。たとえば、縮小画像をつくった時点で、2種類のガチョウがいるわけだから、どちらのガチョウかをちゃんと指示しなくてはならなかった。
また、Geminiは「ガチョウのクチバシ」がどこか、身体構造を理解しているわけではなさそうだったので、ある色域(黄色みがかった色)を緑色で塗りつぶすような指示にした。最後のセルは二、三度指示を出し、コードセルにも手を加えた(冒頭の余計なコードを削除。色域の範囲を修正)。

リスト14-1(後半): Geminiによって生成された画像処理プログラム(use_gemini.ipynb)

これらのコード全体が数分で書けたから、生成AIがプログラミングを加速してくれたといえる。最も助かったのは、PILモジュールやImageオブジェクトが、Colabで画像を表示するための常套手段らしいとすばやく学べた点だ。Pythonで画像ファイルを表示する手段は10通りはあるが、どれがColabでどれが利用できるかは、中の人に訊くのが一番の早道だからだ。

AI駆動開発における注意

Gemini君とのプログラミングは楽しいが、注意しなければならない点もいくつかある。例によって前半(1~6)は利用のコツに類する項目。後半(7~10)は「APIを利用したプログラム」とも共通する、メディアリテラシーに類する注意点だ。

  1. 生成AIに仕事を任せるのではなく、協同作業であることを理解する。主導権はもちろん人間様にある
  2. 指示文ではできるかぎりあいまいな表現を排除する。どうやらGemini君は「あれ」「それ」「これ」といった指示詞の理解が苦手なようだ
  3. コードセルを削除して、繰り返し指示文を修正するのは大事だが、それだけで最終目標に到達できる保証はない。どこかで見切りをつけ、自分でコードセルを修正する方が早い場合もある
  4. 生成されたコードセルのコメント部分は、ヒントの宝庫である
  5. 前のコードセルにも含まれる、無駄な繰り返しは、大胆に削除する
  6. Gemini君に限らず、生成AIは時として、しれっとまことしやかな嘘をつく。この現象はハルシネーション※2といい、プログラミングの領域でも皆無ではない

    2 報告書・報道記事・判決文・診断書などの作成にも生成AIは広く使われているが、そこでは大問題になっている。われわれ小説家の仕事では、ほぼ問題はない。もともとまことしやかな嘘をつくのが仕事だからだ。たとえば画像の情景を文章で描写させたり、登場人物の名前や設定をひねり出すのにとても便利だ。

  7. 生成AIが出力したコードと、自分で書いたコードが部分がうまく接続しない場合があり、修正に手間がかかる
  8. 「ガチョウの画像を探して下さい」といった要望にも(たぶん)応じてくれるが、それが著作権侵害になるおそれもある
  9. 生成AIの応答が特定のプログラムを大幅になぞっていた場合も著作権が問題になる。必要に応じて作者に許可を得るべきだが、そもそも作者が判明しない場合が多い
  10. 一般論として、生成AIが「外のどこかからもってきた情報」を素材に勝手にコンテンツを作り出している事実を、強く意識しなければならない

音声再生プログラム(Geminiとともに)

画像処理プログラムを書いたついでに、音声を再生するプログラムを、Gemini君に相談しながら書いてみよう(結局、自分はノータッチで済んだ)。
実をいえば、今回の教材を書くまで、Colabノートブックからどうやって音声(音楽)を再生するのか知らなかった。Webでいろいろ調べてようやく、たとえばゲームプログラムのように、単にBGMや効果音を再生する手段はないらしいと判明した。セキュリティー上の制限だろう。
そこで、ここは「中の人」Gemini君に質問し、解決できればよしと思うことにした。結果をリスト14-2に示す。著作権の関係上、ビデオ教材で再生した音声ファイル(Gheorge Zamfil『ロマーナの祈り』)をみなさんに提供できないので、各自好みの曲のファイルを用意し、いつものColabノートブックのディレクトリにアップロードしてほしい。もちろん、プログラム内のファイル名もそれに合わせること。

リスト14-2: Geminiによって生成された音声再生プログラム(play_music.ipynb)
実行するとわかるが、出力アクションの表示は、Webページの記述言語であるHTML5の音声再生タグそのものだ※3

要するに、Colabは音声再生機能を、ノートブックを表示されるWeb(HTML5/CSS3)ページ(とChromeブラウザ)の機能に依存している。これもセキュリティー的な理由だろう。だがこのことからも、Colabが単なる学習用環境に留まらず、制限はあっても、十分に実用システムのデプロイ(インストール)に耐えるプラットフォームだとわかる。
Gemini君への指示文は簡単だ。これだけで、Googleドライブにアップロードした音声ファイルをいつでも再生できる。

3 HTML5には、標準で音声ファイルを再生できるタグが定義されている。再生できるファイル形式は、「.wav」「.mp3」「.flac」など。

この例からも、Gemini君によるAI駆動プログラミングが、自分の仕事を丸投げするというより、やり方をすばやく学ぶために威力を発揮することがわかる。