
【生成AI×GAS】別の関数を呼び出す
オレンジピーチのトシです。
今回は、GASによって別の関数を呼び出す方法を紹介します。
GAS(Google Apps Script)を作っていくと、複数のGASを組み合わせて使いたいと思うことがあります。
スクリプトの中で別のGAS関数を呼び出すことで、連携して使うことが出来ます。
無料で使える生成AIには、文字数制限があり、長文のGASを作ることが出来ません。その際には、いくつかの部品を組み合わせることで、作りたいスクリプトを作成することが出来ます。
完成イメージ:やりたいこと
現状と実施したいことをまとめると、次のようなものです。
作業の工程は3段階で、現在は次のような作業を実施。
1.スプレッドシート①に、人が必要情報を入力
2.スプレッドシート②に、GASで転記
3.配信メールを、毎週月曜日に関係者宛に自動配信

この作業を、次のように変更したいと思います。
1.スプレッドシート①に、人が必要情報を入力
2.スプレッドシート②に、GASで転記
3.GASの転記と連動して、転記後すぐに自動配信
GAS導入前は、人が作業を行っていたので、転記する人の業務負荷を考慮して、メール配信(その業務の締め切り)を「毎週月曜日に配信」としていました。
しかし、GASで転記、GASでメール配信が出来るようになると、転記してから配信までの間は、単なる手待ち時間になってしまい、無駄であることが分かりました。
そこで、今回、GAS転記とメール配信を連動させて、一連の操作で完結させようと思います。
関数を呼び出して、GASを連携させる
生成AIに指示を出す
今回も生成AIを使って、進めていきたいと思います。
今回、使用した生成AIは、GoolgeのGeminiです。
生成AIは、同じ質問をしても、異なる回答が返ってくることが多いので、もしこの記事をご覧になって、同じように質問しても、違う回答となるかもしれません。しかし、簡単なプログラムなので、概ね動くものにはなるかとおもいます。 (生成AIの安全性については、様々な議論が行われているため、会社で使う場合は、自社の利用規定などを確認してから使用してください。 また、個人情報などは入力しないか、生成AIごとの推奨に基づいた形での利用をお薦めします。)
下記のような指示(プロンプト)を作成しました。
「関数A」と「関数B」のところには、前回までに作成した2つのGASをそのまま貼り付けています。
(スプレッドシートのIDやURLは、各自のものを貼り付けてください)
2つのGASについて知りたい方は、下記の記事も読んでみてください。
GAS(Google Apps Script)で次の操作が出来るスクリプトを考えてください。
下記の関数Aを修正する形で、新しいコードを作成してください。
・関数A: 別のスプレッドシートに値をコピーします。
・関数B: メールを自動配信します。
関数Aが実行されたら、関数Bを呼び出して実行する
#関数A
function transferToAnotherFile() {
const sourceFileId = '「スプレッドシート1のIDを記入」'; // 転記元ファイルのIDを入力
const sourceSheetName = '転記元'; // 転記元シート名を入力
const targetFileId = '「スプレッドシート2のIDを記入'; // 転記先ファイルのIDを入力
const targetSheetName = '転記先'; // 転記先シート名を入力
const sourceSpreadsheet = SpreadsheetApp.openById(sourceFileId);
const sourceSheet = sourceSpreadsheet.getSheetByName(sourceSheetName);
const targetSpreadsheet = SpreadsheetApp.openById(targetFileId);
const targetSheet = targetSpreadsheet.getSheetByName(targetSheetName);
const sourceRange = sourceSheet.getRange('A2:D2'); // 転記元の範囲
const targetRange = targetSheet.getRange('A8:D8'); // 転記先の範囲
const valuesToTransfer = sourceRange.getValues();
targetRange.setValues(valuesToTransfer);
}
#関数B
function sendEmail() {
const ss = SpreadsheetApp.openByUrl("「GASでメール送信」のURLを記入"); // スプレッドシートのURLを指定
const sheet = ss.getSheetByName("配信先メールアドレス"); // シート名を指定
const lastRow = sheet.getLastRow(); // 最終行を取得
const recipientRange = sheet.getRange(2, 2, lastRow - 1, 1); // 2列目2行目から最終行までの範囲を取得
const recipients = recipientRange.getValues(); // メールアドレス情報を取得
const subject = "スプレッドシートの送信"; // 件名
const body = "みなさん、お疲れ様です。\nスプレッドシートへの転記が終了しましたので、リンクを送信します。\nリンク:******"; // 本文を入力
GmailApp.sendEmail(recipients, subject, body); // Gmailアプリを起動してメールを送信
}
生成AIから回答が届く
指示(プロンプト)を出すと、しばらくして回答が返ってきました。
指示の内容を理解して、スクリプトを改良してくれたようです。

指示で与えた関数A、関数Bの内容も理解しています。
変更点や注意点も書いてくれており、ほんと、優秀なアシスタントです。

さっそく実行してみる
スプレッドシート①を開いて、「function transferToAnotherFile()」に置き換える形で、新しいコードをコピペします。
保存ボタンで保存して、実行ボタンを押してGASを実行します。
(初めての起動の時は、権限の承認などを聞かれると思います。
そのあたりのことは、過去の記事で紹介しています。)
GASが動いてメール配信が行われた
GASを実行すると、すぐにメールが送られてきました。

実際には、GASのコードの中の、下記の部分に******に、配信したいスプレッドシートのURLを記載して下さいね。

スプレッドシート②を開くと、たしかに、値がコピーされています。

図形描画へのスクリプト割り当てを修正する
最後に、スプレッドシート①で使用していたGASの起動ボタンに、新しいスクリプトを割り当てます。
図形描画の上で「右クリック」して、「三点リーダー」をクリック、「スクリプトを割り当て」をクリックすると、スクリプトの割り当てを変更することが出来ます。
(図形描画の上で行うのは【右クリック】なので注意してください。
左クリックを行うと、GASが動いてしまいます)

今回作成した新しいスクリプト名をコピペして、確定ボタンを押します。
反対に、GASコード内のスクリプト名を変更する手段もありますが、スクリプト名は内容を表現した名前の方が良いので、新しく割り当てを変更することをお勧めします。

まとめ
今回は、スクリプトの中で別のGAS関数を呼び出すことで、連携して使う方法を紹介しました。
次回は、今回作成したGASの内容を解説したいと思います。
最後まで読んで頂き、ありがとうございました。
いいなと思ったら応援しよう!
