Google Apps Scriptでグループを作成する
Google Apps Scriptで地味な存在ながら非常に重要な機能を担ってるのが「Googleグループ」。単なるメーリングリストとしての機能だけではなく、Google Driveのアクセス権をまとめて付与する場合にも、このグループのアドレスで管理したりします。
そんなグループアドレスを作成するにはちょっと手間が必要です。
リンク
目次
今回使用するスプレッドシート
- グループ一括作成 - Google Spreadsheet
グループの作成で利用するメソッドは、Google Workspaceの管理者権限が必要です。よって通常のユーザ権限では実行ができないので要注意。
事前準備
グループの作成は1つのメソッドではなく、3つのメソッドを使って作成する必要があります。また、その際に利用するクラスは
スクリプトエディタを開き、左サイドバーのサービスの+をクリックして以下の追加を行います。
- Admin SDK APIを追加する
- GroupSettings APIを追加する
図:2つのサービスが必要です
ソースコード
グループを作成 => グループ設定を変更 => メンバーを追加という3ターンで1グループが作成できます。
グループの作成
1 2 3 4 5 6 7 8 9 10 |
//作成 try{ //グループの作成 var group = AdminDirectory.Groups.insert({ email: groupaddress, name : groupname, }); }catch(e){ } |
- AdminDirectory.Groups.insertで追加します
- emailがグループアドレスの指定場所
- nameがグループ名を指定する場所です
グループ設定変更
このグループ作成で一番配慮しなければいけないのが、グループのアクセス設定。一歩間違えると社内のメールが外部の第三者にだだ漏れという事件が嘗てありましたが、それが起こりかねません。また勝手に外部のメンバーがリクエストしてグループに入れるというのもマズイ。
また、内部の人間にむやみに権限を与えて、外部メンバーを追加できてしまうというのもまたマズイということでこれらのアクセスタイプ。これをよく考えてコードで設定する必要があります。
アクセスタイプについて
次のコードのoptionの中身がグループに対する様々なアクセス権を設定するものになります。主によく使うパターンは以下内容になります。
- whoCanViewMembership(メンバーを表示できるユーザ)
ALL_IN_DOMAIN_CAN_VIEW = 組織全体
ALL_MEMBERS_CAN_VIEW = グループメンバー - whoCanContactOwner(グループのオーナーに連絡出来るユーザ)
ANYONE_CAN_CONTACT = 外部含め誰でも
ALL_MEMBERS_CAN_CONTACT = グループメンバー - whoCanViewGroup(会話を閲覧できるユーザ)
これが一番重要な設定で誤った設定をすると第三者にグループメールの中身が世界中に漏洩することになります。
ALL_IN_DOMAIN_CAN_VIEW = 組織内なら誰でも
ALL_MEMBERS_CAN_VIEW = グループメンバー - whoCanPostMessage(投稿出来るユーザ)
こちらも通常はメンバー以外の投稿を認めない設定が良いでしょう
ANYONE_CAN_POST = 外部含め誰でも
ALL_MEMBERS_CAN_POST = グループメンバー - whoCanModerateMembers(メンバーの管理)
通常メンバーにメンバーの管理権限は与えません。
OWNERS_ONLY = オーナーのみ
OWNERS_AND_MANAGERS = オーナーとマネージャのみ - whoCanJoin(グループに参加できるユーザ)
CAN_REQUEST_TO_JOIN = 組織内全員がリクエスト出来る - allowExternalMembers(組織外のメンバーの許可)
false = 外部メンバー追加はさせない
true = 外部メンバーを追加を許可する
※但し、trueでなくとも管理コンソールからは追加できる。しかしGASからはtrueにしておかないと外部メンバーは追加できない
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
//アクセスタイプを設定 var option = { whoCanViewMembership: 'ALL_IN_DOMAIN_CAN_VIEW', whoCanContactOwner: 'ANYONE_CAN_CONTACT', whoCanViewGroup: 'ALL_MEMBERS_CAN_VIEW', whoCanPostMessage: 'ANYONE_CAN_POST', archiveOnly: 'false', whoCanModerateMembers: 'OWNERS_AND_MANAGERS', whoCanJoin: 'CAN_REQUEST_TO_JOIN', allowExternalMembers: 'true' }; try{ //アクセスタイプ設定 var accessType = AdminGroupsSettings.Groups.patch(option, groupaddress); }catch(e){ } |
- optionにて、アクセスタイプを定義します
- 今回のオプションは社内で利用する場合に推奨されるパターンのオプションとなります。
- AdminGroupsSettings.Groups.patchにてアクセスタイプを反映させます
- groupaddressにはグループアドレスを入れます。
図:これがアクセスタイプ
メンバーの追加
1 2 3 4 5 6 7 8 9 |
//メールアドレスを取得 let member = {email: "hoge@tomato.com"}; try{ //グループにユーザーを追加 var res = AdminDirectory.Members.insert(member,groupaddress); }catch(e){ } |
- member変数でJSON形式でメンバーのアドレスを構築
- AdminDirectory.Members.insertにてメンバーを追加する
- groupaddressにてグループアドレスを指定する