#90 QRコードをメールで送信する : ChatGPT にプログラミングさせてみた (1)
とあるところに、以下のような質問が寄せられていました。
日本語に翻訳すると、
という感じ。
この質問に対して、iorad の The Square で以下 URL のような回答が寄せられていました。
この回答では、以下の記事でも紹介されている Google Chart API を使って、QR コードを作成する感じになっています。
Google スプレッドシート内の列 A に入力された URL から、
ENCODEURL 関数
Google Chart API
IMAGE 関数
を用いて、QRコードを作成していますが、質問にあるメールで送信するところには言及していません。Google スプレッドシートで提供されている関数では、メールを送信できないので、ここまでの回答にとどまってしまうのは仕方がないのかもしれません。
以降では、この質問を解決するためのプログラムを、何かと話題の ChatGPT を使って作ってみたいと思います。
ChatGPT と対話する
はじめにお断りしておきますが… 以降の結果は、先日 ChatGPT に対して課金したこともあって、「Model: GPT-4」での結果となっています。無償で提供されている GPT-3.5 では同様の結果が得られないかもしれないことは、あらかじめご了承ください。
魔法の言葉からはじめる
まず、以下のような夜の勉強会で仕入れた ChatGPT に対して
「プロンプトエンジニアになってください。」という魔法の言葉からはじめます。すると、「プロンプトが何についてであるべきか教えていただけますか?」と目的を尋ねられます。
目的を入力
冒頭の質問を日本語に翻訳したものを、入力します。
仕様の不明確な点を言及
すると、ChatGPT 側から仕様が不明確なところを質問してきます。
この問いに対して、以下のように回答しました。
これだけでは、すべてが明確にはならなかったようで、
と質問をくり返しました。
その結果、下図のように「これでプロンプトが完成しました。よろしいですか?」と確認されたので、プログラムの作成をお願いしました。
作成されたプログラム
ChatGPT が作成してくれたプログラムは、次の通りです
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var menuItems = [
{name: 'QRコードを送信', functionName: 'sendQRCode'}
];
sheet.addMenu('カスタムメニュー', menuItems);
}
function sendQRCode() {
var sheet = SpreadsheetApp.getActiveSheet();
var row = sheet.getActiveCell().getRow();
var url = sheet.getRange(row, 1).getValue();
var emailAddress = sheet.getRange(row, 4).getValue();
var isSent = sheet.getRange(row, 5).getValue();
if (!isSent) {
var qrCodeUrl = "https://chart.googleapis.com/chart?chs=150x150&cht=qr&chl=" + encodeURIComponent(url);
var response = UrlFetchApp.fetch(qrCodeUrl);
var blob = response.getBlob().setName("QRCode.png");
var subject = 'QRコードを送信';
var body = 'QRコードをメールで送信します。';
var mailOptions = {
attachments: [blob]
};
GmailApp.sendEmail(emailAddress, subject, body, mailOptions);
sheet.getRange(row, 5).setValue(true);
} else {
Browser.msgBox('この行は既に送信済です。');
}
}
実際にプログラムを実行してみる
動作確認のために作成した Google スプレッドシートは、以下のような感じ。
列 A に URL を入力すると、列 B には Google Chart API を用いて生成する QRコードの URL、列 C にはその URL を画像として表示しています。 ※列 B と 列 C は、プログラムの動作には直接関係がありません。
列 D には送信先となるメールアドレスを入力します。
列 B には、以下のように ARRAYFORMULA 関数で以降の行に関数を設定しなくてもいいようにしています。
=ARRAYFORMULA(IF(A2:A<>"","https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl="&ENCODEURL(A2:A),""))
同様に列 C にも ARRAYFORMULA 関数で、IMAGE 関数を設定してあります。
=ARRAYFORMULA(IF(A2:A<>"",IMAGE(B2:B),""))
スプレッドシートの準備が終わったら… 前述の手順のように、スクリプトエディタに ChatGPT が生成してくれたプログラムを貼り付けます。
プログラムを実行しようとすると、以下の記事で説明しているような権限の確認が当たり前のように行われます。
プログラムをメニューから実行すると、
列 A に入力した URL が下図のようにメールで届きました。
ChatGPT にお願いしていたように、列 E の内容を判断して二重に送信しないようにチェックも行ってくれていました。
まとめ、雑感
ChatGPT に対して、魔法の言葉からはじめることで、無駄なやり取りをすることなく、作成しようとするプログラムの仕様が明確になったように感じました。
以前は、ChatGPT が吐き出した GAS のプログラムを実行してもそのままでは動作しなかった例があったみたいですが、今回のプログラムは、何の手直しをすることもなく、ChatGPT が作成してくれたプログラムを手順に従って、そのままコピペしただけで、プログラムが動作しました。 単純に「驚かされた」という印象です!
Microsoft が発表した Office 製品群に導入される AI は「コパイロット(副操縦士)」と呼ぶようですが、今回のような AI の利用を「アシスタント」や「コパイロット」と呼ぶのは的を射ているように感じます。
少なくとも現時点では、AI は自発的に問題を解決してくれないので、何が問題なのかは人(ユーザー)が見つけなければなりません。その問題を AI が手助けしてくれるものの、実際に解決するのはユーザー自身なのは変わりありません。
現状に流されるのではなく、問題意識や改善意識を持っていなければ、AI による便利な機能が導入されても活用されないんだろうな、と思います。
残念なのは… ChatGPT が生成したプログラムには全くコメントが含まれていません。ざっとプログラムを見たところ、複雑な処理をしているわけではなく、わかりやすく処理しているように感じますが、コメントの類がまったく記述されていないので、プログラムを理解していない人は、「ChatGPT が作成したものをただコピペする」だけになってしまうだけでなく、作成したプログラムに変更を加えたいときには苦労するかもしれません。
やはり、自分でもプログラムを作成できるのだけど、うまく効率を上げたいときにはとても有効だと思いますが、ChatGPT の成果物(今回の場合はプログラム)の正当性を判断できない場合には、使いどころが難しいように感じます…
プログラミングそのものを目的にしている わたし のような場合は、物足りなく感じてしまうのは、特殊なケースだと思います。😅
最後に、お決まりのフレーズなどを書いておきます。
一応の動作確認は行っているものの、不慮のトラブルによって損害等が生じても、責任はとれませんので予めご了承ください。
コメントを含めても 30行くらいのスクリプトであり、実行に際して目的外の場所への書き出しや収集などは行っていません。
特別なエラー処理は行っていないので、意図しないケースでエラーが発生してしまうかもしれません。どうにもならない場合には、ご連絡ください。
わたし自身にしてみると、このような「スクリプトを作ること」が目的になっているような感じですが、このスクリプトが何かの役に立てば幸いです。
「スキ ♡」を押してもらえると、このようなプログラム作成の励みになります。😍
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?