目的
GASを使って、Googleグループへのメンバー追加(削除)を一括で処理したい。
背景
GoogleグループをML等で活用する場合、入社時や依頼時に大量のメンバー追加(削除)が求められるので、その処理を簡単にしたいと考えました。
事前準備
下記のようなスプレットシートを用意しておきます。スプレットシート名は「member」とします。
画像の2行目以降は空白ですが、本来であれば以下の①~⑥の情報が入っている想定です。
①Member,②ML,③Email,④Action,⑤Result,⑥Interval
①:testuser@test.test(追加/削除したいメンバーのアドレス)
②:testgroup(Googleグループの@より前の部分)
③:testgroup@googlegroup(Googleグループのアドレス)
④:add or remove(追加ならadd、削除ならremove)
⑤:空白(GAS実行時に処理の結果が入力されます)
⑥:ALLMAIL or NOMAIL etc(詳しくは補足を参考ください)
コード
function mem_change() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('member');
var lastColum = sheet.getLastColumn();
var lastRow = sheet.getLastRow();
var startRow = 2;
var numRows = lastRow - 1;
var dataRange = sheet.getRange(startRow, 1, numRows, lastColum);
var data = dataRange.getValues();
for (var i = 0; i < data.length; ++i) {
var row = data[i];
row.rowNumber = i + 2;
// Result列がブランクであれば処理を実行
if (!row[4]) {
var result = "";
try {
var action = row[3];
if (action === "add") {
result = AdminDirectory.Members.insert({ email: row[0], role: "MEMBER", delivery_settings: row[5] }, row[2]);
result = "Success";
} else if (action === "remove") {
result = AdminDirectory.Members.remove(row[2], row[0]);
result = "Success";
} else {
result = "Error: Actionパラメータに誤りがあります。add/removeのいずれかをセットしてください。";
}
} catch (e) {
result = "Error: " + e;
}
// 実行結果をResult列にセットします
sheet.getRange(row.rowNumber, 5).setValue(result);
}
}
// インターバルを設定
Utilities.sleep(5000);
// 2回目のループが何を行うかを追加する必要があります
for (var i = 0; i < data.length; ++i) {
var row = data[i];
row.rowNumber = i + 2;
// Result列がブランクであれば処理を実行
if (row[5]) {
var result = "";
// 何かの処理を行う
}
}
}
補足
基本的に、参考情報にあるサイトのコードを活用しています(ほぼコピです笑)。
手を加えたところでいくと、F列のIntevalの設定の追加しています。
あまり知られていないことですが、Googleグループには所属するメンバーに対してメールを送るタイミングを細かく設定することができます。
このタイミングは、大きく3パターンあり、常に所属メンバーへメールを送る(通常の形)か、1日に1回昨日分のメールがまとめてメンバーに送られるパターン、そして一切メンバーにメールが送られないパターンです。
その設定をF列のところで行っています。細かい引数についてはGoogleGroupのAPIサイトから確認することができます。
また、メンバーを追加/削除する対象のGoogleグループの指定はあくまで③(C列)になります。
②(B列)は、GWSの管理コンソール上のGoogleグループの一覧表示の部分で、会社によってはアドレス表示で問題ないと思います(②を設定しなくても③が設定されていればOK)。