【生成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には、次の2つの関数があります。
・関数A: function transferToAnotherFileAndSendEmail()
・関数B: function sendEmail()
エディタのメニューから、それぞれの関数を選択して、実行することも出来ます。
関数を呼び出す
では、関数を呼び出すとは、どのようなものかを紹介します。
今回のGASでは、前半の関数 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);
}
コードの可読性が高まる。
今回の事例は、そこまで行数が多くありませんが、それでも、上から順にコードを読んでいくのは時間がかかります。
作成した直後であれば、まだ記憶の中に内容が残っていますが、時間がたったものや、他人が書いたコードであれば、尚更、読むのが難しくなります。
関数を分けることによって、どの機能がどこに記述されているかが分かりやすくなり、コードの確認や変更の際に、目的の部分を理解しやすくなります。コードを部品(関数)に分けて使いまわすことが出来る。
コードが機能ごとに関数に分かれていれば、その部分だけをコピーして、新たなGASに使いまわすことが出来ます。
他のスプレッドシート操作を行うGASの後ろに、今回の sendEmail() の部分を加えることで、メール配信の機能を簡単に組み込むことが出来ます。部品(関数)ごとに、生成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です。
最後まで読んで頂き、ありがとうございました。