社内システムやちょっとした Web アプリケーションを GAS で実装する際に、利用者の Google アカウントによって処理を振り分けたい時は Session Class を使うと便利です。
この一文で書きたいことを全て伝えてしまったのですが、この答えに辿り着くのに思いのほか時間が掛かってしまったので、記事にしたためておきます。
Tutorial
以下では Web アプリケーションとして公開した GAS 上で、呼び出し元のクライアントの情報を取得する例を示します。
新規スクリプトを作成して以下を実装してください。
function doGet(e) {
return makeSessionContent();
}
function makeSessionContent() {
var result = {'Active User E-mail': Session.getActiveUser().getEmail(),
'Active User Locale': Session.getActiveUserLocale(),
'Effective User E-mail': Session.getEffectiveUser().getEmail(),
'Script Time Zone': Session.getScriptTimeZone(),
'Temporary Active User Key': Session.getTemporaryActiveUserKey()
};
var output = ContentService.createTextOutput(JSON.stringify(result));
return output.setMimeType(ContentService.MimeType.JSON);
}
メニューから [公開] → [ウェブ アプリケーションとして導入…] をクリックし、表示されるダイアログのうち [次のユーザーとしてアプリケーションを実行:] を [ウェブ アプリケーションにアクセスしているユーザー] に、[アプリケーションにアクセスできるユーザー]を [全員] にしてください。
上記を設定した後、左下の [導入] ボタンをクリックしてください。
このようなダイアログが表示されるので、この URL をメモしておき、このスクリプトを作成した Google アカウント以外のアカウントで URL にアクセスし、Active User E-mail に現在ログインしているアカウントのメールアドレスが表示されているか確認してみてください。
URL にアクセスした際、このようなダイアログが表示されます。
[無題のプロジェクト] として表示されているプロジェクト名は GAS のファイル名(デフォルトだとコード.gs)が反映されます。
右下の [REVIEW PERMISSIONS] のボタンをクリックして、
利用するアカウントを選択してください。
なお、[次のユーザーとしてアプリケーションを実行:] を [自分] とした場合は Active User E-mail は null になり、Effective User E-mail にスクリプトを作成したアカウントのメールアドレスが表示されます。
正直なところ getActiveUser() で USER オブジェクトを取得し、その唯一のメソッドである getEmail() を取得するくらいしかこの API の使い所はないと思いますし、ちゃんとユーザー管理をしたいのであればちゃんとした認証機能を利用/実装するべきだとは思います。Auth0 とか便利ですよね。
それでも G Suite を導入している会社で社内システムを構築する場合など、手っ取り早く GAS で実装するのが楽ですし、ちょっとしたワークフローの開発などでは今回取り上げた Session Class で利用者の メールアドレスだけ取得できれば十分、というケースは割合あるかと思います。
そのうちクラスごと deprecated になりそうな気もしますが・・・