Help us understand the problem. What is going on with this article?

GASでGoogleグループを一括作成する

More than 1 year has passed since last update.

背景

現在所属している会社ではメーリングリストとしてGoogleグループを利用しているので、新規作成を手動ではなく自動で作成する仕組みを作り、作業負荷を減らそうと考えました。

手順

スプレッドシートの準備

まずは新規でスプレッドシートを用意します。
以下の画像のようにスプレッドシートを構成してください。
スクリーンショット 2019-03-22 14.17.46.png
項目名はわかりやすいものであれば、何でも大丈夫です。

そして、作成するメーリングリストのアドレスをA列に、名前をB列に入力します。
※C列には何も入力しないでください。実行後に自動的に日付が入力されます。
スクリーンショット 2019-03-22 14.23.59.png

スクリプトの作成

スプレッドシートのメニューから[ツール]→[スクリプト エディタ]をクリックして、スクリプトエディタを起動します。エディタに以下のコードを貼り付けてください。

// メニューに表示させる
function onOpen(e){
    var arr = [
        {name: "Google Group作成", functionName: "createGroupBatch"}
    ];
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    spreadsheet.addMenu("スクリプト", arr);
}

// メイン処理
function createGroupBatch() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var lastcolum = sheet.getLastColumn();
  var lastrow = sheet.getLastRow();
  var startRow = 2;
  var numRows = lastrow - 1;
  var dataRange = sheet.getRange(startRow, 1, numRows, 3);
  var data = dataRange.getValues();

  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    row.rowNumber = i + 2;
      //ステータス行に何も入っていなければ作成します。    
    if (!row[2]) {
      //現在日データ作成 (現在時刻)
      var today = new Date();
      //グループアカウントを作成します。
      CreateGroup(row[0],row[1]);
      //2重作成を防ぐためステータスを変更します。
      sheet.getRange(row.rowNumber, 3).setValue(today); 
    }  
  } 
}

// Group作成
function CreateGroup(groupID,name) {
  var res = AdminDirectory.Groups.insert({email:groupID,name:name});
  var group = AdminGroupsSettings.Groups.get(groupID);
  // メンバーはグループとして投稿出来ないようにする
  group.membersCanPostAsTheGroup = "false"; 
  // スパムフィルタリングを無効にする
  group.spamModerationLevel = "ALLOW";
  // ディレクトリにこのグループを表示する
  group.showInGroupDirectory = "true";
  // グループへのメッセージをアーカイブする
  group.isArchived = "true";
  // メンバーシップを見ることができる人に組織のすべてのメンバーを追加する
  group.whoCanViewMembership = "ALL_IN_DOMAIN_CAN_VIEW";
  return res.id;
}

コードは以下の記事を参考にしております。
http://www.mitori.co.jp/labo/archives/203

解説

// メニューに表示させる
function onOpen(e){
    var arr = [
        {name: "Google Group作成", functionName: "createGroupBatch"}
    ];
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    spreadsheet.addMenu("スクリプト", arr);
}

こちらの記述でスプレッドシート上からGASを実行出来るようにしています。スプレッドシートに表示されるタブの名前を”スクリプト”に、表示されるメニューを”Google Group作成”に設定しています。
スクリーンショット 2019-03-26 10.37.28.png

// メイン処理
function createGroupBatch() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var lastcolum = sheet.getLastColumn();
  var lastrow = sheet.getLastRow();
  var startRow = 2;
  var numRows = lastrow - 1;
  var dataRange = sheet.getRange(startRow, 1, numRows, 3);
  var data = dataRange.getValues();

  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    row.rowNumber = i + 2;
      //作成日に何も入っていないかを確認    
    if (!row[2]) {
      //現在時刻の確認
      var today = new Date();
      //グループアカウント作成
      CreateGroup(row[0],row[1]);
      //2重作成を防ぐためステータスを変更
      sheet.getRange(row.rowNumber, 3).setValue(today); 
    }  
  } 
}

スプレッドシートに記載されているグループアカウントを作成します。
作成日に何も入っていない場合、作成するアドレスに記述されているグループアカウントを作成します。作成後に2重作成を防ぐために実行日を作成日の欄に記入します。

// Group作成
function CreateGroup(groupID,name) {
  var res = AdminDirectory.Groups.insert({email:groupID,name:name});
  var group = AdminGroupsSettings.Groups.get(groupID);
  // メンバーはグループとして投稿出来ないようにする
  group.membersCanPostAsTheGroup = "false"; 
  // スパムフィルタリングを無効にする
  group.spamModerationLevel = "ALLOW";
  // ディレクトリにこのグループを表示する
  group.showInGroupDirectory = "true";
  // グループへのメッセージをアーカイブする
  group.isArchived = "true";
  // メンバーシップを見ることができる人に組織のすべてのメンバーを追加する
  group.whoCanViewMembership = "ALL_IN_DOMAIN_CAN_VIEW";
  return res.id;
}

グループアカウントを作成する関数になります。
AdminDirectory.Groups.insertでグループアカウントを作成し、作成したグループアカウントの設定を変更しています。こちらは以下のリファレンスを参考に適宜修正してください。

https://developers.google.com/admin-sdk/groups-settings/v1/reference/groups/update

sho-ichi
SIer → Web会社 → Web会社 → Web会社と渡り歩いて、現在は社内インフラ全般の企画・設計・構築・運用・業務改善、セキュリティまわりの仕事をしています。最近はGAS(Google Apps Script)を使って業務改善することにはまっています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away