2016年11月18日金曜日

【備忘録】Google Script を使った G Suite の Google Group for Business への一括メンバー登録方法について

以前、
でG Suiteからユーザーやグループ情報を取得する方法はメモっていましたが、すっかり失念してました。そのときにはあまり必要に感じてなかったのですが、Google Group for Business に1000を超えるメンバーを一括追加する必要がでてきました。Google Group for Business へのメンバー追加を G Suite の管理コンソールから行う場合には、25名ずつしか登録できません。まぁ出来なくはないですし、これまで 300ぐらいならチマチマとしてました。ただ今後チマチマやったいられないのと 1000を超えてくるとやる気が失われます。ので、API経由で登録せざるを得ません。そこでいろいろ試してみました。

今回は、Google Script 編になります。

Google Script を使った方法を試してみた!


数百程度ならまぁ、これでも問題ないと思います。2000ぐらいも、まぁいけなくはないかなーという感じです。ただし一括は200〜300ぐらいが限界です。
  1. 6分以上かかる実行はエラーになる
  2. 処理が遅い
  3. 2回目の実行時にエラーがでることがある
     ※スクリプトを閉じて開き直して実行しなければならなかったり。。。

    (var group = AdminGroupsSettings.Groups.get(groupEmail); でエラー)
とはいえ、Googleスプレットシートで手軽に登録できる便利さは中々のものです。
ので紹介はしておきます。スクリプトについては、Google Groups へのメンバー移行 (http://net-newbie.com/apps/GoogleGroupsMigration.html) を参考に、そこに掲載されていたスクリプト「Mailman2Groups.gs」(GitHUB)をフォークして、若干カスタマイズして「Mailman2Groups.gs (kimipooh)」(GitHUB)公開しました。

利用のための準備(管理コンソール)



  1. G Suite 管理コンソールにログイン
  2. セキュリティ > API リファレンス > API アクセス > APIアクセスを有効にする にチェックをいれて保存します。
これで、G Suite アカウントより、G Suiteの Admin API が利用できるようになります。
普段許可していないのであれば、 一時的にオンにして使用し終わったらオフにすればいいでしょう。

利用のための準備(Google スプレットシート)


  1. G Suiteの管理者(管理コンソールにログインできる)アカウントにて、Googleドライブにアクセスし、Googleスプレットシートを新規作成
  2. ツール→スクリプトエディタをひらいて、「Mailman2Groups.gs (kimipooh)」(GitHUB)のコードを入れて保存
  3. APIの有効化
    1. リソース>Developers Consoleプロジェクトの作成
      (Admin SDK、Groups Settings API)
    2. リソース>Googleの拡張サービス
      (Admin Directory API、Group Settings API)
上記は、Google Groups へのメンバー移行 (http://net-newbie.com/apps/GoogleGroupsMigration.html) を参照してみてください〜。

利用方法


Step 1. グループ情報とメンバー情報の準備


上で作成した Google スプレットシートにおいて、Google Group for Business の作成とメンバー追加のための情報を付与します。

A列に項目を書き、B列に値を書きます。
email = グループ名
name = グループの表示名
description = グループの説明
owners = グループのオーナー(一人以上いないと、スクリプト実行時にエラーがでて動きません。もし何らかの理由でグループのオーナーを不在にしたければ、管理コンソールより、グループのオーナーを削除してください。オーナーを削除してもG Suite管理者はグループを管理できます。)
members = 追加したいメンバーのメールアドレスを列挙してください。



Step 2. グループ作成とメンバー追加(Google Scriptの実行)


  1. ツール > スクリプト エディタを開く
  2. function addGroupMembers(groupEmail, users)  関数内の
     var start = 1;
     var end = 250;
    をチェックし、一度に登録する数を調整する。
    手元では250ぐらいなら一括で行けました。300だと失敗することがありました。
  3. 実行 > main でグループ作成とメンバー追加の処理を開始

     ※6分以内に終了するか、終了しきれずにエラーがでるか、Backgroud error がでるかのどれかかなと思います。
    1. 終了しきれずにエラー:start と endの差をもう少し少なめに設定して再実行してみてください。
    2. Background error:一度スクリプトエディタを閉じて、再度 Googleスプレットシートの ツール > スクリプト エディタより開いて、実行 > main で再実行してみてください。
  4. エラー無く終了すれば、
     var start = 251;
     var end = 500;
    など処理する行を指定しないそて、再度実行(実行 > main)してみてください。
  5. 1200 登録数があって、ラストは
     var start = 1000;
     var end = users.length;
    など、最終行(users.length)を指定すると処理が少しは速まるかなーと思います。

Step 3. グループの設定


初期設定で、「招待されたメンバー以外投稿不可」にしていますが、その他の細かい設定は入れ込んでいません。ので適宜設定するとよいです。初期設定をスクリプトにて変更したければ

function updateGroupSettings(groupEmail) {
  var group = AdminGroupsSettings.Groups.get(groupEmail);
  group.replyTo = "REPLY_TO_LIST";      // 返信はMLへ
  group.allowExternalMembers = "true";  // 組織外メンバーを許可
  group.isArchived = "false";           // メッセージをアーカイブしない
  group.whoCanJoin = "INVITED_CAN_JOIN";    // 招待した人しか登録できない(kimipooh)
  AdminGroupsSettings.Groups.patch(group, groupEmail);
} // updateGroupSettings()

にいろいろ追加すればいいでしょう。
何を追加できるかは、
を参照にしてみてください。
たとえば、
  •   group.whoCanJoin = "INVITED_CAN_JOIN";  
は、
entry/apps:whoCanInvite/text()(string)
==
ALL_MEMBERS_CAN_INVITE -- Managers and members can invite a new member candidate.
ALL_MANAGERS_CAN_INVITE -- Only managers can invite a new member. This includes the group's owner.
NONE_CAN_INVITE -- No one can invite a new member candidate.
===
となっているので、この3つの値を文字で指定することになるので上記のような設定になります。
entry/apps:maxMessageBytes/text() (integer)<メッセージサイズの設定>
は、
===
The maximum size of a message, which, by default, is 1Mb.
===
と値は「整数」でといっているので、
  • group.maxMessageBytes = 25;
とかにすると、 25Mb 指定になるのかな〜って思いますね。  

まぁ、とにかくこれで、2000ぐらいまでなら、まぁまぁ出来なくはないね、、って感じじゃないかなと思います(遅いけど)。

2016年11月17日 @kimipooh

0 件のコメント:

コメントを投稿