見出し画像

#90 QRコードをメールで送信する : ChatGPT にプログラミングさせてみた (1)

とあるところに、以下のような質問が寄せられていました。

Is there a way to create a QR code using the image function in Google Spreadsheets and then send that QR code via email?

日本語に翻訳すると、

Google スプレッドシートの画像機能を使用して QR コードを作成し、その QR コードをメールで送信する方法はありますか?

という感じ。
この質問に対して、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 からの質問①

この問いに対して、以下のように回答しました。

質問への回答①

これだけでは、すべてが明確にはならなかったようで、

ChatGPT からの質問と回答②
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 スプレッドシートは、以下のような感じ。

作成した 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 が生成してくれたプログラムを貼り付けます。

そのままコピペしたプログラム

プログラムを実行しようとすると、以下の記事で説明しているような権限の確認が当たり前のように行われます。

プログラムをメニューから実行すると、

「カスタムメニュー」→「QRコードを送信」でプログラムを実行

列 A に入力した URL が下図のようにメールで届きました。

QR コードがメールで届いた

ChatGPT にお願いしていたように、列 E の内容を判断して二重に送信しないようにチェックも行ってくれていました。

二重送信は行わない

まとめ、雑感

ChatGPT に対して、魔法の言葉からはじめることで、無駄なやり取りをすることなく、作成しようとするプログラムの仕様が明確になったように感じました。

以前は、ChatGPT が吐き出した GAS のプログラムを実行してもそのままでは動作しなかった例があったみたいですが、今回のプログラムは、何の手直しをすることもなく、ChatGPT が作成してくれたプログラムを手順に従って、そのままコピペしただけで、プログラムが動作しました。 単純に「驚かされた」という印象です!

Microsoft が発表した Office 製品群に導入される AI は「コパイロット(副操縦士)」と呼ぶようですが、今回のような AI の利用を「アシスタント」や「コパイロット」と呼ぶのは的を射ているように感じます。

「より賢く」という観点では、AIを使った「コパイロット(副操縦士)機能」が順次拡充されていく予定だという。

起動速度は2倍超 シンプルな見た目にAIコパイロットも搭載――Microsoft Teamsが2023年後半に刷新 Windows向けプレビュー版を公開 - ITmedia PC USER

少なくとも現時点では、AI は自発的に問題を解決してくれないので、何が問題なのかは人(ユーザー)が見つけなければなりません。その問題を AI が手助けしてくれるものの、実際に解決するのはユーザー自身なのは変わりありません。

現状に流されるのではなく、問題意識や改善意識を持っていなければ、AI による便利な機能が導入されても活用されないんだろうな、と思います。

残念なのは… ChatGPT が生成したプログラムには全くコメントが含まれていません。ざっとプログラムを見たところ、複雑な処理をしているわけではなく、わかりやすく処理しているように感じますが、コメントの類がまったく記述されていないので、プログラムを理解していない人は、「ChatGPT が作成したものをただコピペする」だけになってしまうだけでなく、作成したプログラムに変更を加えたいときには苦労するかもしれません。

やはり、自分でもプログラムを作成できるのだけど、うまく効率を上げたいときにはとても有効だと思いますが、ChatGPT の成果物(今回の場合はプログラム)の正当性を判断できない場合には、使いどころが難しいように感じます…

プログラミングそのものを目的にしている わたし のような場合は、物足りなく感じてしまうのは、特殊なケースだと思います。😅

最後に、お決まりのフレーズなどを書いておきます。

  • 一応の動作確認は行っているものの、不慮のトラブルによって損害等が生じても、責任はとれませんので予めご了承ください。

  • コメントを含めても 30行くらいのスクリプトであり、実行に際して目的外の場所への書き出しや収集などは行っていません。

  • 特別なエラー処理は行っていないので、意図しないケースでエラーが発生してしまうかもしれません。どうにもならない場合には、ご連絡ください。

わたし自身にしてみると、このような「スクリプトを作ること」が目的になっているような感じですが、このスクリプトが何かの役に立てば幸いです。
「スキ ♡」を押してもらえると、このようなプログラム作成の励みになります。😍

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?