見出し画像

【生成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から回答が届く

 指示(プロンプト)を出すと、しばらくして回答が返ってきました。
指示の内容を理解して、スクリプトを改良してくれたようです。

生成AIが修正したコード

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

生成AIからの返信(後半)

さっそく実行してみる

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

GASが動いてメール配信が行われた

 GASを実行すると、すぐにメールが送られてきました。

GASから送られてきたメール

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

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

スプレッドシートの値の転記も完了

図形描画へのスクリプト割り当てを修正する

 最後に、スプレッドシート①で使用していたGASの起動ボタンに、新しいスクリプトを割り当てます。

 図形描画の上で「右クリック」して、「三点リーダー」をクリック、「スクリプトを割り当て」をクリックすると、スクリプトの割り当てを変更することが出来ます。
(図形描画の上で行うのは【右クリック】なので注意してください。
 左クリックを行うと、GASが動いてしまいます)

スプレッドシート①の図形描画

今回作成した新しいスクリプト名をコピペして、確定ボタンを押します。

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

新しく作成した関数名を指定

まとめ

 今回は、スクリプトの中で別のGAS関数を呼び出すことで、連携して使う方法を紹介しました。
次回は、今回作成したGASの内容を解説したいと思います。

最後まで読んで頂き、ありがとうございました。

いいなと思ったら応援しよう!

オレンジピーチ★トシ
この記事が少しでもお役に立てたのなら、サポートいただけると嬉しいです。頂いたご支援は、今後の活動費やコンテンツの質向上に使わせていただきます。