【生成AI×GAS】修正したGASの解説
オレンジピーチのトシです。
前回の記事で、生成AIを用いてGASを修正し、狙いの動きをするプログラムに作り変えることが出来ました。
今回は、そこで作成されたGASのコードを解説していきます。
(前回の記事はこちらから)
生成AIが提示したGASは、これまで解説してこなかった書き方がいくつか登場していますので、その点を紹介できればと思います。
生成されたGASが、どのような中身なのかを理解することで、今後、より的確な指示(プロンプト)を出せたり、間違いを修正出来たりするようになると思います。
GAS初心者の方も、生成AIの力を借りて、少しづつ理解が深まればHappyです!
前回のおさらい
前回の記事で最終的に生成したGASがこちらです。
function myFunction() {
const ss = SpreadsheetApp.openByUrl("スプレッドシートの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アプリを起動してメールを送信
}
GASコードの内容解説
今回のGASでは大きく2つの働きをしています。
・スプレッドシートからメールアドレス情報を取得する。
・Gmailでメールを作成・送信する。
行数も少ないので、1行ずつ説明していきます。
URLを指定して、スプレッドシートアプリを開く。
URLを指定して、スプレッドシートアプリを開きます。
取得できたスプレッドシートはssという変数(定数)に格納しています。
スプレッドシートを開くには、いくつかの方法があり、代表的な方法が次の3つです。
・SpreadsheetApp.openByUrl("スプレッドシートのURL");
→URLを指定してスプレッドシートを取得する
・SpreadsheetApp.openById("スプレッドシートのID");
→IDを指定してスプレッドシートを取得する
・SpreadsheetApp.getActiveSpreadsheet();
→アクティブなスプレッドシートを取得する
(IDでの取得、アクティブなスプレッドシートの取得は、下記の記事も参考にしてください。)
スプレッドシートのシートを取得する。
次に、シートを取得します。
先ほどconst文を用いて「変数(定数):ss」に格納したスプレッドシートアプリから、"配信先メールアドレス"という名前のシートを取得しています。
取得したシートは、「sheet」に格納しています。
シートを取得する、いくつかの方法があり、代表的な方法が次の3つです。
・getSheetByName(sheetName);
→sheetNameという名のシートを取得する
・getActiveSheet();
→アクティブなシートを取得する
・getSheets();
→すべてのシートを配列で取得します。
もっとも左に位置するシートからインデックス0となり、
順に配列へと格納されます。
(複雑なので、詳しい説明は割愛します)
シートの最終行を取得する。
getLastRow() メソッドを用いて、データのある最終行を取得しています。
次の命令で使用するためです。
取得した最終行は、「lastRow」に格納します。
B2セル以下の範囲を取得する。
getRange() メソッドを用いて、指定した範囲を取得します。
取得した範囲は、「recipientRange」に格納しています。
ここで、先ほどの lastRow が登場します。
getRange() メソッドには、範囲の指定の方法がいくつかあり、代表的な方法は次の2つです。
・sheet.getRange(B2:B4);
→セル範囲のアドレスを文字列で示し、その範囲を取得する
・sheet.getRange(2,2,2,1);
→取得したい「行番号、列番号、行数、列数」を示し、
その範囲を取得する。
例では、2行目2列目から、2行、1列の範囲を取得するとなる。
今回のコードでは、2行目、2列目から、最終行-1行(これで行数となる)、1列を取得するという命令になります。
今回の記事のポイントの一つがここです。
メールアドレス情報を取得する。
データの範囲である、recipientRangeの範囲にある値を取得します。
つまり、B2セル以下にあるメールアドレスの値を取得します。
取得した値は、「recipientRange」に格納しています。
メールの件名を定義する。
const文を用いて、subject という変数(定数)に、"スプレッドシートの送信"という文字列を格納しています。
後ほど、メールの件名として使用します。
メールの本文を定義する。
const文を用いて、body という変数(定数)に、本文の内容を格納しています。この際に、改行したい場所に「\n」という文字(エスケープシークエンスと言う)を入れることで、メール本文中で改行が行われます。
メールを送信する
今回のポイントの1つ。メール送信のメソッドです。
GmailApp.sendEmail(recipients,subject,body[,options]); の構文で、メールを送信することが出来ます。
送信先:recipient
件名:subject
本文:body
(今回は使用していませんが、option を設定することで、さまざまな小技が使えます)
また、GmailApp.createDraft(recipient,subject,body); とすると、メールの下書きが作成できます。
//コメント について
すでに何度も出ていますが、GASの命令文の後ろに「//」の記号と、コメントが記載されていることがあります。
このコメントは、スラッシュを2本入力(//)することで記載できます。
コメントに記載した内容は、スクリプトの動作時には読み取られず、動きに影響を与えません。
コードの説明などを記載することで、他の人が読むときや、時間が経ってから読み返すときに、内容を理解することに役立ちます。
また、複数行をまたいでコメントしたい場合は、「/*」と「*/」を使います。
まとめ
今回は、作成・修正したGASのコードを詳しく説明しました。
少しずつGASの構文が理解出来てくると、生成AIにどのような指示(プロンプト)を出せば、目的の回答が返ってくるの想像が付きやすくなります。
また、エラーでGASが動かないときは、自らコードを修正することも出来るようになります。
スプレッドシート操作や、Gmail送信は、GASの中でも使用頻度の高いメソッドです。
今回の記事で、各命令が、どのような役割を持っているのかを理解頂けたならHappyです。
最後まで読んで頂き、ありがとうございました。