非エンジニアのためのChatGPTによるPython/VBAコーディング手法(3)
要件定義と処理内容を言語化した指示文
これがChatGPTでPythonやVBAコーディングを行う上でのキモです。これを具体的にどうやるかを説明したいと思います。
要件定義
正直に告白すると、ボクが今までに作成した(作成してもらった)コードは、システム開発における”要件定義”と比較するとボリュームはとても限定的で、”要件定義”という言葉を使うことすら憚れるぐらいのものです。
Suumoサイトにアクセスし、XXX、YYYの情報をスクレイピングし、CSVファイルに出力する(Python)
au Pay注文明細(PDF)から仕訳に必要な情報を取得して、CSVファイルに出力する(Python)
銀行入出金履歴(日付、出金、入金、入出金者名)を、入金、出金、入居者で異なる処理を施した後に、弥生会計フォーマットに仕分けする(VBA)
とはいえ、”要件定義”は、簡単に言ってしまうと、
なわけで、機能が限定的なボクのコードレベルであれば、上記の箇条書きを”要件定義”と言っても間違いではないと思われます。ただし、このレベルの”要件定義”だけで、ChatGPTに指示を出しても具体的なコードには落としてくれないはずです。そこで重要になってくるのが、指示文です。
指示文
正式名称は知りませんが、要は、実際にどういう動きをするコードがほしいか、より具体的に処理方法を明記する文章のことです。
粗粗の指示文
粗々の指示文と書きましたが、"(まだ)抽象度が低い指示文"の方が理解し易いかもしれません。1.の「Suumoサイトのスクレイピング」で説明したいと思います。
対象URL
抽出する文字列(XXX、YYY)の指定
CSVファイルの形式(1列目にXXX、2行目にYYY)の指定
は最低限必要な指示です。要件定義とこの情報があればChatGPTもなんとか動き出すことはできるかもしれません。
しかし、この指示文では、なかなかコードを作成してくれません。コードを作成してはくれるのですが、思った通りの結果が得られずに、とてもイライラするはずです。初期のボクですねw
そこで抽象度をより高くなるような指示にします。
抽象度の高い指示文
抽象度の高い指示文とは、”人間が(無意識に)行っている作業を、結果が一意になり、汎用的に使用可能な処理として言語化”することです。
上記のSuumoサイトのスクレイピングコードを作成するのであれば、「自分が20-30件のデータを見て、どのような判断に基づき対象文字列を抽出して、Excelにまとめるか」をより詳細に記述します。
数ページに渡り掲載されている物件情報を人間が見れば、時間がかかり、面倒くさくはありますが、このような形でまとめられると思います。
その判断、処理を言語化します。
上記のExcelのようにまとめる場合は、
"所在地"の横に、”東京都港区白金5”、”東京都港区南麻布3”と記載
"販売価格"の横に、"8980万円"、"9990万円"と記載
されているのがわかります。これをソースコードレベルで指定します。
Pythonをちゃんと学んだエンジニアであれば、このHTMLコードを見ればPythonコードに落しこめるのでしょうが、入門動画を2-3本見ただけの非エンジニアでは無理です。
とはいえ、心強い相棒、ChatGPT4.0がいます。そのまま日本語で言語化してOKです!
こうなると所在地ももう簡単ですね。日本語で抽出の指示文を書きます。
ただし、上記だと"販売価格"や"所在地"に変数が代入されることになってしまいます。問題ないといえば問題ないのでしょうが、少々気持ち悪いので、変数名を定義しておきます。
CSVについては、そのままでOKです。ただ、このままだと文字化けを起こすと思うので、
encoding='utf-8-sigは、「やっとCSVに出力できたー」と思ったら文字化けだった、という苦い経験をしたために、身につけたTipsです。エンジニアの方であれば常識なのかもしれませんが、非エンジニアはそんなこともしらないですからね。
まとめるとこんな感じのプロンプトになりました。
スクレイピングについては他にもいくつかのコードを作成して経験したことがあるのですが、ここでは割愛します。知っていただきたいのは、「抽象度の高い指示文」についてなので。
これだとかなり苦労すると思うのですが、最終的にはなんとか試行錯誤を繰り返し、コードが完成すると思います。
この先に、「抽象度が高く、具体的な指示文」があるのですが、それは次回に。