目次
- 宛名をつけたメールをGASで一斉送信させるための第一歩
- 配列の中に配列が入っている「2次元配列」とは?
- ついに「宛名つきメールの一斉送信」を実行!
2022.01.06
ビジネスパーソンの一日において実は結構な時間を割かれることになるメール処理。社内の人材育成にあたって、うまく効率化できる手段はないかと模索している人事の方は少なくないのでは?
『【業務自動化 × プログラミング】宛名をつけたメールを一斉送信しよう』は無料でメールの集計、請求書の発行、カレンダーへの予定登録といった作業を自動化できるツール、Google Apps Script(GAS)について2日間で学び、「宛名付きのメールを自動で一斉送信」できるようになるSchooの授業です。
講師は、株式会社call.jp代表兼エンジニアの木村喜生(きむら・よしお)先生。この記事では、いよいよ「メールを一斉送信するためのコードの書き方がレクチャーされる」2日目の授業の一部を抜粋してお届けします!
2次元配列とは「配列の中に配列が入っている」状態を指します。先ほどのプログラムの「console.log(values);」直下に以下の記述を追加してみてください。
var arrays = [1,2,3];
//[“id”,”name”,”email”]
//[1, “kimura”,”gmail”]
//[2, “test”,”gmail”]
「//」を頭につけることで、その行はコメントアウトされ、プログラム上で実行されなくなります。続いて、上の記述を次のように改変してください。
var arrays = [
[“id”,”name”,”email”],
[1, “kimura”,”gmail”],
[2, “test”,”gmail”]
];
//
//
//
「これが2次元配列の形になります」と先生。配列の中に配列が含まれていることがわかりますね。
この状態で、プログラムの末尾に以下の記述を追加します。
console.log(arrays);
console.log(arrays[1]);
console.log(arrays[2]);
この状態でログを確認すると、[1, “kimura”,”gmail”]、[2, “test”,”gmail”]など、配列の中の配列の選択した箇所のみが抽出されていることがわかります。配列は「0」からスタートし、「1、2……」と番号が割り振られています。[1]のように、[]内で番号を指定することで、特定の要素のみを呼び出すことができたというわけです。
また「console.log(arrays[1][2])」のように指定することで、2次元配列における「1番目の配列のなかの2番目の要素」だけを呼び出すことも可能になります。
「実際にJavaScriptで2次元配列を扱うことはあまりありませんが、スプレッドシートやGASにおいてはものすごくたくさんでてきます」と先生。なぜなら、“スプレッドシートで値を取得したときに返ってくるのが2次元配列だから”。エラーが起こっても対処できるよう、体系立てた理解を心がけましょう。
配列の考えと1日目の授業で取り扱った変数、そして繰り返しの「for文」の考えを組み合わせることで、データ入力自動化の可能性は大きく広がります。例えば、プログラムに以下の「for文」を付け加えてみてください。
for(var i = 1; I < arrays.length;i++){
arrays[i][2];
}
これで、1番目の配列の2番目の値と、2番目の配列の2番目の値が抽出されるはずです。わかりやすいよう以下のように、それぞれ末尾に「1」「2」とつけくわえましょう。
var arrays = [
[“id”,”name”,”email”],
[1, “kimura”,”gmail1”],
[2, “test”,”gmail2”]
];
ログを確認すれば、「gmail1」「gmail2」の2つの値が呼び出されていることが確認できるはずです。
それでは、メールを一斉送信するためのアドレスを取得するコードを書いていきましょう。まずは「Ctrl(Command) + /」で先ほどのテストコードをすべてコメントアウトさせます。
そして、記述するのが以下のコードです。
for(var i = 1; I < values.length;i++){
var email = values[i][3];
console.log(email);
}
「期待通りの結果が得られました」と木村先生。
スプレッドシートのD列に記載されたgmailアドレスだけが呼び出されていることがわかります。画像に記載されているメールアドレスは先生の所有するアドレスです。送信できたことが確認できるよう、みなさんも自分の所有するアドレスに変更して試してみてください。
続いて、タイトルや本文、会社名、担当者のお名前なども追加していきます。
for(var i = 1; I < values.length;i++){
var title = “新商品のお知らせ”;
var companyName = values[i][1];
var name = values[i][2];
var body = `
${companyName}
${name}様
新商品のお知らせです。
ご確認の程、何卒よろしくお願い致します。
`;
var email = values[i][3];
console.log(email);
GmailAp.sendEmail(email, title, body);
}
上記のプログラムが記述できたら、さっそく実行してみましょう。スプレッドシートに記載したメールアドレスのメールボックスを開くと、メールが3通届いているはずです。
それぞれ、宛名と名前が変更できているかも確認してみてください。
ここで「スプレッドシートから本文を作る方が早いのでは?」と尋ねるコメントが。先生は「正しいは正しい」と認めつつ、今回のように変数の中に本文を記述する方法や、Googleドキュメントに用意したデータを丸ごと持ってくるなど色々な方法があると話します。
用途や自分にとっての使いやすさに合った方法を選びましょう。
さて、2日間のプログラムが当初に設定したゴールにたどり着くところまで授業の内容をご紹介しました。もっと深く知りたいという方や疑問があるという方は、まずは実際に先生がプログラムを記述する様子を見ながら学べる実際の授業動画にアクセスしてみてください。
そこからさらに「こんなことに応用できないか?」と発想を広げ、人事の担当者であれば社内で勉強会を開催するなどどんどんGASの活用に取り組んでいきましょう。
文=宮田文机
ペンシルからのプッシュ通知を設定しておくと、新着記事のお知らせなどをブラウザ上で受信できて便利です。
通知を受信しますか?
実際に手を動かす作業がメインとなる2日目の授業。
早速、スクリプトエディタに「sendmail.gs」というタイトル名のファイルを新たに作成して、コードを記載していきます。
Googleスプレッドシートにはスプレッドシート全体をつかさどるSpreadsheetApp、複数のシートを束ねるSpreadsheet、一枚一枚のシートを管理するSheet、シート内のセルの情報を管理するRangeの4つのクラスが存在し、適切なひとつを選び、それぞれが持つメソッドを実行させることで、やりたい操作を実行させることができます。
まず行いたいのが、サンプルのスプレッドシートに記載された「タイムスタンプ」「会社名」「お名前」「メールアドレス」のデータをそのまま持ってくる操作。
Function sendmail(){
var ss = SpreadsheetApp.openById(“スプレッドシートのid”);
var sheet = ss.getSheetByName(“シート名”);
var range = sheet.getDataRange();
var values = range.getValues();
console.log(values);
}
「スプレッドシートのid」には対象のスプレッドシートのURLの「/d/」と「/edit#」の間の文字列をコピーして挿入してください。「シート名」はそのままシートの名前(今回の場合は「シート1」)を、指定すれば問題ありません。「getDataRange()」はシートにあるデータをある分だけまとめて持ってくるメソッド、「getValues」は2次元配列の値を持ってくるメソッドです。
「実行」をクリックすると「Authorization required」と銘打たれた認証画面がポップアップされるので、「許可を確認」を選択し、続いて現れたウィンドウでGoogleのアカウントを認証します。
ここまで進めて「Ctrl + Enter」(Macの場合は「Command + Enter」)でログを確認すると、コードが実行され二次元配列で文字列が取得されていることが確認されました。