Google Apps Scriptを用いてグループアドレスメンバーを取得

こんにちは。ひさです。

Google Appsの管理コンソールは見た目は美しいのですが、色々使いづらい・・・
最低限用意するから必要ならカスタマイズしなよ!ってことなのかなぁと思います。

ユーザー単位でそのユーザーが所属するグループアドレスは参照できますが、
グループアドレスに所属するユーザーはいちいちグループを開かないといけないので不便。
というわけで一覧を取得するスクリプトを作成してみました。
 

必要な設定

  Google Apps管理コンソールの[セキュリティ]からAPIアクセスを有効にします。

f:id:ihisa:20150406163842p:plain  

スプレッドシートの設定

  Google Drive上でスプレッドシートを作成し、[ツール]→[スクリプトエディタ]を起動します。
エディタ上の[リソース]から[Googleの拡張サービス]を選択し、今回必要とするAPIを有効化します。

f:id:ihisa:20150406163853p:plain f:id:ihisa:20150406163903p:plain

続いて画面表示の通り、[Googleデベロッパーコンソール]を押下し、メニューから[API]→対象のAPIを選択、有効化します。

f:id:ihisa:20150406163930p:plain  

取得コード

function GetGroupAddress()
{
  // アクティブなシート取得
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
 
  // グループ一覧の取得
  var groups = AdminDirectory.Groups.list({
    domain: 'sanwasystem.com'
  });
  
  if(groups) {
    var rows = [];
    var rowcount = 0;
   
    // ヘッダ行
    rows.push(["GroupAddress", "Description", "Name", "DirectMembersCount", "UserAddress"]);
   
    // データ行
    for(var i = 0; i < groups.groups.length; i++){           
      // グループに所属するメンバーの取得
      var members = AdminDirectory.Members.list(groups.groups[i].email).members                       

      for (var j = 0; j < members.length; j++){
        var cols = [];         
        cols.push(groups.groups[i].email);
        cols.push(groups.groups[i].description);
        cols.push(groups.groups[i].name);
        cols.push(groups.groups[i].directMembersCount);
        cols.push(members[j].email);
       
        // 行追加
        rows.push(cols);
      }
     
      // 最終的な行数計算
      rowcount = rowcount + members.length;
    }
   
    // 書き込み
    sheet.getRange(1, 1, rowcount +1 , 5).setValues(rows);
  } 
}

  GASはパフォーマンス向上のため、APIをなるべくコールしない様作成する必要があります。
ついでにスプレッドシート上から呼び出せるようメニューに追加します。
 

function onOpen() {
  SpreadsheetApp.getUi()
  .createMenu("管理")
  .addItem("グループアドレス一覧取得", "GetGroupAddress")
  .addToUi();
}

 

実行

追加されたメニューから実行します。
f:id:ihisa:20150406163942p:plain 

見事に取れました。よかったね!
f:id:ihisa:20150406163951p:plain