ChatGPTを使ってプログラミングする時に必要な知識とスキル
最近はプログラミングの授業が必修授業化されたらしいので、
この先は、そういう学校の授業でプログラミングを学んだ子供たちが、
日曜大工のような感覚で、
便利な生活道具として簡単なプログラムを作っていったりするのかなー、
と思ったりする。
「プログラマーなんて、誰でもなれるんでしょ?」
と、プログラミングを何も知らない人がのたまうのを聞いたり、
「プログラマーの仕事は、AIに奪われる!」
みたいな記事の煽り文句を見たりすると,
日曜大工レベルのスキルでビルが建てられるわけないだろうが、と
心の底から嘲っているけど、
プログラミングというものを、純粋に楽しく、
生活の身近な道具として扱える人が増えること自体は、
とても素敵なことだと思う。
そんなわけで、
「どういった知識やスキルがあれば、
日曜大工レベルのものをChatGPTを活用しながら作れるだろう?」
と思い、検証してみた。
作るもの
登録したRSSフィードの最新記事を取得して、
タイトルの日本語訳と共に表示してくれるGoogleスプレッドシートのスクリプト。
具体的には、↓こんな挙動。
①RSSフィードのURLを入力するシートを用意
②「最新フィード取得」ボタンを押すと、結果シートに最新記事の一覧が自動で表示される。表示される内容は、タイトル、日本語訳タイトル、URL。
英語力なくても、英語圏のニュースを気軽に目を通せるようになれば、
色々便利だよなー、とぼんやり考えていた時に、
「GAS(Google App Script)で、ちゃちゃっと作れるんじゃない?」
と思いついたのが、きっかけ。
≪この時点で、必要な知識≫
- 「RSSフィード(ブログやニュースサイトの最新記事情報を配信してくれる仕組み)」という代物を知っていること。
- Google App Script(Googleスプレッドシートに簡単な自動化作業を埋め込むためのプログラミング言語)の存在を知っていること。
RSSフィード情報を取得してみる
では、早速。
『GASでRSSフィード情報を取得する処理を書いて』
と、ChatGPTにお願い。
すらすら、サンプルコードを書いてくれる。
いい感じだ。
ChatGPTが書いてくれたソースを、コピペして、
試しにFNNのRSSフィードを取得してみる。
が、実行ボタンを押したところで、エラー。
まぁ、やっぱり一発でうまくはいかないか。
これは、「linkという情報は、ないよー」というエラー。
linkというのは、たぶん記事URLの項目だろう。
FNNのRSSフィードを直接確認してみる。
たしかに、linkという項目はない。
代わりに、guidという項目に記事URLっぽい値がある。
GASに戻って、linkのところをguidに修正して、再実行。
よし。今度は、うまくいった。
≪このフェーズで必要なスキル・知識≫
- エラーメッセージを元に、エラー原因を見つけるスキル
- RSSフィードの構造(XML)に関する知識
結果をシートに出力する
ChatGPTに、次なるお願い。
『上記の結果をシートに出力する処理を書いて』
またもや、すらすら書いてくれる。
ChatGPTが書いてくれたソースをコピペして、実行。
今度はあっさりと、
スプレッドシートに結果を表示してくれた。
タイトルを日本語訳する
何て言ってお願いすればいいかなー。
元の英語のタイトルはそのまま残したいよなー。
と、少し考えてから、
『上記の結果のうち、titleの日本語訳を別カラムで出力できるようにして』
と、お願いしてみた。
これまた、さらさら回答してくれる。
が、提示してくれたやり方は、Google翻訳APIを使用する方法。
このAPIを使うには、APIを使用するためのキー発行を別途行う必要があって、ちと面倒。
「こういうもの作れないかなー」と思った時に、
使えそうな翻訳サービスに何があるか事前に調べて、
「GASではLanguageAppというものを使用すれば、特にAPIキーは使わずに簡単に翻訳できる」
という情報を得ていたので、
『LanguageAppを使ったやり方でお願い』
リクエストしてみた。
無事、LanguageAppを使ったやり方で、書き直してくれたので、
これをコピペして、実行。
うん、良い感じに日本語訳タイトルが表示されてくれた。
この後は、
『Sheet1のB列にRSSフィードURLが設定されているので、この値を使って全件について処理を実行して。結果はSheet2に出力して』
とお願いして、ひとまず目的のものは出来上がり。
≪このフェーズで必要なスキル・知識≫
- 利用する技術をあらかじめ調査・選定するスキル
まとめ
そんなわけで、必要なスキル・知識を有していて、
ChatGPTの扱い方に慣れていれば、
30分~1時間くらいで、これくらいのプログラムは、さくっと作れそう。
ソースコードの品質については、一概に良いとも悪いとも言えない。
今回、ChatGPTに、まったく同じお願いを何回かしてみたところ、
提示されるソースコードは、毎回微妙に違って、
性能面も考慮された洗練されたソースコードが返されることもあれば、
もっさりしたソースコードが返されることもあった。
ソースコードを洗練させるには、
「洗練されたソースコードとは何なのか」の知識も必要になるのだけど、
日曜大工としてのプログラムなら、
個人の用を足せれば充分なので、そのあたりの知識は別になくていいと思う。
というわけで、
「どういった知識やスキルがあれば、
日曜大工レベルのものをChatGPTを活用しながら作れるだろう?」
という問いに対する検証結果をまとめると以下。
≪日曜大工レベルのものをChatGPTを活用して作るために必要な知識・スキル≫
- 利用する技術をあらかじめ調査・選定するスキル
- Google App Script(Googleスプレッドシートに簡単な自動化作業を埋め込むためのプログラミング言語)の存在を知っていること。
- 「Google App ScriptのLanguageAppを使うと簡単に翻訳できる」という情報を得るスキル
- 扱うデータに関する知識
- 「RSSフィード(ブログやニュースサイトの最新記事情報を配信してくれる仕組み)」という代物を知っていること。
- RSSフィードの構造(XML)に関する知識
- エラーメッセージを元に、エラー原因を見つけるスキル
- その他
- プログラミングの基本知識
- 作業を分解するスキル
利用する技術をあらかじめ調査・選定するスキル
これについては、
現代人は老若問わず、GoogleやらYoutubeやら何やらで検索慣れしているので、そんなに敷居は高くないのではないかと思う。
扱うデータに関する知識
RSSフィードの結果を取得する処理を、試しに何回かChatGPTに作ってもらったところ、
なぜか毎回、RSSフィードを異なる構造で解釈していて、
そして毎回、必ずどこかが誤っていた(笑)
何かのデータを扱う場合には、
そのデータは何なのか、どういう構造なのか、
を理解しておくことや、把握するためのやり方を知っておく必要はありそう。
エラーメッセージを元に、エラー原因を見つけるスキル
必要なスキルの中で、現時点で一番難しいのは、これかな。
これまでに何度かChatGPTにエラー原因の調査を手伝ってみてもらったのだけど、
「このエラーメッセージなら、原因はこれでしょ!」
とエラー原因が明快なものを除いて、
ChatGPTはエラー調査には、あまり役に立たない。
システムに関するエラー調査って、
「原因として考えられるもの、あるいは原因に繋がると考えられるものを、可能性レベルで挙げ連ねて、確度の高そうなものから順にあたりを付けて状況証拠を集めながら推論と検証を繰り返しながら追っていく」
という、事件捜査みたいな感じなのだけど、
こういう小さなPDCAを繰り返して答えを導き出していく類の作業は、
現在のAIが得意とする「パターン学習により最適な答えを、ぱっと導き出す」領域とは異なるのかもしれない。
ただ、多くのエンジニアが、
新人の頃は、深夜までかけて、ひたすらデバッグしてエラー原因調査していたのが、
経験を重ねるにつれて、エラー原因の"あたり"を付けるのがうまくなっていくことを考えると、
エラー原因の"あたり"を付けるスキルは、パターン学習の領域のようにも思うので、
学習データをエラー原因調査関連のものに特化させれば、
エラー原因調査を補佐するスキルに秀でたAIも、そのうち出てくるかもしれない。
プログラミングの基本知識
作るものが簡単なもので、
ChatGPTの提示してくれたソースコードがイケてて、
全くつまづくことなく、スイスイ行くなら、
基本、コピペだけで動いてくれそうなのだけど、
そういう運の良いケースって、たぶん稀。
そして、前述した通り、
「こんなエラーが出たけど、どうすればいいのー!?」
と、ChatGPTに泣きついても、現時点では解決する確率は低い。
問題が発生したときに、それを解決するには、
- まず、起こっている事象を理解する
- その上で、その事象を引き起こしている原因を探す
というプロセスを踏む必要がある。
2については、日曜大工レベルのプログラムで生じる問題ならば、
Google検索駆使すれば、大体解決方法に辿り着けるけれど、
1については、やっぱり基本知識が必要。
今回の例でいうと、
RSSの結果を解析する処理でエラーが出た時に、
「これは『linkという情報はないよ』というエラーだな」
と判断できたのは、基本知識があるから。
なので、やっぱり、
プログラムがどういう流れで何をやっているのか、
なんとなーくのレベルで読める基本知識は必要。
(必修授業で習うレベルで大丈夫だとは思う)
作業を分解するスキル
たぶん、ゼロからプログラミングをしたことのない人が
何かを作ってみようとして、一番最初につまづくポイントは、
「何から始めればいいか、わからない」
じゃないかと思う。
「こういうもの作れたらいいなー」
と思って、ちょっと調べてみて、
「Googleスプレッドシートを使えばできるみたい」
「ChatGPTを使えばプログラミングに詳しくなくても簡単にできるみたい」
っていう情報までは辿りつく。
でも、その次に、
「じゃあ、何をすればいいの? 何をChatGPTに聞けばいいの!?」
となるのではないかと。
例えば今回、私は↓こんな風にタスクを分解して取り組んだ。
- RSSフィード情報を取得する
- 結果をシートに出力する
- タイトルを日本語訳する
- シートに入力したRSSフィードURLの全件について処理を実行する
作業順序は、結構、どんな順序でもいけるのだけど、
(たとえば、4→2→1→3とかでも問題ない)
タスクの粒度は、少なくともこれくらいには分解した方がいい。
「一発で完成形のソースコードを作ってもらう魔法の言葉」
とかは、複雑になって、うまくいかなかった時に何が問題なのかわからなくなるだけなので、探さない方がいい。
シンプルなものの掛け合わせにすることが大事。
じゃあ、適切な粒度に作業を分解するには何が必要かというと、
これまた、プログラミングの基礎知識と、
あとは「慣れ」かな、と。
プログラミングというのは、
「データを取得する」
「データを加工する」
「データを出力する」
こういった処理の組み合わせだよね、
という基本を理解して、それに則った段取りで作業をしていくうちに、感覚をつかんでいく。
料理と少し似ているかもしれない。
料理というのも、基本的に、
「材料を切る」
「適宜、火を通す」
「味付けする」
これだけ。シンプルな工程の組み合わせ。
この順序が完全な正解、というのはなく、
人それぞれにアレンジがあっていい。
シンプルでありつつ、奥が深い。
と考えると、プログラミングで活用する時のChatGPTというのは、
最新の調理家電みたいなものかもしれない。