背景
- 何やかんや仕事するにあたって、社員マスタが機械で扱いやすい形になっていると便利なことが多い
- 厳密な社員マスタはもっと色々情報が入っていて欲しいけど、ここでは「XXさんがYY部署にいます」くらいが分かる、という定義にします
- BigQueryなどにあると扱いやすい
- 管理の都合上、スプレッドシートでメンテナンスされていることが多いが、セルが結合されていたりして、プログラムで扱うには骨が折れることが多い
- 頑張ってparseする気力はない...
- 部門毎にGoogle Groupsのグループアドレスが発行されていることは割と多い
- 今回はこいつを使って何とかしてみようという話
- 雑なので、割り切って使える用途でやってください
お断り
- 複数部門を兼務の人がいたりすると、情報が正しく出ないことがあります
- 例: A部門(メイン)、B部門(サブ)に兼務で所属しているけど、あれこれやるとB部門しか出ないとかありえそう。逆に重複でカウントされてしまうこともありえる
- JOINの仕方次第です
- 例: A部門(メイン)、B部門(サブ)に兼務で所属しているけど、あれこれやるとB部門しか出ないとかありえそう。逆に重複でカウントされてしまうこともありえる
- グループアドレスが発行されていない部署についてはこの方法だと情報が欠落します
- つまり、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を使っている」くらいの分析ができるようになります。