🤖

AIの力を借りてプログラムを作った話し

2024/01/04に公開

最近はChatGPTやMicrosoft Copilotなどの生成系AIツールが増えてきました。
これらのツールをプログラミングに活用するという事例を聞いている方もいらっしゃると思います。
自分もそんなわけで、Microsoft Copilotを使ってツールを作ったり、ChatGPTを使ってプログラミングの例題を作ったりしていました。
その辺の内容をちょっとこちらにも書いておこうと思います。

いままでにやったこと

本題に入る前に、とりあえず自分が今までやったこと。

わたしは基本的にAIに質問したことを、なるべくNotionのリストに残すようにしています。
どう質問すれば、どういう結果が返ってくるのかなど、参考にしていただければと思います。
https://takamichie.notion.site/67c7609855084fd186f9e059ab70f327?v=73a5682653cc4c0cb85755da224ce334&pvs=4

いろいろ聞いてみた感想

個人的な感触としては、プログラミング的な質問は、ChatGPTに聞くより、Microsoft Copilotに聞いた方が良い感じ。
なぜなら、ChatGPTはただコードだけを出力しますが、Microsoft Copilotはほとんどの場合、コードの根拠になるページを提示してくれるため(必ずしも信用できるソースになるとは限りませんが・・・)。
このため、何かが動かないのようなコードが出てきたとなったときに、ChatGPTは諦めるしかない場合があります。

ただ、Microsoft Copilotに質問した内容は、参照先リンクをたどると解決策が書いてあったりすることがある(書いてないこともある)。
やりたいことと言語と制約条件を書けば、大抵何か出力してくれるので、そういう意味では非常に助かります。

扱いづらいなと思ったところ

どういうような処理を依頼するかどうかにもよると思いますが、処理をまとめていなかったり、構造化されていなかったりするプログラムを出力してしまうことがあるところも難点。
毎回イチからプログラムを書き直してしまうのも厄介です。
毎回同じようなプログラムを出力していると思いきや実はアプローチが全く違うプログラムを書いていることもあり、同じようなことを何度も何度も出力させる時には注意が必要です。
https://takamichie.notion.site/Toggl-API-5204f207c930427199f52410ff03f50f?pvs=4

同音異義語には(人間より)弱い

また、プログラミング言語でもあり、同名のゲームもあるRustや、SNSの名前でもあり一般的な用語でもあるThreadsなど、同じ意味で複数の意味合いがある同音異義語には人間よりも弱いです。
「○○のことではありません」と明確に断り書きを質問に追加しなければいけないときもあります。

複数のバージョンがあるAPIを使うときは要注意

また特に上記で出したToggl APIなど、複数のバージョンがあるAPIを使うコードを出力して欲しいというときには注意が必要です。
AIは常に最新バージョンのAPIを使うとは限りません。
データソースの問題もあるのでしょうが、とっくにObsoleteになったバージョンのAPIを使おうとすることがあります。
最低限、最新APIを呼ぶ時のURLを把握しておき、出力されたコードが本当に最新のAPIを呼んでいるのか確認するとよいでしょう。

最適なアルゴリズムを答えてくれるとは限らない

たとえばなるべく短い文字数であるコードを実現したいとか、既存プログラムの追加処理をAIに書いてもらったりと言った場合も、必ずしも最適なコードを書いてくれるとは限りません。

同じことを何度か聞いてもそのたびにアプローチが変わってしまうこともあり、そのたびにコードをちゃんと理解する理解力は必要になります。

AIは自身のプログラミングスキルを1.2倍するツール

いろいろいじって思ったのは、このとおりAIは、自分自身のプログラミングスキルよりちょっと上のレベルのことができるツールだと思いました。
やり方はわかってるんだけど過程がよくわかっていないとか、詳細な技術を調べる時間がちょっと作れないんだよねとか、大まかなやり方はなんとなくわかるんだけど具体的な処理が思いつかないとか。
このような時には、AIはとても役に立ちます。

ただ逆に、例えば見たことも聞いたことない言語のプログラムを書こうだとか、全く使ったこともないフレームワークを使うプログラムを出力させようとするとか、そういう自分のレベルを遙かに上回ることをすることはできないという感触でした。

それはプログラムコードが間違っていたときに、どう修正すれば直せるのかとか、どう指摘すれば直してもらえるのかというのが分からないということにつきます。
「プログラムが間違ってた、じゃあ作るのは諦めます」と言ってバッサリ切り捨てられるならともかく、それがぜひ自分で作りたいものであれば、周辺知識だけはしっかり身につけておく必要があるのかなと思いました。

AIはプログラマの立場を奪うのか

よくAIは仕事を奪うよねとか言われることはあります。

ただ、個人的な感覚からすると、今の状態から10段階ほど進化したAIならばともかく、一段階二段階程度進化した程度では人間の仕事を奪うことはできないなという感じでした。

何よりAIはプログラミング言語を理解しているわけではありません
自分は以前「AIとは賢い赤ちゃんである」という表現をしたことがありますが、だいたいそんな感じかなと思っています。
すごいいろいろ知ってるんだけれども、その内容を理解しているわけではないから、正しいとは限らない。
https://takamichie.notion.site/AI-6e7c193485b64e5797038be76fce103b?pvs=4
それでもたまに真に迫ったことを言ったりする。その辺もなんだかとても赤ちゃんっぽいなという感じがしますね。

ともかく、いろんな人のプログラムを参考にして、「こうすれば動くだろう」みたいなコードを作成しているに過ぎません。
おそらく多くの人が書いているプログラムであればかなりの精度でプログラムが書けると思いますが、特定分野にしか使われない処理であったり、とてもニッチな分野のプログラムなどを依頼すると、途端に精度が下がるものと思われます。

もちろんその場合であっても、その部品部品をAIに作らせるなどいろいろ使いかたがあるとは思いますが、全体を作らせようみたいなことはできなくなるんじゃないでしょうか?

AIをプログラミングに使うかどうかと聞かれたら、使うべきだと思う

今更の話かもしれませんが、では「AIをプログラミングに使うべきなのかどうか」と聞かれたら、わたしは「使うべき」だと思います。
正しいとは限らなくても、効率的ではないかもしれなくても、とっかかりを素早く得ることができるというのは非常に便利。
MDNを検索するよりも、公式リファレンスを検索するよりも早く目的の情報にたどり着くことができる。
そしてMicrosoft Copilotであれば、その先に繋がるための手がかりも詳細情報から得ることができる。
ただAIを有効に使うためにも、自分自身のスキルも上げる必要があるんだと、強く思いました。

Discussion