0.はじめに

前回記事、
GASでGoogleグループのメンバー一覧を取得するコードと解説
のエイリアスバージョンです。

Admin画面からエイリアス設定を参照するためには、
少し操作ステップが必要になります。
スプレッドシートに一覧化しておけば参照が楽になり、
また編集履歴から古い情報も確認可能になります。

今回もドメイン名とシート名以外はコピペで使えます。
ぜひ参考にして、活用してみてください。

1.コード

function getGroupListAll(){  
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sh = ss.getSheetByName('test');

  let output = ([["グループ名", "アドレス", "エイリアス"]]);
  let domainList = ["ドメインを入力","管理ドメインが複数ある場合は続けて入力"];
  //ドメインに@は不要

  domainList.forEach(x=> pushArray(output,getGroupInfo(x)));
  inputSpace(output);
  sh.clear();
  sh.getRange(1,1,output.length,output[0].length).setValues(output);
}


//グループ情報を取得
function getGroupInfo(domain){
  let maxResults = 200;  
  let token = '';
  let result = []
  do{
    if(token==""){
      var groupsList = AdminDirectory.Groups.list({domain: domain, maxResults: maxResults})
    }else{
      var groupsList = AdminDirectory.Groups.list({domain: domain, maxResults: maxResults, pageToken: token})
    }
    if(groupsList.groups) {
      for(let g of groupsList.groups){
        let groupName = g.name//グループ名
        let groupMail = g.email//メールアドレス
        
        let nonEditable = g.nonEditableAliases; //自動付与設定されているエイリアス
        let editable = g.aliases; //自動付与以外に個別設定したエイリアス
        let concatedAliase = concatAliase(nonEditable, editable); //結合

        let forPush = [groupName,groupMail];
        result.push(forPush.concat(concatedAliase));
        }
      }
      token = groupsList.nextPageToken
    }while(token)
  return result
}


//エイリアス配列を必要に応じて結合して返す
function concatAliase(nonEditable, editable){
  if(nonEditable && editable){
    return nonEditable.concat(editable);
  }else if(nonEditable && !editable){
    return nonEditable;
  }else if(!nonEditable && editable){
    return editable;
  }else{
    return [];
  }
}


//破壊的に二次元配列に二次元配列を結合する
function pushArray(array1, array2){
    for(let arr2 of array2){
      array1.push(arr2);
  }
}


//長さの違う2次元配列に空白を入力する
function inputSpace(array){
  let wide = 0;
  for(let arr of array){
    if(arr.length>wide){
      wide = arr.length;
    }
  }
  for(let arr of array){
    while(arr.length<wide){
      arr.push('');
    }
  }
}

 

2.出力結果

こんな感じでスプレッドシートに出力されます。

エイリアスリスト取得結果

それぞれのエイリアス設定件数に応じて横に伸びていく形になります。

3.解説

3-1.AdminDirectory

グループ情報取得処理でAdminDirectoryを使用します。
エディタ左側の「サービス」から「AdminSDK」を追加しないと使えません。

Groups.listの公式リファレンス

3-2.構成

以下のような流れになっています。

ヘッダ、ドメインリストを作成

グループ情報を取得する中でエイリアス情報も一緒に取得
└2種類のエイリアスを結合

ヘッダにグループ情報を結合

行ごとの長さが異なるジャグ配列なので、これを貼り付け可能な二次元配列に整形

シートクリアして貼り付け

3-3.ポイント

3-3-1.取得上限

Groups.listは1リクエスト当たりの上限があります。
200件が上限のため200件以上の場合はトークンを取得して
次ページ分の情報取得へ進んでいく必要があります。

コード内で.nextPageToken()してトークンを取得、
do while(token)でトークンがある場合は次のページを取得しています。

3-3-2.nonEditableAliaseとaliaseについて

エイリアスには2種類あります。
アカウント作成と同時に固定的に生成するエイリアスを設定している場合、
そのエイリアスはnonEditableAliaseとして扱われます。

尚、nonEditableAliaseもaliaseも0件の場合はundefinedが返ってきますので、
concatAliase()でundefinedを除外して結合するようにしています。

4.活用方法

オススメの活用方法は「日次トリガーで参照用マスタにする」です。
Admin画面からエイリアス設定を参照するのは少し手間がかかりますし、
Admin画面を参照できる権限者にしかできない事です。

毎日深夜に更新されるよう設定しておけば工数ゼロなので、是非どうぞ。

5.さいごに

エイリアス参照が楽になる方法をお伝えしてきました。

今回の方法は、エイリアスを大量に設定していない限りは
グループメンバー一覧化と異なり情報量が少ないと思うので
タイムアウトやセル数上限についても気にしなくて良いかと思います。

ぜひ気軽に導入してみてくださいね。