GAS からAdmina API を使って SaaS 利用状況を可視化する Looker Studio を作ってみた
タイトルの通り、Admina API を使ってサービスxアカウントの一覧を取得する GAS のコードを OSS で公開しました。
実際に使う際はこれをベースにご自身の環境に合わせてカスタマイズしてもらえばいいかなと思います。
最終的な成果物のイメージ
GAS
スプレッドシート
Looker Studio
これを作ると何が嬉しいの?
下記のようなケースで利用できますし、スプレッドシートに一度だしているので、スプレッドシートの内容を見てアカウント削除漏れがあったことを Slack でサービスごとの管理者に通知、みたいな拡張をするとよいでしょう。
メールアドレスで検索してサービス一覧を出す
退職ステータスで検索してアカウント削除漏れアカウント一覧を出す
Looker Studio(BI ツール)で閲覧できるのがメリット
Admina に従業員全員を招待してもいいっちゃいいのですが、BI ツールでまとめてみたいですし、Looker Studio であれば条件で絞った一覧をそのまま CSV やスプレッドシートに書き出したり、iframe でドキュメントツールに埋め込んだりみたいな活用ができます。
拡張して使うなら Admina の外の世界でやったほうがいいです。
GASのポイント
OSSにしているGASの部分だけ軽く解説しとこうかなと思います。
GASのテンプレートについて
GAS は筆者の自作テンプレートである gas-clasp-starter を使っています。
24年2月時点では、GAS のローカル開発テンプレートは上記のテンプレートか Google 製の aside のどちらかがいいかと思います。(テンプレートは他にもたくさんありますが、メンテされてないため)
がっつり本番環境と検証環境を分けて開発するなら aside で、そこまでじゃないなら gas-clasp-starter を使うとよいでしょう。
※ gas-clasp-starter は aside をベースに筆者が欲しい機能だけに削ぎ落として、ビルド部分を少しだけカスタマイズしたものです
(余談) gas-slacp-starter で作成するメリットを紹介
最終的に別ファイルで書かれたコードが index.gs ファイルにまとまるのですが、rollup でビルドしており、難読化もされていません。つまりきれいなコードで読みやすいです。
しかしこの 読みやすい
はデメリットになりうるのです。
違う人だったりや未来の自分がそのままリポジトリ管理されているのに気づかずに GAS をいじってしまったりする可能性があります。また、どこのリポジトリのコードかがわからなくなってしまうのです。
そのため gas-clasp-starter ではビルドしたコードの冒頭にリポジトリのURLをコメントで出力して これはリポジトリで管理されたコードです。直接いじってはいけません。
を明示的にしています。
/**
* Name: admina-services-visualization-gas
* Version: 1.0.0
* Description: Google Apps scripts that use the Admina API to export data to a spreadsheet for visualization of SaaS usage in Looker Studio and other applications.
* @see https://github.com/howdy39/admina-services-visualization-gas
*/
const ADMINA_API_KEY = PropertiesService.getScriptProperties().getProperty('ADMINA_API_KEY');
class AdminaService {
static listServices(organizationId) {
const basedUrl = `https://api.itmc.i.moneyforward.com/api/v1/organizations/${organizationId}/services/`;
const params = {
method: 'get',
headers: {
Authorization: `Bearer ${ADMINA_API_KEY}`,
},
};
...
...
APIの叩き方
List organization services で サービスIDの一覧を取得してから List all SaaS accounts of a service でアカウント一覧を取っています。
取得項目を増やす場合
このあたりに追加して TypeScript で型エラーが出たところを直してけばいいかと思います。
トリガー設定
最近はトリガー設定もコードに書くようにして IaC ぽくしています。
どのアカウントやどのファイルに設定したかなんかは README などに書いておくとよいかと思います。
おわりに
Admina の API を GAS で叩くコードを初めて書いたのですが、Admina そのものより、TypeScript にハマりました。。。
GASの実行時間が気になるところだと思いますが、(従業員数にもよると思いますが)50 SaaS ぐらいなら30秒〜3分ってとこです。(Admina 側の API サーバーのご機嫌?によってばらつきがデカい)
大企業であれば Enterprise プランで30分制限になっている事が多いと思うので、大体のケースでそのまま使えるかと思います。
Discussion