実践編:ChatGPTに手伝ってもらう
話題のAI:ChatGPT様にプログラムのお仕事を手伝って頂こうと思います。
ChatGPTの使う用途としてはいろいろ考えられますが今回は自分の書いたプログラムのリファクタリングをお願いしてみます。
まずは openai.com にログイン
↑メールアドレス登録してログイン
↓無事ログインできればこのような画面がでます
リファクタリングしてもらう
今回は↓で書いたプログラムを使います。
実践編:Google Workspace:GAS(App Script)で当番通知
画面の下部のメッセージボックスに
”以下のソースコードをリファクタリングしてください。”
(Shift + ENTERで改行して続けて↓のコードを貼り付け)
function sendChat(msg)
{
var url = "https://chat.googleapis.com/v1/spaces/xxxxxxxx"
var message = {'text': msg}
var options = {
'method': 'POST',
'headers': {
'Content-Type': 'application/json; charset=UTF-8'
},
'payload':JSON.stringify(message)
};
UrlFetchApp.fetch(url, options);
}
function myFunction() {
const mySheet = SpreadsheetApp.getActiveSheet()
const lastRow = mySheet.getDataRange().getLastRow()
const values = mySheet.getDataRange().getValues()
const toDay = new Date();
for(let i=0; i < lastRow; i++)
{
const name = values[i][0]
const date = values[i][1]
if(!date ||
date.getFullYear() != toDay.getFullYear() ||
date.getMonth() != toDay.getMonth() ||
date.getDate() != toDay.getDate()
)
{
sendChat(`今日の当番は${name}です`)
mySheet.getRange(i+1,2).setValue(toDay)
break
}
}
}
ちゃんとリファクタリングしてくれます
どのように修正したかも解説してくれます
もし文章が英語になっていたら
”日本語で解説してください”とチャットしてください
注意点
ただChatGPTの言うことは鵜呑みはできません。
if(!date ||
date.getFullYear() != toDay.getFullYear() ||
date.getMonth() != toDay.getMonth() ||
date.getDate() != toDay.getDate()
)
↑リファクタリングされる前のプログラムを↓のように変えてしまっては結果が変わってしまいます。
if (!date || date.getTime() !== today.getTime())
”日単位で違う” ➔ ”秒単位で違う” に変わってしまっています。
同じ質問をしても結果が毎回違う
まとめ
現段階では当たりとして活用して最終チェックは人の目で確認が良いかと思います。
おまけ
リファクタリング以外にもイチからプログラムを作成してくれます。
追記( 2023/02/16)
修正依頼をする
ChatGPTの使い方に慣れてきた今日この頃。
再度リファクタリングについて検証してみたところ
リファクタリング内容が悪い場合には「◯◯が間違えているので修正してください」と指摘すると結果が良くなるとわかりました。
function sendChat(msg) {
const url = "https://chat.googleapis.com/v1/spaces/xxxxxxxx";
const message = { 'text': msg };
const options = {
'method': 'POST',
'contentType': 'application/json; charset=UTF-8',
'payload': JSON.stringify(message)
};
UrlFetchApp.fetch(url, options);
}
function getCurrentDuty() {
const sheet = SpreadsheetApp.getActiveSheet();
const values = sheet.getDataRange().getValues();
const today = new Date();
for (let i = 0; i < values.length; i++) {
const name = values[i][0];
const date = values[i][1];
if (!date || date.toDateString() !== today.toDateString()) {
sheet.getRange(i + 1, 2).setValue(today);
return name;
}
}
return null;
}
function myFunction() {
const name = getCurrentDuty();
if (name) {
sendChat(`今日の当番は${name}です`);
}
}
関数にまとめたところは素晴らしいですね。さらに関数名も明確で役割も良い。
toDateString こんな関数あったんですねw
この記事が気に入ったらサポートをしてみませんか?