【ChatGPT×VBA】AI(人工知能)による未来のコーディング

昨今話題のChatGPTというAI(人工知能)をご存知でしょうか。
ChatGPTとは簡単にいうと何でも答えてくれるチャットボットのようなもので、女子高生AI『りんな』を知っている人はそれと同じようなものをイメージしてもらえれば大丈夫です。

少し前は文字を入力するとその文字通りの画像を生成するAI『Stable Diffusion』が話題になっており、AIが生成した画像を見て驚愕した人は少なくないでしょう。しかし、今回のChatGPTはそれをも超える衝撃を与えてくれる存在で、おそらく史上最強のAIです。

ChatGPTでは”チャット感覚”で以下のようなことが出来ます。

・何かしらの質問をして、その質問に対する適切な回答をもらう
・何らかの文章をあたえて、その続きの文章を生成してもらう
・何らかの長い文章をあたえて、短い文章に要約してもらう
・何かしらの言語をあたえて別の言語に翻訳してもらう
・何かしらのやりたい処理内容の文章をあたえてプログラムのコードを生成してもらう

 
上記のできることを見るとコードを書いてくれたり、わからないこと(アルゴリズムなど)を教えてくれたりとプログラムを書くときの強力なサポートになってくれそうです。というわけで、今回はChatGPTを使うとコーディング時にどのような支援が受けられるかを紹介していきます。

メールアドレスによるアカウント登録だけで無料で利用可能(2023/2/2現在)なのでぜひ触ってみることをオススメします。現在はまだベータ版のような開発段階なので今後有料になっていく可能性は高いですが使ってみると世界が変わります。(ChatGPT公式サイト)

 icon-warning  はじめに 

本ページではプログラミング言語の代表として当サイトで多く取り扱っているVBAベースで話を進めていきますが、特にプログラミング言語に縛りはないので、Pythonを書いているのであればPython、C++を書いているのであればC++に置き換えて読み進めて下さい。(むしろそういった本格的な言語の方がVBAよりベターです)
 
【重要】ChatGPTによって生成される文字には間違いや不適切な表現などが含まれる場合もあります。100%信頼することは危険なので最終的には自身でしっかりと判断してください。

 

ChatGPTとは

ChatGPTとはOpenAIという企業が開発した自然言語処理(人間の言葉)に特化したAIです。
(ChatGPT:https://openai.com/blog/chatgpt/)

“Chat”とついていることからもわかる通りAIのチャットボットのようなもので、会話や質問などの言葉を入力するとそれに対する回答を人間のような言葉で返答してくれます。

たとえば「ChatGPTとは?」と質問すると下記のような回答をしてくれました。

わからないことをチャット感覚で手軽に聞くことが出来ることから「”検索する”という行動がいずれ消えてしまうのでは」という声も上がるほど非常に優秀なAIです。

Googleの経営陣はChatGPTが事業に深刻な影響を及ぼしかねない存在ととらえコードレッド(緊急事態)を宣言しており、対するMicrosoftはOpenAIに100億ドル(約1.3兆円)もの巨額投資を行うという計画もでてきており、ChatGPTは今後の世の中を大きく変える存在の1つになるといっても過言ではないのかもしれません。

今回はChatGPTを使ったコーディング支援のお話なのでChatGPTについの説明はこれぐらいでとどめておきますが、詳しくは下記の動画を見ればどのようなものかイメージできると思うのでChatGPTについて全く知らないという方はぜひあわせてご覧ください。

 

ChatGPTを使ったコーディング

ChatGPTは今後プログラマーにとって下記のいずれかの存在となる可能性が高いです。
プログラマーのコーディングを支援する非常に便利なツール
プログラマーの仕事を完全に奪ってしまうツール

現状では前者の存在でありプログラムを書く上で非常に便利なツールとして利用することができます。
ChatGPTがコーディング支援としてできることとしては下記のようなものがあります。

 icon-check-square サンプルコードの生成
 icon-check-square 関数やプロパティ/メソッドの説明や使い方
 icon-check-square Windows APIの使い方の説明
 icon-check-square 実現するための機能(関数)の提示
 icon-check-square 適切なアルゴリズムの提案/検討
 icon-check-square コードの要約(レビュー)

 
いろいろできることは多いですが、やはり完璧なコードを生成することはできませんし、エラー処理がなかったり汎用性、堅牢性があるとはいいがたいです。最終的には人が確認する必要はありますが、支援してくれるという点では非常に優秀なAIです。(※そもそもプログラミング生成用のAIではないです)

ただし、ChatGPTの生成する回答は100%正しい訳ではないので注意が必要です。特に間違った内容をさも合っているかのようにそれらしく語ることも多いということは頭に入れておきましょう。

以降では上記のChatGPTを使って得られるコーディング支援の内容を詳しく紹介していきます。
※以降の画像ではChatGPTに丁寧な口調で入力していますが「○○したい。○○教えて。」というようなフランクな言葉でも認識してくれます。
 

サンプルコードの生成

ChatGPTは自然言語だけでなくプログラムのコードのサンプルを生成することが可能です。
やり方は簡単で誰かに頼むような感じで「VBAで○○やりたいから、サンプルコード教えて」とChatGPTに入力するだけです。

たとえばVBAでA1セル~A10セルに番号を付与したいとき、やりたいことをそのままChatGPTに入力するだけでそのサンプルコードを生成してくれ、さらにはコードの説明もしてくれます。(長いコードが生成される場合はコード内にコメントで処理内容を表示してくれます)

 
VBAでExcelとPowerPointを同時に操作するような少し複雑な処理でも下記の通り生成が可能です。

ポイントとなる”参照設定”についてもしっかりと注意書きもしてくれ、ChatGPTにいわれたとおりに操作するだけで入力した処理の実現が可能となっています。

また、VBA初心者で「参照設定ってどうやってやるの?」という人はそれをそのままChatGPTに聞いてみて下さい。ChatGPTはこれまでの会話内容を記憶しており、そこから話の流れを推測してくれるため再び長くて詳しい質問内容を書く必要はありません

 

関数やメソッド/プロパティについての説明

VBAにはいくつもの関数がありますが「この関数って何だろう?」というものもあります。
Microsoftのオンラインヘルプなどを見ても解決できますが、ChatGPTに聞くことでも解決できます。
かなり簡潔かつ具体例を出してくれるので人によってはこちらの方が頭に入ってきやすいと思います。

 

Windows APIの使い方の説明

VBAの基本的なコードを書くことはできてもWindowsAPIの書き方はよくわからない、使うときに検索して調べるという人は少なくないと思います。そういった場合もChatGPTに質問すれば実装方法をわかりやすく説明してくれます。

たとえばVBAでWindowsAPIのSleep関数を利用したいとします。
そんなとき下記のように質問するとコピペでそのまま使えるようなサンプルコードを教えてくれます。

 

実現するための機能(関数)の提示

「VBAで○○したいけど、それを実現できる関数ってあるのか?」となりうまく検索できないという場面に出くわすことはないでしょうか。たとえばVBAで数秒だけ処理を止めたい時、「Sleep関数」の存在を知っていたら調べようはありますが、そもそもその関数を知らない場合は「VBA 処理を数秒とめる」というような検索をして複数のページを見て渡り答えを自分で探さざるを得ません

こういったときChatGPTに聞けばその方法を具体的に提示してくれます。
たとえばVBAでキャプチャしたいというときは下記のように質問することで、Windows APIの「PrintWindow関数」を使えば実現可能ということを知ることができます。

サンプルコードも作成してくれましたがこのときのコードはコピペでは利用できませんでした。
しかしながら、コードを書く際に参考としては非常に有益な情報ですし、この情報を知ったうえで検索をすれば答えもすぐに見つけることができます。
  

適切なアルゴリズムの提案/検討

ChatGPTの強みは実際に人と話しているようにAIと文字でのやり取りができるという点です。
これにより複数あるアルゴリズムの中で一番適したものはどれかを開発者とChatGPTで相談(厳密にいうとAIの意見を開発者が汲み取る)しながらコーディングを行うことができます

たとえば「VBAで配列内の要素を小さい順に並べ替える処理」の実装を例に見ていきます。
まずは単純にやりたいことを実現するためのサンプルコードを生成してもらいます。

生成されたコードを見るとクイックソートというソートアルゴリズムが使われていますが、生成されたコードはかなり長く(50行くらい)可読性があまりよろしくありません。ここでは処理時間だけでなく可読性にもこだわりたいので他のソートアルゴリズムと比較しようと思います。

というわけでクイックソート以外のソートアルゴリズムにどういったものがあるかを聞いてみます。

するといくつかの具体例を提示してくれました。
先ほどはクイックソートを生成してくれたので次は「バブルソート」のコードを教えてもらいます。

これで「配列内の要素を小さい順に並べ替えるためのアルゴリズム」が2つ提示されました。
どちらを使った方がいいかもChatGPTに聞いてみましょう。
具体例をあわせて質問するオススメとその理由を教えてくれます。

上記の回答から要素数100個くらいであれば「クイックソート」も「バブルソート」も処理時間は大して変わらないということがわかりました。AIはクイックソートをおすすめしていますが、バブルソートの方が何をやっているかわかりやすくコードも短いので今回はそちらを採用することにします。

…と、いった具合にChatGPTと何度か会話することで、自分のやりたい内容に合ったアルゴリズム(処理方法)を簡単に見つけ出すことが出来ます。
 

コードの要約(レビュー)

ChatGPTはコードの要約、レビューを行うことができます。
たとえば上記で作成されたクイックソートのプログラムをに対してレビューを求めたときの回答は下記の通りです。(質問内容は「下記のコードをレビューしてください。*クイックソートのコード*」)

このとき、間違いやあまり効率の良くない処理があるとそこを指摘してくれる場合もあります。

 

まとめ

今回はChatGPTを使ったコーディングについてのお話でした。
これを便利と思う人もいれば、脅威と思う人もいると思いますが、AIはここまで進化しています。

これまではわからないことがあればGoogle検索をして”調べる”というのが基本でしたが、これからはAIに”聞く”という時代になっていくのかもしれません

Google検索では検索をすることでその答えになりそうなページを大量に表示してくれますが、実際にはその中から1つ1つ確認して求めている答えを探し出す必要があります。対してChatGPTは欲しい答えをそのまま人に教えてもらうかのように”聞く”ことができます。
イメージとしてGoogle検索は図書館でChatGPTは図書館内のすべての本の知識をもった人間のようなものです。

2022年は画像を生成するAI『Stable Diffusion』、さらには自然言語を使いこなす最強AI『ChatGPT』まで誕生し、世界がよりAIに注目する年となりました。2045年にはシンギュラリティ(人工知能が人類を超えるターニングポイント)が起きるといわれていますが、こういった技術を目の当たりにすると本当に起こるのではないかとワクワクとハラハラが混じった複雑な感情になります。

ChatGPTはまだまだ開発の途中のため、今後もさらに進化し続けます。
自然言語の成長だけでなくプログラミングがどれだけできるようになるか今後にも注目です。

 icon-book シンギュラリティ関連書籍

2023年2月2日AI, Deep Learning, Excel, VBA, Windows API

Posted by Lic