Google Groupsのグループアドレスを使って、雑な社員マスタを作る

背景

  • 何やかんや仕事するにあたって、社員マスタが機械で扱いやすい形になっていると便利なことが多い
    • 厳密な社員マスタはもっと色々情報が入っていて欲しいけど、ここでは「XXさんがYY部署にいます」くらいが分かる、という定義にします
    • BigQueryなどにあると扱いやすい
  • 管理の都合上、スプレッドシートでメンテナンスされていることが多いが、セルが結合されていたりして、プログラムで扱うには骨が折れることが多い
    • 頑張ってparseする気力はない...
  • 部門毎にGoogle Groupsのグループアドレスが発行されていることは割と多い
    • 今回はこいつを使って何とかしてみようという話
  • 雑なので、割り切って使える用途でやってください

お断り

  • 複数部門を兼務の人がいたりすると、情報が正しく出ないことがあります
    • 例: A部門(メイン)、B部門(サブ)に兼務で所属しているけど、あれこれやるとB部門しか出ないとかありえそう。逆に重複でカウントされてしまうこともありえる
      • JOINの仕方次第です
  • グループアドレスが発行されていない部署についてはこの方法だと情報が欠落します
  • つまり、100%のprecisionと100%のrecallが必要とされる業務には使うとダメです
    • 「大雑把にどこの部門がXXXを使っている」とかを見たい、くらいのタスクには使えるかもしれない、程度のもの

準備

A: グループアドレスと部門のマッピング

どのグループアドレスがどの部門に対応しているか分かるマッピングを作りましょう。ここは頑張って人手で集めてきます(気合い)。このファイルをgroup_email_and_department.csvとします。

group-a@hoge.com, A部門
group-a@hoge.com, A部門

B: cloudidentity.googleapis.comの有効化

あるグーグルグループに所属している人の一覧を出してくるためにcloudidentity.googleapis.comというのを有効化しておきます。Terraformなり、Webコンソールなり好きな方法でどうぞ。

C: グループアドレスに所属している人の一覧を出力する

グループアドレスの一覧とgcloudコマンドを使って一覧を引っぱってきます。このエントリ、ぶっちゃげgcloud --format json identity groups memberships list --group-email=...が肝です。

#!/bin/sh
set -eu -o pipefail

while read -r group_email_address; do
  gcloud --format json identity groups memberships list --group-email="${group_email_address}" | \
    jq -r --arg group_email_address "${group_email_address}" '.[] | $group_email_address + "," +.preferredMemberKey.id'
done

すると、以下のような出力が出てきます。syou6666さんはB部門にいる、というのが分かります。

group-a@hoge.com, syou6162@hoge.com
group-b@hoge.com, syou6666@hoge.com

雑な人事マスタを使う

これで材料は揃いました。準備のAでグループアドレスと部門のマッピング、準備のCでグループアドレスとユーザーのマッピングという2つのcsvファイルがあるはずです。あとはbq loadでcsvファイルをBigQueryに上げて、よしなにJOINすれば「大雑把にどこの部門がXXXを使っている」くらいの分析ができるようになります。