餅は餅屋。 GAS は Gemini に聞こう

Google Apps Script / GAS は、 Google のサービスで使えるプログラミング言語です。

いまや、コーディングは、やりたいことがわかれば、そのとおりに丁寧に AI に質問することで、実行可能なコードを得ることができます。

私が学生だった 20 世紀の頃は、『プログラミング言語 C』(通称 K&R )というモノクロの本を読みながら、コーディングとコンパイルを繰り返すしかありませんでした。

プログラミングに関しては、人に聞くよりも、 AI に聞いたほうが即役に立つ情報が得られます。

AI 時代のプログラミングこそ、応用の効く基礎知識を大事に

エンド・ユーザー・コンピューティング / EUC(なつかしい……)レベルのプログラミングに必要なのは、言語ごとの仕様を理解したり、教本を読み込むことではありません。

Excel マクロレベルの、基礎知識でいいのです。

その基礎知識が、他のあらゆるプログラミング言語で役に立ちます。

今回は、このブログの右上にある「お問い合わせ」から送信いただいた場合に、自動返信メールを作ろうと思いました。

そこで役立つのは、 GAS そのものの知識ではなく、プログラミングや RPA 全般で使える「考え方」です。

  • 表計算ソフト(スプレッドシート)のフォーマットを事前に把握しておくという考え方
  • スプレッドシートの「データのある最後の行を取得する」という考え方
  • アクティブなものを選択するという考え方

これらの考え方は、エクセル VBA であろうと、 Power Automate であろうと、 GAS であろうと使えます。

自動返信 GAS を実行するための流れ

先人のブログを検索すると、 Google フォームの送信結果を保存する Google スプレッドシートのデータをもとに、 GAS を作成すればよいことが分かりました。

Google フォームから GAS を作成するのではないことがポイントです。

スプレッドシートのメニュー 拡張機能→ Apps Script からコードを作成します。ここで AI ( Gemini ) の助けを借ります。

コードを作成したら、保存します。エラーがあると保存もできないので、行数の左をクリックして●マークをつけ(ブレークポイント)、デバッグして実行完了となれば、コーディングは完成です。

次に、エディタ→トリガーで、

  • 実行する関数を選択:さきほどのエディタに表示されていた関数名
  • イベントのソースを選択:スプレッドシートから
  • イベントの種類を選択:フォーム送信時

の設定をすれば、 Google フォームから送信されるつど、送信していただいた方に自動返信メールが届きます。

コードだけ書いてトリガーを設定し忘れると動きませんので、注意です。

GAS は Google のものなので、Google の Gemini が詳しい説

コードは、いきなり ChatGPT に聞いてしまうのですが、どうも要領を得ない。教えてくれるコードも動きません。

そこで、 Gemini ( Google の AI チャットサービス)に聞いてみることにしました。

すると、回答も早いし、情報も充実しています。

ただ、質問は、具体的に行うことが必要です。

特に今回は、「 Google フォームで送信されたら自動返信メールを送りたい」と言う温度で質問してしまうと、 Google フォームに Apps Script を設定するやり方で返されてしまいます。

データ元が Google スプレッドシートであることを明示しましょう。

さらに、どのスプレッドシートであるかを指定するために、 ID を設定します。実際のご自分のスプレッドシートの URL にある ID をコピー&ペーストします。

また、どの列の、どの行のデータを使用するのか、 Google フォームの送信結果が記録されたスプレッドシートの、実際の行・列を確かめて、それをあてはめて質問する必要があります。

一回質問しただけではうまくいかないので、何度か質問して、具体性を上げていくといいコードが提示されます。

ただし、質問を繰り返していると、メール送信部分のコードが省略されてしまったりします。こんな感じ:

    // 取得したデータを元にメール送信などの処理を行う
// ...

その場合は、過去に書いてもらったコードから、メールのきちんと動く部分を貼り付けたり、変数名を揃えたりする手間が必要です。

そうやって対話を繰り返して作ったコードがこちらです。

最後の質問は、「Google スプレッドシートの最後の行について、B列(メールアドレス)、C列(お名前)、D列(ご質問の内容)を取得するよう、先ほどのコードを改良」というものにしました。

function getLatestFormData() {

    // スプレッドシートを取得 (スプレッドシートのIDを置き換えてください)
    var spreadsheet = SpreadsheetApp.openById('YOUR_SPREADSHEET_ID');
    var sheet = spreadsheet.getActiveSheet();
   
    // 最後の行を取得
    var lastRow = sheet.getLastRow();

    // B列、C列、D列の値を取得
    var email = sheet.getRange(lastRow, 2).getValue(); // B列
    var yourname = sheet.getRange(lastRow, 3).getValue(); // C列
    var question = sheet.getRange(lastRow, 4).getValue(); // D列

    var message = 'お名前: ' + yourname + '様\n\n' +
                'お問い合わせありがとうございます。\n確認後、返信を差し上げます。\n\n' +
                'ご質問の内容:\n' + question;

    MailApp.sendEmail(email, 'お問い合わせありがとうございます', message);   
}

Google スプレッドシートには、 A 列にタイムスタンプ、それ以降の列に、 Google フォームの入力項目の順番でデータが格納されていますので、その最終行(いま送信されたばかりのデータ)を取得します。

スプレッドシートの ID を指定する方法も、 Gemini の回答をよく読むと出ていますので、ブラウザの URL バーの文字列を一部コピーして、’YOUR_SPREADSHEET_ID’ を上書きするように貼り付けます。

シートは、アクティブシートを自動的に選ぶようにしてくれています。

表形式データの最後の行を取得することで、うまく動作しました。

GAS については、なんら前知識がなかったのですが、ちょっとの苦労で動くコードが完成して、うれしいです。

当税理士事務所は、税理士ひとりですが、このようなエンドユーザーの工夫で対応しています。

編集後記

家庭内での食事中のだんらんのあいづちは、村上春樹さんのエッセイに出てくるオガミドリさんの対談のあいうち(というか微笑み)を真似しています。

すると、基本なごやかな会話になります。内田樹さんのいうとおり、家庭内をとげとげしいものにはしない方針です。