学校向け G Suite 導入の手引き(12)プログラミングを使ったグループ作成の自動化

学校向けG Suite 導入のノウハウです。前回前々回までの作業で、教職員・生徒・保護者のグループ(メーリングリスト)を作成し、グループに教職員・生徒・保護者のアカウントを追加することができました。今日紹介するのは、前々回の作業(教職員・生徒・保護者のグループ作成)をプログラミング(Google Apps script, GAS)によって自動化する方法です。プログラミングの知識があれば、時間のかかる作業も短時間に行うことができます。プログラミングができる先生は、ぜひ挑戦してみてください。


【スポンサードリンク】

Googleスプレッドシートの作成

まずは作成したいグループを整理したGoogleスプレッドシートを作成します。G Suiteの特権管理者のアカウントもしくはグループの管理権限を持っているアカウントを使って、「Google Groupの一括作成サンプル」を参考にスプレッドシートを作成しましょう。

なお、サンプルのスプレッドシートでは「グループの説明」の列が空欄になっていますが、グループの説明を設定したい人は必要に応じて追記してください。

プログラミング(GAS)を実行するための準備

プログラミング(GAS)を使ってGoogle Groupを編集するための設定を行います。先ほどのGoogleスプレッドシートのページから「ツール」→「スクリプトエディタ」をクリックしてください。

すると新しくスクリプトエディタのページが開かれますので、左上の「無題のプロジェクト」と書かれている箇所をクリックしてプロジェクトの名前を登録してください(例:Google Groupの一括作成)。その後、ページにある「リソース」から「Googleの拡張サービス」をクリックしてください。

「Googleの拡張サービス」をクリックすると、次のような画面が表示されます。英語の専門用語がずらっと並んでいますが、ここから「Admin Directory API」と「Groups Settings API」の2つを探し出してください。

「Admin Directory API」と「Groups Settings API」が見つかったら、その右端にある「無効」をクリックして「有効」に切り替えます。

次に、G Suiteの管理画面からセキュリティへ移動します。

セキュリティページの一番下にある「API権限」をクリックします。

このページで「ドメイン で所有する内部アプリを信頼する」にチェックを入れておいてください。

これでプログラミング(GAS)を実行するための準備は完了です。

GASによるプログラミング

下記のプログラミングコードを、先ほどのスクリプトエディタに貼り付けてください。

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];

//実行メニューを作成
function onOpen() {
 var ui = SpreadsheetApp.getUi();
 var menu = ui.createMenu("GAS実行");
 menu.addItem("Googleグループ一括作成", "createGoogleGroup");
 menu.addToUi();
}

function createGoogleGroup() {
 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[3]) { 
     var result = "";
     
     try
     {
       //Groupの作成(コメントアウトすることでGroupのプロパティ更新のみ実行可能)
       AdminDirectory.Groups.insert({email: row[0], name: row[1], description: row[2]});     
       
       //Groupのプロパティ更新
       var group = AdminGroupsSettings.Groups.get(row[0]);
       group.whoCanViewMembership = "ALL_MEMBERS_CAN_VIEW";
       group.whoCanViewGroup = "ALL_MEMBERS_CAN_VIEW";
       group.whoCanPostMessage = "ANYONE_CAN_POST";
       group.whoCanModerateMembers = "OWNERS_AND_MANAGERS";
       group.whoCanJoin = "CAN_REQUEST_TO_JOIN";
       group.whoCanLeaveGroup = "NONE_CAN_LEAVE";
       group.whoCanDiscoverGroup = "ALL_MEMBERS_CAN_DISCOVER";
       group.isArchived = "true";
       group.spamModerationLevel = "ALLOW";
       AdminGroupsSettings.Groups.patch(group, row[0]);
       
       result = "Success"; 
     }catch(e){
       result = "Error:" + e;
     }
     
     //実行結果をResult列にセット
     sheet.getRange(row.rowNumber, 4).setValue(result); 

   }
 }  
}

スクリプトエディタにコードを貼り付けると、次のようになります。この状態で「実行」→「関数を実行」→「onOpen」をクリックしてください。

最初にGASを実行する場合、次のような画面が表示されますので、「許可を確認」をクリックしてください。画面の指示に従って承認していけば大丈夫です。

ここまで終わりましたら、このスクリプトエディタのページは閉じてしまって大丈夫です。

プログラミングの実行

最初のGoogleスプレッドシートのページに戻ると、新しく「GAS実行」というボタンが増えています。ここから「Googleグループ一括作成」のプログラミング」を実行することができます。

「GAS実行」から「Googleグループ一括作成」のボタンを押すと、プログラミングが実行されます。無事にグループが作成されると、スプレッドシートの「実行結果」の列にSuccessの文字が書き込まれます。

もし何らかしらのエラーが発生した場合は、次の画像のように「実行結果」の列にエラーメッセージが表示されます。

プログラミングが失敗した原因を、このエラーメッセージを参考に解決しましょう。無事に解決できたら、「実行結果」の列のエラーメッセージを削除して、もう一度「GAS実行」から「Googleグループ一括作成」のボタンを押せばOKです。

なお、「実行結果」の列が空欄でないグループは作成されずにスキップされるようにプログラミングは作られています。新しいグループを作りたい時は、末尾の行に追記して「Googleグループ一括作成」を実行すれば大丈夫です。

8月13日追記:下記のグループ設定を採用したい場合は、その下のプログラミングコードに変更してご利用ください。

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];

//実行メニューを作成
function onOpen() {
 var ui = SpreadsheetApp.getUi();
 var menu = ui.createMenu("GAS実行");
 menu.addItem("Googleグループ一括作成", "createGoogleGroup");
 menu.addToUi();
}

function createGoogleGroup() {
 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[3]) { 
     var result = "";
     
     try
     {
       //Groupの作成(コメントアウトすることでGroupのプロパティ更新のみ実行可能)
       AdminDirectory.Groups.insert({email: row[0], name: row[1], description: row[2]});     
       
       //Groupのプロパティ更新
       var group = AdminGroupsSettings.Groups.get(row[0]);
       group.whoCanViewMembership = "ALL_MANAGERS_CAN_VIEW"; // 変更箇所
       group.whoCanViewGroup = "ALL_MEMBERS_CAN_VIEW";
       group.whoCanPostMessage = "ALL_IN_DOMAIN_CAN_POST"; // 変更箇所
       group.whoCanModerateMembers = "OWNERS_AND_MANAGERS";
       group.whoCanJoin = "CAN_REQUEST_TO_JOIN";
       group.whoCanLeaveGroup = "NONE_CAN_LEAVE";
       group.whoCanDiscoverGroup = "ALL_MEMBERS_CAN_DISCOVER";
       group.isArchived = "true";
       group.spamModerationLevel = "ALLOW";
       AdminGroupsSettings.Groups.patch(group, row[0]);
       
       result = "Success"; 
     }catch(e){
       result = "Error:" + e;
     }
     
     //実行結果をResult列にセット
     sheet.getRange(row.rowNumber, 4).setValue(result); 

   }
 }  
}