ChatGPTをプログラミングに活用するためのプロンプトについて

こんにちは
マイロプスのエンジニアのウシロゴウチです。

最近は、生成AIの進歩がめざましく、ChatGPTを使用することで簡単なプログラミングをすることもできます。サイトリニューアルのために、現行サイトに関して、1回だけウェブスクレイピングしたいなど、一時的に自分が使用する簡易ツールの作成などには、ChatGPTでプログラミングをするのは便利だと思います。

実際にChatGPTを使って簡易なツールを作った際に、どのようなプロンプト(ChatGPTへの指示)を書いたら、自分的にうまくいったかを、まとめていきたいと思います。

1.インプットとアウトプットを意識して具体的な処理をイメージする


こちらは通常のプログラミングでも大事なことだと思いますが、ChatGPTへのプロンプトでも何がインプットで何がアウトプットなのかを意識して処理の内容を具体的にイメージしてから書いていくと良いと思います。

例えば「複数枚のHTMLファイルから必要な情報を抜き出して、CSVにまとめたい」といった要望があったとします。こちらの要望を実現するためのプログラムのインプットとアウトプットを意識して具体的な処理をイメージしてみます。

複数枚のHTMLファイルが一つのフォルダにまとめてあり、そのフォルダの中から一つ一つそのHTMLファイルを読み込み、HTML構造を参考に必要な情報を抜き出す。抜き出して情報を加工して、その結果をCSVとして出力する

といった感じにやりたいことの具体的なインプットとアウトプットの処理をイメージします。

2.最初から処理の全部を書かず段階的に処理を増やしていく

次に大事なのがプロンプトには最初から全部の処理を書かず、処理を一つずつ追加していく形が良いと思います。
つまり最初から、

複数枚のHTMLファイルが一つのフォルダにまとめてあり、そのフォルダの中から一つ一つそのHTMLファイルを読み込み、HTML構造を参考に必要な情報を抜き出す。抜き出して情報を加工して、その結果をCSVとして出力する

とプロンプトを書くのではなく、

◯◯フォルダにあるhtmlファイルを一つ一つ読み込み、読み込んだ情報をCSVにして出力するプログラムが欲しい

といった形で、一つの処理からプロンプトを書く方がいいです。

一つの処理からプロンプトを書いたほうがいい理由は、その方が指示も書きやすく、また生成したコードの確認、指示修正もしやすいからです。一度こちらの欲しいプログラムが生成できた場合ですが、『上記のプログラムに加えてと追加して次の処理のプロンプトを書くとよいです。

上記のプログラムに加えての指示がない場合は、新しいプロンプトに引っ張られて、その前の処理が一部消えてしまったりします。

上記のプログラムに加えて、読み込んだHTMLファイルから
<li class="nama">鈴木太郎</li>
の構造の"鈴木太郎"のようなものを抽出して、CSVにして出力する

といったプロンプトを書くと良いです。

ここで一つ注意なのが、鈴木太郎はあくまでも例でそれ以外の名前も一通り抽出したい際は"ような"とつけると良いです。"ような"をつけないと鈴木太郎しか抽出できないプログラムになることが多いと感じます。

3.段階的に処理を増やしていく際に、うまく追加できない時は一度しきり直す

ChatGPTでは同じスレッドでやり続けると、一つの処理のみで使用するために書いた条件を、それ以降のプロンプトのやりとりでも継続してしまい、その結果、思うようにコードが生成されない時があります。

その場合は、うまくいってるコードから新たなスレッドを始めるのがよいです。
具体的には、うまくいっているコードをそのまま添付して

from bs4 import BeautifulSoup

def convert_html(input_file, output_file):
input_file = 'input.html'
output_file = 'output.txt'

をベースに改良したい。
改良指示は次回以降に書く。


のようにして、始めると、以前のプロンプトに引っ張られることなく、1からプロンプトが書けるようになります。

4.コード生成をChatGPTだけに全て任せない

ChatGPTの使用方法とか掲げながら、ChatGPTに任せないとはどういうことかというと、複雑な処理など、プロンプトに思うような表現が書けないことがあります。
その場合は、プロンプトを頑張るのではなく、自力でコード生成してしまった方が、結果的に完成が早くなります。

では、結局複雑な処理になったらChatGPTは使えないのかというと、そういうわけではなくて、
例えば処理が条件によって分岐して、分岐先の処理にも複雑な処理があって、それを表現するプロンプトの書き方に悩んでいるのであれば、その分岐先の複雑な処理だけに特化したプロンプトをかいて、プログラムを生成します。
また条件によって分岐だけするプログラムをChatGPTで生成します。
複雑な処理のプログラムと、条件によって分岐するプログラムを自力で一つにした方が、それを表現するプロンプトの内容を考えるよりも、はるかに早くコードが作成できることがあると思います。

もし自力で一つにしたものが、構造として間違ってないかなど、気になる場合はそのコードをChatGPTに貼って問題がないかと質問するのも良いと思います。

5.生成されたコードはしっかり確認する

4.コード生成をChatGPTだけに全て任せないにも通じるところではありますが、最後は生成されたプログラムのロジックで問題ないかは確認する必要があると思います。

よくわからないまま使ってしまったら、大事な条件が抜けてしまうことなどもありえます。やはり最後は自分の目で処理の流れに問題ないか、抜け漏れがないかを確認するべきです。

番外編.デバックにはエラーコードをそのまま貼って質問

いざ、生成されたコードをそのまま使用してもエラーになることがあります。
そんな場合は、いままでやりとりをしていたスレッドにエラーコードを貼ると、その原因について対処したコードを生成してくれます。

その場合、ChatGPTが修正部分だけしか、提示してくれないときは、

修正したコードを含み全て出力

といったプロンプトを書くと省略されずにそのまま全部だされるので、修正箇所にはめ込まず全てコピペで済むので修正が楽だったりします。

以上がわたしが、ChatGPTで簡易ツールをサクッと作成したいときにプロンプトを書いた時に注意した点になります。

少しでも参考になれば幸いです。

マイロプスでは一緒に働いてくるエンジニアを募集中です!

あつまる、つながる、きづいていくを実現するためのプロダクトの開発等を一緒にやってみませんか?

  • ITとデザインのチカラで、なにか面白いことができないかと思っている人
  • デザインを制作だけでなく人と人、モノ、コトとの関係性の設計と捉え、 社会を動かす重要な概念だと思っている人。

興味がある方は求人ページをご覧ください。

ウシロゴウチ

テックリード/プロジェクトマネージャー

松岡修造さんの日めくりカレンダーを3つ持ってます

お仕事のご相談、採用についてなど、お気軽にお問い合わせください。