皆さん、こんにちは。株式会社ナレッジエックスの中越です。
近年、人工知能(AI)の進化は驚異的なスピードで進んでおり、特に生成AIの能力向上が顕著です。生成AIは、自然言語処理や画像生成など多岐にわたる分野でその実力を見せつけてきましたが、果たしてプログラミングという専門領域においても、その実力を発揮できるのでしょうか。私たちの研修プログラムでは、受講者が実際に手を動かしながら演習課題を通じて学ぶことを重要視していますが、ふと、生成AIがその演習課題をどれくらい解けるのか?が気になりました。
そこで今回、私たちは興味深い実験を行うことにしました。弊社が提供するIT・プログラミング研修の演習課題に、最新の生成AIが挑戦します。果たして、AIはどれほどの成績を収めるのでしょうか?
このコラムでは、実験の詳細と結果、そしてそこから導き出される示唆を皆様にお伝えできればと思っています。同時に、AI時代における人材育成のあり方についても、一緒に考えていけたらと思っています。
それでは、AIと人間の「プログラミング対決」の結果をご覧ください!
弊社の「【Flipuru オンライン】Java基本文法入門研修」から、ある演習課題を生成AIに解かせてみました。
そのためには、当然ながら問題文を生成AIのプロンプトに入力する必要があるのですが、「表や実行結果のスクリーンショットがある問題文はどうやってプロンプトのテキストにすればいいんだろう」と思われた方もいるかもしれませんね。たとえAIの回答が早いといっても、いちいち、人間が表の内容や実行結果の様子をテキストに書き直していては、時間がかかってしまいます。
実は、多くの生成AIのプロンプトは、画像やその他のファイルも添付することができるようになっています。
そこで今回は、次のようにして、プロンプトに、演習課題をキャプチャした画像を添付しました。
生成結果は、以下のようになりました。
問題内容が簡単ということはありますが、ほぼ完ぺきな回答を返してきました。
ちなみにここで利用している生成AIは、プログラムコードの生成能力が高いと噂されているClaude 3.5 Sonnetです。
基本文法で解ける程度の内容や、ちょっとしたアルゴリズム・ロジックが中心のプログラムは生成AIがかなり得意としている領域のようです。
次に、弊社「【Flipuru オンライン】Javaオブジェクト指向入門研修」から演習課題を解かせてみましょう。
この問題はページが3ページにまたがるので、1ページずつ問題文の画像を添付して対応してもらいました。
ちなみに、Claude3.5 Sonnetの無料版は5個までファイルを添付できます。プロンプトの長さの制限上、前提となるGenderクラスのコードは添付できませんでしたが、Humanクラス、Robotクラスのコードはプロンプトに貼って送信しました。
オブジェクト指向編の問題になると登場するクラスの数も増え、要件もやや複雑になりますし、基本文法編以上に図や表の記載が増えることが多いので、どの程度解読できるのかが興味深いところがありました。
以下の要件を満たすJavaプログラムを作成してください。
(実際にはこのあとにRobotクラス、Humanクラスのソースコードをプロンプトに貼りつけたがここでは省略)
継承関係も考慮して、ちゃんと回答してくれました。さらに、プロンプトに入りきらなかったGenderクラスの不足をきちんと認識し、Genderクラスがないことによるエラーの可能性までも指摘しています。
初心者向けの入門研修の演習問題レベルであれば、普通に回答できてしまいそうです。
今度は、弊社「【Flipuru オンライン】Javaによるデータベースアクセス入門研修」から演習課題を解かせてみましょう。
データベースアクセスの演習問題ですが、それぞれの演習課題そのものにはテーブル構成まで書かれていないことが多いので、今回はプロンプトにCREATE TABLE文を貼って、テーブル構成を伝えて回答を生成してもらいました。
以下の要件を満たすJavaプログラムを作成してください。
このとき、empテーブルを生成するCREATE TABLE文は以下となります。
(実際にはこのあとにempテーブルのCREATE TABLE文をプロンプトに貼りつけたがここでは省略)
try-with-resourcesを使っていない、emp/conn/pstmtなどローカル変数のスコープがやや微妙、などいくつかの突っ込みどころはありますが、おおむね問題ないコードを作ってくれました。
DAOパターンのようなプログラムはまさに設計のパターンに基づいたコードであることから、簡単なのかな・・・と思いきや、細かな箇所で気になる部分もあり、多少わかる人から見ると合格点は与えられないコードかもしれません。ただ、それなりに動いてはしまうと思いますので、生産性との兼ね合いでどう判断するかという局面は今後生じてくるかもしれません。
最後に、弊社「【Flipuru オンライン】JavaによるMVCアーキテクチャ入門研修」から演習課題を解かせてみましょう。
先の実験3でも、一部JSPを書いてもらっているので、Webページを作るような演習課題でも大丈夫そうな感じはありますが、Servlet/JSPを連携するようなやや複雑な要件だとどうなるでしょうか。
以下の要件を満たすJavaプログラムを作成してください。
JSPファイルが2つ、Servletが1つの構成で、それなりに複雑な要件ですが、生成AIではこともなげに回答を生成してきました。
致命的な間違いはなく、設計としておかしな部分も見られません。ただ、無料の生成AIでは渡せる情報量に制限があるので、これ以上複雑な要件を渡して作ってもらうとなると、有料版を検討しなければいけないかもしれません。
弊社のJava入門系の4コースの演習課題を使って、生成AIに演習を解かせてみましたが、予想していた以上にきちんとしたコードを生成してくるな・・・というのが印象的でした。
しかしながら、今回使用したClaudeですと、無料版ではプロンプトの分量的に若干成約がありました。
もし業務でのコーディングに適用するとなった場合、きちんと有料版の契約を行い、もっとボリュームの多い設計書を渡してたたき台となるコードを作ってもらえるのであれば、業務への活用でもかなりいいところまでいけそうな印象を受けました。
このように身近な生成AIでもそれなりにきちんとしたコードを書けてしまうとなった場合、プログラマー・エンジニアの皆さんは何を意識しておけばよいのでしょうか?
そういった部分を含め、研修で生成AIを使っていくとどのような変化が起きると考えられるか?といったあたりについては、次回以降のコラムで論じていきたいと思います。
以上