背景
現在所属している会社ではメーリングリストとしてGoogleグループを利用しているので、新規作成を手動ではなく自動で作成する仕組みを作り、作業負荷を減らそうと考えました。
手順
スプレッドシートの準備
まずは新規でスプレッドシートを用意します。
以下の画像のようにスプレッドシートを構成してください。
項目名はわかりやすいものであれば、何でも大丈夫です。
そして、作成するメーリングリストのアドレスをA列に、名前をB列に入力します。
※C列には何も入力しないでください。実行後に自動的に日付が入力されます。
スクリプトの作成
スプレッドシートのメニューから[ツール]→[スクリプト エディタ]をクリックして、スクリプトエディタを起動します。エディタに以下のコードを貼り付けてください。
// メニューに表示させる
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作成”に設定しています。
// メイン処理
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でグループアカウントを作成し、作成したグループアカウントの設定を変更しています。こちらは以下のリファレンスを参考に適宜修正してください。