グループ管理したい(GroupsApp

1const group = GroupsApp.getGroupByEmail("Googleグループのアドレス");
2const users = group.getUsers();
3console.log("メンバー数 = " + users.length);

GroupsAppクラスを使って、Googleグループを管理できます。 ただし、無料のGoogleグループでは、グループメンバーの追加/削除などはできません。

メンバーを確認したい

 1function getGroupMembers(groupMail) {
 2    const group = GroupsApp.getGroupByEmail(groupMail);
 3    const users = group.getUsers();
 4    const n = users.length;
 5    Logger.log(`Found ${n} members`);
 6    if (n === 0 ) return [];
 7
 8    const members = users.map(user => {
 9        Utilities.sleep(500);
10        return {
11            email: user.getEmail(),
12            role: group.getRole(user),
13        }
14    })
15
16    return members;
17}
18
19function logGroupMembers(members) {
20    Logger.log(JSON.stringify(members, null, 2));
21}
22
23function showGroupMembers() {
24    const members = getGroupMembers();
25    logGroupMembers(members);
26}

グループに追加したい

 1function addUserToGroup(email, options) {
 2    const {
 3        group = "group-name@example.com",    // googlegroupsのドメイン
 4    } = options;
 5
 6    const group = GroupApp.getGroupByEmail(group);
 7
 8    const isRegistered = group.hasUser(email);
 9    if (isRegistered) {
10        Logger.log(`${email}はグループに登録されています`)
11        return
12    }
13
14    group.addUser(email);
15    Logger.log(`${email}をグループに追加しました`)
16}

グループから削除したい

 1function removeUserFromGroup(email, options) {
 2    const {
 3        group = "group-name@example.com"
 4    } = options;
 5    const group = GroupApp.getGroupByEmail(group);
 6    const isRegistered = group.hasUser(email);
 7    if (!isRegistered) {
 8        Logger.log(`${email}はグループに登録されていません`)
 9    }
10
11    group.removeUser(email);
12    Logger.log(`${email}をグループから削除しました`)
13}

メンバー一覧をシートに保存したい

 1// ページ上部のサンプルを再利用する
 2function getGroupMembers() {...};
 3
 4function writeGroupMembersToSheet(members, spreadsheetId, sheetName) {
 5    const sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);
 6    sheet.clear();
 7
 8    const now = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy-MM-dd HH:mm:ss");
 9    Logger.log(`Start at ${now}`);
10
11    // Update last-updated date
12    sheet.getRange("A1").setValue("Last Updated");
13    sheet.getRange("B1").setValue(now);
14
15    // Headers
16    sheet.appendRow(["users", members.length]);
17    sheet.appendRow(["Role", "Email"]);
18
19    // Data
20    for (const member of members) {
21        sheet.appendRow([member.role, member.email]);
22    }
23
24    // Sort
25    sheet.sort(1, false);
26
27    const end = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy-MM-dd HH:mm:ss");
28    Logger.log(`End at ${end}`);
29    sheet.getRange("A1").setValue("Last Updated");
30    sheet.getRange("B1").setValue(end);
31
32    return sheet;
33}
34
35function exportGroupMembers() {
36    const groupMail = "group-name@example.com";
37    const bookId = "スプレッドシートのID";
38    const sheetName = "シートの名前";
39
40    const members = getGroupMembers(groupMail);
41    writeGroupMembersToSheet(members, bookId, sheetName);
42}