本文へ移動
技術を、自社の仕事に。
判断と実行を助けるメディア

記事を検索

Googleグループ 外部メンバーを追加できる人をAPIで確認

目次 · 7項目

取引先や業務委託先を入れたメーリングリストで、グループのオーナーが社外のアドレスを自由に追加できる状態になっていないか。情シスとしては気になるものの、管理コンソールでグループを1つずつ開いて確かめるのは、数が増えると現実的ではありません。スクリプトや管理ツールでグループの設定をまとめて読んでいるなら、その出力に「外部の人を誰が追加できるか」が含まれているかを確かめる価値があります。

Google Workspace のグループの設定を読み書きする Groups Settings API の定義(Discovery 文書)に、whoCanAddExternalMembers という項目が載っています。値は「管理者だけが追加できる」「エンドユーザーが追加できる」の2つです。Google は2026年2月23日に、グループの「内部」「外部」の分類を厳しくする変更を告知しており、管理コンソールには「外部メンバーを追加できるのを管理者だけに限る」下位の設定が加わると案内しています。この項目は、その設定を API から読み書きするためのものと見られます。一方、Google が公開している Go・Python 向けクライアントライブラリに保存された定義の写しには、この項目がまだありません。本記事では、定義の原文と写しとの差分を示したうえで、既存の allowExternalMembers との関係、現在の設定を棚卸しする方法、ライブラリごとの注意を整理します。

定義に載った whoCanAddExternalMembers

2026年10月10日に取得した Groups Settings API の Discovery 文書では、グループの設定を表す Groups の項目に次の説明があります。

Specifies who can add external members. UPDATE and PATCH requests ignore this field if allowExternalMembers is false. Possible values are:

  • ONLY_ADMINS_CAN_ADD_EXTERNAL_MEMBERS
  • END_USERS_CAN_ADD_EXTERNAL_MEMBERS

訳すと「外部メンバーを誰が追加できるかを指定する。allowExternalMembers が false の場合、UPDATE と PATCH のリクエストはこの項目を無視する」です。型は文字列で、値は次の2つです。

  • ONLY_ADMINS_CAN_ADD_EXTERNAL_MEMBERS(名前からは、管理者だけが外部メンバーを追加できる)
  • END_USERS_CAN_ADD_EXTERNAL_MEMBERS(名前からは、エンドユーザーも外部メンバーを追加できる)

定義にあるのは値の名前だけで、「管理者」にどのロールが含まれるか、「エンドユーザー」がオーナーだけか一般のメンバーも含むかの説明はありません。括弧書きは名前から読み取れる範囲です。

読み書きには既存の groups.get・groups.patch・groups.update を使い、スコープも従来どおり https://www.googleapis.com/auth/apps.groups.settings です。開発者向けリファレンス(2026年9月3日更新)の groups リソースの説明にも、同じ文言でこの項目が載っています。

Groups Settings APIで外部メンバーに関わる2つの項目の関係。allowExternalMembersがfalseなら社外の人はメンバーになれず、whoCanAddExternalMembersは更新時に無視される。trueの場合にwhoCanAddExternalMembersの2つの値、ONLY_ADMINS_CAN_ADD_EXTERNAL_MEMBERSとEND_USERS_CAN_ADD_EXTERNAL_MEMBERSが意味を持つ

いつ載ったのか、分かっていること

クライアントの写しにはない

Google のクライアントライブラリのリポジトリに保存された Discovery 文書の写しと、10月10日時点の文書を比べました。

  • googleapis/google-api-go-client の groupssettings/v1/groupssettings-api.json(最終更新 2024年6月20日、commit 20ffdd8000)
  • googleapis/google-api-python-client の groupssettings.v1.json(最終更新 2024年6月25日、commit 979de72f)
  • googleapis/discovery-artifact-manager の groupssettings.v1.json(最終更新 2024年7月1日。リポジトリ自体は2026年10月9日まで毎日更新)

3つの写しとも、整形をそろえて比べた差分は2か所だけでした。1つは whoCanAddExternalMembers の追加です。もう1つは、参加の権限を表す whoCanJoin の ANYONE_CAN_JOIN の説明から、「If you later disable this option, any external addresses already added to users’ groups remain in those groups.(後でこのオプションを無効にしても、すでにグループに追加された外部アドレスはグループに残る)」という1文が消えたことです。定義には理由が書かれていませんが、後述する2026年2月の告知では、グループを内部に切り替えると外部メンバーが削除される挙動に変わると案内されており、この1文が消えたこととは辻褄が合います。allowExternalMembers の説明は変わっていません。

版の番号は変わっていない

Discovery 文書の版を示す revision は、写しも現在の文書も 20220614 のままです。版の番号を見て定義の変化を検知する仕組みでは、今回の追加に気づけません。写しが2024年6月以降に更新されていないのも、版が変わっていないことと関係している可能性がありますが、これは推測です。

したがって、定義の上で項目が加わった時期は「2024年6月に取得された写しにはなく、2026年10月10日の文書にはある」という範囲でしか言えません。

2026年2月の告知との関係

Google Workspace Updates ブログは2026年2月23日に、Googleグループの内部・外部の分類を厳しくする変更を告知しました。管理者ヘルプの解説(2026年10月13日更新)とあわせると、要点は次のとおりです。

  • 組織外のメンバーを許可する設定(英語の画面では Allow members outside your organization)がオフのグループ(内部のグループ)には、組織内のメンバーしか入れなくなる。これまでは、管理者による追加や、外部メンバーを含むグループの入れ子によって、外部の人が入れた
  • この設定は「Allow external members in the group」に名前が変わり、外部メンバーを追加できるのをグループの管理者だけに限る下位の設定が加わる
  • 現在は内部なのに外部メンバーがいるグループは、外部のグループに分類し直され、外部メンバーを追加できるのは管理者だけ、という設定になる
  • グループを外部から内部に切り替えると、直接のメンバーである外部の人は完全に削除される
  • 時期は「2026年第2四半期」「2026年5月15日以降」とされ、対象はすべての Google Workspace のお客様

告知とヘルプには whoCanAddExternalMembers という項目名は出てきませんが、ヘルプは「更新された Groups Settings API」で分類を変えられると書いています。項目の説明と値の名前から、この下位の設定に対応する項目と編集部は判断しています。

次の点は確認できていません。

  • 項目の既定値(値を設定していないグループで何が返るか)
  • 変更が実際に適用されたかどうか(ヘルプは10月13日の更新時点でも「2026年第2四半期に開始」と書いており、適用済みとする告知は見つかりませんでした)

allowExternalMembers との関係

外部メンバーに関わる項目を、定義の説明から並べると次のとおりです。

  • allowExternalMembers: 組織外のユーザーがグループのメンバーになれるか。値は文字列の "true" / "false"
  • whoCanAddExternalMembers: 外部メンバーを誰が追加できるか。allowExternalMembers が false のときは、更新しても無視される
  • whoCanModerateMembers: メンバーを誰が管理できるか(ALL_MEMBERS・OWNERS_AND_MANAGERS・OWNERS_ONLY・NONE)

編集部の整理では、「外部の人を入れてよいか」を allowExternalMembers が決め、入れてよいグループについて「その操作を誰に任せるか」を whoCanAddExternalMembers が決める、という二段で読めます。メンバーの管理を部署の担当者に任せる場合の権限は、グループのメンバー管理のカスタムロール削除の記事で扱いました。3つの項目を組み合わせたときに実際に誰が何をできるかは、実際のグループで確かめていません。

もう1点、告知どおりに変更が適用されていれば、allowExternalMembers を false にするのは「これから外部の人を入れない」だけの操作ではなくなります。直接のメンバーである外部の人がグループから削除され、元に戻しても自動では戻りません(ヘルプでは、直接のメンバーは手で追加し直す必要があるとしています)。

注意したいのは「ignore(無視する)」という書き方です。allowExternalMembers が false のグループに whoCanAddExternalMembers だけを PATCH しても、エラーにならずに反映されない可能性があります。定義からは、同じリクエストで allowExternalMembers を true にした場合に反映されるのかも読み取れません。更新したら、必ず groups.get で読み直して値を確かめます。

現在の設定を棚卸しする

グループの一覧と設定を読む

組織のグループの一覧は Admin SDK Directory API の groups.list で取得します(customer に my_customer を指定、1回に最大200件)。読み取りだけなら https://www.googleapis.com/auth/admin.directory.group.readonly で足ります。各グループの設定は、Groups Settings API の groups.get で読みます。

Python のクライアントで、グループごとの外部メンバーの設定を CSV に書き出す例です。

# グループごとの外部メンバーの設定を CSV に出す(編集部の例。実際のAPIでは未検証)
import csv, sys
from googleapiclient.discovery import build

def audit(creds):
    directory = build("admin", "directory_v1", credentials=creds)
    settings = build("groupssettings", "v1", credentials=creds)
    out = csv.writer(sys.stdout)
    out.writerow(["email", "allowExternalMembers", "whoCanAddExternalMembers", "whoCanModerateMembers"])
    token = None
    while True:
        page = directory.groups().list(customer="my_customer", maxResults=200, pageToken=token).execute()
        for g in page.get("groups", []):
            s = settings.groups().get(groupUniqueId=g["email"]).execute()
            out.writerow([g["email"], s.get("allowExternalMembers"),
                          s.get("whoCanAddExternalMembers", "(返ってこない)"),
                          s.get("whoCanModerateMembers")])
        token = page.get("nextPageToken")
        if not token:
            break

項目が返ってこないグループは、空欄ではなく「返ってこない」と記録しておきます。既定値が分からないため、空欄を「管理者だけ」とも「誰でも」とも読み替えないためです。

ライブラリによっては項目が落ちる

定義の写しに項目がないことが、実際のスクリプトにどう影響するかを確かめました。手元の PC で、whoCanAddExternalMembers を含む応答を返すテスト用のサーバーを立て、各ライブラリから groups.get と groups.patch を呼んでいます(Google の API には接続していません)。

ライブラリ(版)取得した結果に項目が残るか更新で項目を送れるか
Go:google.golang.org/api v0.301.0残らない(構造体に項目がなく捨てられる)送れない
Python:google-api-python-client 2.201.0残る(応答の辞書をそのまま返す)送れる
Node.js:@googleapis/groupssettings 12.0.1残る(型定義にはない)送れる

Go のクライアントで棚卸しをしていると、Google が値を返していても出力に現れず、「設定されていない」と誤って判断するおそれがあります。Go で扱う場合は、HTTP クライアントで API を直接呼んで JSON を読む作りを検討してください。

もう1点、定義ではレスポンスの形式を表す alt の既定値が atom(XML)になっています。今回のテストでは、Go と Python のクライアントは自動で alt=json を付けていましたが、Node.js のクライアントは付けていませんでした。Node.js では alt: 'json' を明示しておくと安全です。実際の API が alt を省いたときに何を返すかは確かめていません。

Apps Script では、Google の公式サンプル(googleworkspace/apps-script-samples)で、高度なサービス AdminGroupsSettings を使って AdminGroupsSettings.Groups.get(groupId) で設定を読む例が示されています。このサービスの戻り値に新しい項目が含まれるかは、確認できていません。

設定を変える前に決めること

棚卸しの結果を見て設定を揃える前に、管理者として次を決めておきます。

  1. 外部を入れてよいグループを決める。 取引先との連絡用など、外部メンバーが必要なグループだけ allowExternalMembers を true にする。いま外部メンバーがいるグループを false にすると、その人たちが削除されるため、先に4.の確認を済ませる。グループの使い分けはGoogleグループの作り方と使い方、社外の人との共同作業全体の考え方はゲストアカウントでの共同作業で整理しています
  2. 外部の人を追加する操作を誰に任せるかを決める。 情シスが管理する運用なら管理者だけ、部署に任せるならエンドユーザーにも許可する、という方針を、外部を入れるグループごとに決める
  3. テスト用のグループで試す。 本番のグループを変える前に、テスト用のグループで PATCH してから groups.get で読み直し、値が反映されるか、管理コンソールの表示がどう変わるかを確かめる
  4. 既にいる外部メンバーを別に確認する。 whoCanAddExternalMembers は「これから追加できる人」の設定です。Directory API の members.list でメンバーのアドレスを取り、自社のドメイン以外のものを一覧にして、要否を確かめる。ヘルプによれば、入れ子のグループ経由の外部メンバーは、内部のグループからは除外されるようになる

Discovery 文書の版の番号が変わらないまま項目が増えたため、定義の変化を追う場合は、版の番号ではなく文書の中身を定期的に取得して差分を見るほうが確実です。

確認した範囲

2026年10月10日に、Groups Settings API の Discovery 文書(https://www.googleapis.com/discovery/v1/apis/groupssettings/v1/rest 、revision 20220614)を取得し、googleapis/google-api-go-client(commit 20ffdd8000)、googleapis/google-api-python-client(commit 979de72f)、googleapis/discovery-artifact-manager に保存された写しと照合しました(資料調査)。あわせて、手元の PC(Linux)でテスト用のサーバーを立て、Go・Python・Node.js のクライアントライブラリが項目を保持・送信するかを確かめました(ライブラリの挙動の検証で、Google の API には接続していません)。2026年10月16日には、Groups Settings API の開発者向けリファレンス、Workspace Updates ブログの2026年2月23日の告知、管理者ヘルプの解説を確認しました(資料調査)。実際の Google Workspace での API 呼び出し、項目の既定値、変更が適用済みかどうか、Apps Script の高度なサービスの戻り値は確認していません。告知の下位の設定と whoCanAddExternalMembers の対応は、項目の説明と値の名前からの判断です。設定の決め方と棚卸しの方法は編集部の提案です。

グループの設計や外部メンバーの棚卸し、管理者設定の見直しは、IT・Google Workspace 無料相談からお問い合わせください。

参考資料

この記事を共有XFacebook
鈴木 翔

技術の可能性に魅了され、学生時代からプログラミングとデジタルアートの分野に深い関心を持つ

この記事のテーマを、自社の次の一歩へ

自社に合う、Workspaceの進め方を。

移行するデータ、共有ルール、管理体制を整理し、導入から日々の運用までの進め方を考えます。

  • 移行と初期設定
  • 共有・権限の整理
  • 管理体制
Workspaceの導入・運用を相談する

構想段階からご相談いただけます。この記事の情報を相談フォームに引き継ぎます。

最新記事をメールで受け取る