ほうこうレポート

ほうようポケモン、こうもりポケモン。

【無知識OK!】手直しせずChatGPT「だけ」でコードを書いてもらうコツ|プロンプト10箇条を実戦経験を元に紹介【Python・Bat・その他プログラミング】

はじめに

ChatGPTにPythonのコードを書いてもらったけど、エラーが出てよくわからなかった。
自分ではPythonを勉強していないから手直しできなくて、でもChatGPTにお願いしても大量のエラー

やっぱり自分でもプログラミング勉強しないとだめかなぁ。

勉強しなくても十分作れました。

本記事では、ChatGPTのみでコーディングを実際にやってみて得たコツをご紹介します。

自分で手直しせずにPythonコードを書ける?

ここ何か月かでかなりの回数、ChatGPTを含めた生成AIにプログラムを作成してもらってきました。
長いものだと200行弱、かつGUI画面の検索ウインドウをもって別のCSVデータを検索するプログラムなんかも作ってきてもらったのですが、

こちらの入力次第で全然結果が変わる


というのをかなり身に染みて感じました。

適当に指示をぶん投げるとエラーだらけのコードが返ってくるし、
その修正方法なんかを明確に指示してあげたりするときちんと直って返ってきたり


AIとも付き合い方次第で全然得られる結果が変わります。



下準備:ChatGPTを使えるようにする

まぁまずはChatGPTを使えるようにしましょう。
簡単なので一緒にやってみてください。
既に使えるよって方は読み飛ばしてください。

アクセスorダウンロード

まずはChatGPTのサイトにアクセスします。

chatgpt.com

スマホの場合はアプリをダウンロードします。

ログインする

Googleアカウントでログインするだけ。


完了

無事使えるようになります。



プロンプトは不要

巷ではすごい人たちが、ChatGPTに「プロンプト」なるものを読ませて色々すごいことをしていると思います。

これは、予めChatGPTにこういうことをしなさいと初期設定を与えておくというものなのですが、

一個二個プログラムを書くくらいなら別に要りません。

特に気にせず、気楽にいきましょう。





コツ1:エラーをそのまま伝える

まずは簡単なやつ。
一度もらったコードを実行してみてダメだったら、エラーが大量に出るはずです。

そのエラーをそのまま貼り付けましょう。

「こんなエラーが出ました。このエラーを解析してプログラムを修正してください(エラー内容ペースト)」

これを繰り返すだけで、簡単な奴なら出来上がります。

コツ2:修正してほしい元のコードを貼り付けながら用件を伝える

Aの機能とBの機能を実装したい!
Aはすんなりいったけど、Bはエラーがたくさん出た。
直しているうちにこいつAの機能忘れてやがる。

エラーを貼り付けて出力を繰り返していくと、
だんだんAIが元のプログラムを忘れて一部機能を失ったりします。

それを防ぐためには、
エラーだけでなく
修正してほしい元のコードも貼り付ける
ことが有効です。



クリックしても動きませんでした。直してください。
↓こんなエラーが出ていました
~~~~

↓あなたが書いてくれた、直してほしいコードはこれです
~~~~~
====

こんな感じで。
これだけでも結構違います。



コツ3:要件をこちらでまとめてあげる

ニンゲンに仕事を頼むときも、
・紅茶を1番席
・コーヒーを2番席
・サイダーを3番席
と箇条書きのメモでまとめて伝えると間違いがないじゃないですか。
AIも同じようなことが言えます。

すなわち、
実装してほしい条件を全部明確に箇条書きで伝える
と漏れなく実装してくれる可能性が増えます。

上手くいかなくなったら、前に指示した項目を振り返って箇条書きで修正内容をまとめて指示すると満足のいくものが仕上がりがちです。

コツ4:自分の目的をなるべく詳しく伝える

ChatGPTは思っているよりも頭がいいです。
我々が目的を伝えると、それを理解してくれます。
ただこれを作ってほしいと言うのではなく、
こういう場面で使うからこれを作ってほしい

と伝えることで、より自分のイメージに近いものが出来上がります。

コツ4実践

例えば、月ごとの降水量を比べるプログラムを作るとしましょう。
このとき
「入力したデータをグラフにして表示するプログラムを作って」
とAIにお願いすると、

数値データをカンマ区切りで入力してください(例: 10,20,30,40): 10,20,30,40

こんなのを生成してきました。
Ohってかんじ。
色々足りないですよね。

そこで、こんな風に指示を変えてみました。
「降水量データを視覚的に比較するプログラムを作ろうと思っています。
Pythonで入力したデータをグラフにして表示するプログラムを作ってください」

すると

地点名をカンマ区切りで入力してください(例: 東京, 大阪, 名古屋): Tokyo,大阪
それぞれの地点の降水量をカンマ区切りで入力してください(例: 120, 80, 100): 120,80

お、なんかやる気あるなって感じになりました。
まぁグラフ出してみたら文字化けしてたんですけど。



コツ5:直したい部分を細かく具体的に伝える

さっきの降水量グラフについて、
「エラーが出ています直してください」
を何回か繰り返してみて、ここまで直りました。
・タイトルなどは日本語表示可能
・地点名は英語のみ対応

フォントのエラーらしいんですが、
何回エラーを直してと言っても
同じプログラムを出してくる!

それ直ってないって言ってるよね??
となりました。皆さんもまま経験あると思います。

フォントが直っていません、直してくださいと伝えてもダメだったんですが、

直したい部分を細かく具体的に伝える
ことで解決しました。

(エラー文章)がまた出てるんだけど メイリオのフォントを表のラベルに使うにはどうすればいいの?

「フォントが違うからメイリオを使いたい」という指示だったのを
「フォントを表のラベルに適用したい」
と変えることで、表内のフォントに関する記述を追記してくれました。

コツ6:どんな時にエラーが出たのかを伝える

複数の処理を行うプログラムを作る際は、
エラーの文章だけでなく
エラーが起こったタイミング
も伝えると効果的です。

こうすることで、今までは上手くいっていたところを破壊することがかなり少なくなります。



コツ7:そのプログラムの動き方を具体的に伝える

今から伝えるプログラムの動作を想像してください。

キャラクターの説明画面を作りたいです
aを押したら画面が切り替わるようにしてください

↑皆さんこれ作りたいもの伝わりました?

多分ふんわりイメージくらいならいけるんですけど、作れるほどのイメージはないはずです。
・説明画面はいくつあるのか
・全部の説明画面を見せたらどうするのか
とかが分からないせいで伝わってないんですね。


ニンゲン同士で伝えてわからないもんはAIに伝えても分かりません。

以下のように直してみます。

ゲームのキャラクター説明画面を作りたいです。

ゲーム画面は3つあります。
・キャラの立ち絵
・キャラのステータス
・キャラの自己紹介

プログラムの動きは以下の通りです。
1.プログラムを立ち上げると、キャラクターの立ち絵画面が表示される。
2.「A」キーを押すと、キャラのステータス画面に移る
3.キャラのステータス画面で「A」キーを押すと、キャラの自己紹介画面に移る
4.自己紹介画面で「A」を押すと、プログラムが終了する

こんな感じで、一からプログラムの動作を全部書いてあげるとイメージばっちりのものが出てきやすいです。
まぁ要件定義ってやつですね。会社と同じ。

コツ8:名前を付ける

これも分かりやすくするためのコツ。
実はさっきもやっていたのですが、複数の段階やパーツがある場合は「名前を付ける」と効果的です。

例えばさっきの例でいうと

ゲームのキャラクターの説明画面を作りたいです
ゲーム画面は3つあります。
・キャラの立ち絵画面
・キャラのステータス画面
・キャラの自己紹介画面
aを押したら画面が切り替わるようにしてください

みたいな感じに。
こうすると、
特定の画面のみのエラーを直すと他の画面で不具合が発生した
みたいなときに指示を出しやすくなります。

立ち絵を右に表示してもらったら、ステータスの表も右に行っちゃった!
「立ち絵画面では表示を右に、ステータス画面の表は変えないようにしてください」
みたいな感じで伝えやすくなります。




コツ9:プログラムの不具合の理由を推測して伝える

さっきのゲームの例でいきましょう。

Aを押すと画面を進め、Bを押すと画面を戻す処理を作りたい。
自己紹介画面でBを押すと終わるようにしたい。

・立ち絵画面でAを押すと、ステータス画面に。
・立ち絵画面でBを押すと、自己紹介画面に。
・ステータス画面ではAを押すと、自己紹介画面に。
・ステータス画面ではBを押すと立ち絵画面に。
・自己紹介画面ではAを押すと立ち絵画面に。
・自己紹介画面でBを押すとプログラムが終了する

↑こんな風に指示を出してみます。

しかし実際の動作では
「自己紹介画面でBを押すと、ステータス画面に移動してしまった」
プログラムが終わってくれなかった。

という状況が起こったとしましょう。

この時、

自己紹介画面でBを押してもプログラムが終了しませんでした。直してください

よりも、

自己紹介画面でBを押してもプログラムが終了しませんでした。
これは自己紹介画面フラグが立っておらず、自己紹介画面でもBが画面を戻すボタンになってしまっているのではないでしょうか?
直してください

みたいな感じで、直っていない理由までわかりそうだったら伝えるとめちゃくちゃ効きます

コツ10:会話をリセットする

どうしてもだめだったら、
一旦会話を切り替える
と上手くいきやすいです。

生成AIはランダム性の強いコンテンツです。
同じプロンプトを入力しても、上手く書いてくれる時と全然書いてくれない時があります。
これはもうそういうものだと認識するしかないです。

なので、いい答えを書いてくれるまでリセマラするといい時もあります。
もちろんこちらのプロンプトが分かりづらかったりしたらリセマラしてもちゃんと書いてはくれないわけですが、ランダム性があることはよく覚えておくべき

また、前までの話からこちらのプロンプトに対して変な勘違いをしてしまっている可能性があるので、
その勘違いを正すのは結構骨が折れます。
そういった勘違いを一度リセットするという意味でも、会話の切り替えが有効に働く時があります。

会話の切り替え方は簡単で、NewChatを選んで今まで書いてたコードを貼り付けて修正内容を言うだけ。



おすすめテク:手直しをしやすいコードを書いてもらう

やっぱ細かい部分は自分で直せた方が早い時もあります。

でもどこ直したらいいとかわからない!
という人のためのおすすめテクニックがこれ。

「~~のパラメータは自分で直したいので、わかりやすいようにコードの一番上に変数を集めておいてください」


例えばアプリの色を直したいとするじゃないですか。
そうするとアプリの一番上に
ボタンの色 = #~~~~~~
背景の色 = #~~~~~~
みたいな感じでまとめてくれるんですよ。

これすると自分で直せて手っ取り早いです。



おわりに

生成AIってすごいですね。
僕は何もやってないのにどんどん便利なスクリプトが書ける。
皆さんも知らない言語をAIに書かせていきましょう。