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

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

背景

現在所属している会社ではメーリングリストとして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

Why do not you register as a user and use Qiita more conveniently?
  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
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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