見出し画像

【生成AI×GAS】作成したGASの解説

オレンジピーチのトシです。
前回の記事で、別の関数を組み合わせてGASを作り、狙いの動きをするプログラムを作成しました。
今回は、作成したGASのコードを解説していきたいと思います。
(前回の記事はこちらから)


前回のおさらい

 前回の記事で生成したGASがこちらです。
大まかな動きは次の通り。
 関数Aで「スプレッドシート①のA2~D2セルの値を、スプレッドシート②のA8~D8セルにコピーする。
 その後、関数Bで「配信先メールアドレス」に記載されている宛先に、指定のメールを送る。
(コピーして使用する場合は、スプレッドシートのIDとURLをご自身のものに変更してくださいね。)

function transferToAnotherFileAndSendEmail() {
  // 関数Aで使用する変数
  const sourceFileId = '「スプレッドシート1のIDを記入」';
  const sourceSheetName = '転記元';
  const targetFileId = '「スプレッドシート2の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);

  // 転記完了後にメールを送信
  sendEmail();
}

// 関数B (そのまま)
function sendEmail() {
  const ss = SpreadsheetApp.openByUrl("「GASでメール送信」のURLを記入");
  const sheet = ss.getSheetByName("配信先メールアドレス");
  const lastRow = sheet.getLastRow();
  const recipientRange = sheet.getRange(2, 2, lastRow - 1, 1);
  const recipients = recipientRange.getValues();
  const subject = "スプレッドシートの送信";
  const body = "みなさん、お疲れ様です。\nスプレッドシートへの転記が終了しましたので、リンクを送信します。\nリンク:******";
  GmailApp.sendEmail(recipients, subject, body);
}

GASの内容解説

関数(Function)とは

 関数とは、一連の処理をまとめたもののことで、GASでは下図の function に続く文。GASのコード全体が関数です。

GASの関数

今回のGASには、次の2つの関数があります。
  ・関数A: function transferToAnotherFileAndSendEmail()
  ・関数B: function sendEmail()

エディタのメニューから、それぞれの関数を選択して、実行することも出来ます。

関数を選択

関数を呼び出す

 では、関数を呼び出すとは、どのようなものかを紹介します。
今回のGASでは、前半の関数 transferToAnotherFileAndSendEmail の、この部分になります。

 // 転記完了後にメールを送信

 sendEmail();

関数 transferToAnotherFileAndSendEmail の一部

 関数 transferToAnotherFileAndSendEmail の中に、sendEmail()の記述があることで、関数 sendEmail() を呼び出して実行している訳です。

(今回は、関数の呼び出しの最も簡単な例として、引数や戻り値のない事例を紹介しました。引数や戻り値を利用すると、より高度な関数の連携が出来るようになりますので、また別の記事で紹介したいと思います。)

関数を分ける利点

 このように関数を分けることには、いくつかの利点があります。
関数を分けずに、次のように記述しても、同じ動きをするGASを作ることが出来ますが、行数が長くなり、内容を理解するのが大変になってきます。

function transferToAnotherFileAndSendEmail() {
  // 変数を指定
  const sourceFileId = '「スプレッドシート1のIDを記入」';
  const sourceSheetName = '転記元';
  const targetFileId = '「スプレッドシート2の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);

  // 転記完了後にメールを送信
  const ss = SpreadsheetApp.openByUrl("「GASでメール送信」のURLを記入");
  const sheet = ss.getSheetByName("配信先メールアドレス");
  const lastRow = sheet.getLastRow();
  const recipientRange = sheet.getRange(2, 2, lastRow - 1, 1);
  const recipients = recipientRange.getValues();
  const subject = "スプレッドシートの送信";
  const body = "みなさん、お疲れ様です。\nスプレッドシートへの転記が終了しましたので、リンクを送信します。\nリンク:******";
  GmailApp.sendEmail(recipients, subject, body);
}
  1. コードの可読性が高まる。
     今回の事例は、そこまで行数が多くありませんが、それでも、上から順にコードを読んでいくのは時間がかかります。
    作成した直後であれば、まだ記憶の中に内容が残っていますが、時間がたったものや、他人が書いたコードであれば、尚更、読むのが難しくなります。
     関数を分けることによって、どの機能がどこに記述されているかが分かりやすくなり、コードの確認や変更の際に、目的の部分を理解しやすくなります。

  2. コードを部品(関数)に分けて使いまわすことが出来る。
     コードが機能ごとに関数に分かれていれば、その部分だけをコピーして、新たなGASに使いまわすことが出来ます。
     他のスプレッドシート操作を行うGASの後ろに、今回の sendEmail() の部分を加えることで、メール配信の機能を簡単に組み込むことが出来ます。

  3. 部品(関数)ごとに、生成AIで作成することが出来る。
     私が一番、おすすめしたい理由は、この点です。
    生成AIには、一度の指示(プロンプト)で入力できる文字数、また、一度の出力で生成出来る文字数に限りがあります。特に、無料で使える範囲では、制限はより厳しいものになっています。
     実施したい内容が複雑になれば、それに応じて、指示をする文章も長くなります。指示の内容を部品ごとに分けて、小規模なGASを複数作ることで、限られた文字数の中で、全体のGASを作り上げることが出来ます。

生成AIの文字数制限

代表的な生成AIで、文字数制限を調べてみました。(2024年6月調べ)
各社、明確には文字数として規定はしていないようですが、さまざまに制限があるようです。

OpenAI ChatGPT:
 OpenAIからは明確な数値は出ていないようですが、GPT3.5を用いた場合、日本語の入力で約6,000文字、回答で約2,000文字だそうです。
一見多いように見えますが、少し長いコードだと、すぐに上限に達してしまいます。

Microsoft Copilot:
 Microsoft Copilotは、ガイドがありました。
スタイルによるようですが、2,000文字程度のようです。

Google Gemini
 無料版で約7万字から10万字程度という情報がありました。多いですね。
私自身、Geminiは使い始めたばかりなので、もっと頻繁に触れてみたいと思います。

どの生成AIもプランによって、入力制限などが変わるため、入力文字数が多い人は、有償版を検討するのも選択肢だと思います。

まとめ

 今回は、関数の呼び出しについての解説を行いました。
GASを用いて、より複雑な作業を自動化しようとすると、どうしてもコードは長くなります。
 今回紹介した、関数を呼び出しを活用して、より高度な自動化・効率化に繋がればHappyです。

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

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