【getAcriveUser】プログラムを実行しているユーザーの情報を取得する

GoogleAppsScript

【getActiveUser】メソッドは

プログラムを実行しているユーザーの情報(Userクラス)を取得することができるメソッド

です。

 

公式リファレンスの該当ページはこちら

 

プログラムを実行している人に応じて処理内容を変化させるGASアプリケーションを作成するのに非常に役立つメソッドです。

クラス

【Sessionクラス】

セッションとは端的に説明するとネットの通信を開始してから終了するまでの一連の流れのことをいいます。

セッションについては外部サイトになりますが以下のサイトでものすごくわかりやすく説明されているのでここでは説明を割愛いたします。

 

SessionクラスのSessionの意味ですが、一連の通信のやり取りにおける接続の状態(例えばログイン中、日本語で表示中などの状態のこと)を保存するためのセッション情報のことを指しています。

こんな感じですね。(※イメージ重視でお伝えしているため言葉足らず、多少の誤りがある点はご了承ください)

 

そして、Sessionクラスには利用しているログインユーザーの情報やロケーション情報、タイムゾーン情報などを取得することができるメソッドが用意されています。

 

記述方法

 

親クラスとなるSessionに続けてgetActiveUserメソッドを記述します。引数の記入などは必要ありません。

 

戻り値

【Userクラス】

Userクラスはユーザーの情報を持ったクラスです。

現在Userクラスに用意されているメソッドはユーザーが持つメールアドレスを返すgetEmailメソッドのみ(非推奨メソッドは他1件あり)となっておりますので、実質、Userクラスが持つユーザー情報というのはメールアドレスのみになります。

 

メールアドレスの取得について

getActiveUserメソッドの戻り値をLogger.logで確認してみましょう。

正常に戻り値を取得することができれば。このように今ログインしているユーザーのメールアドレスが表示されたのではないかと思います。

実は、getActiveUserで取得したこのメールアドレスでもGmailApp.sendEmailなどで送信先のアドレスとして設定することで問題なくメール送信が可能です。(以下、サンプルコード)

 

ですので、getActiveUserメソッドでUserクラスを取得したらgetEmailメソッドを使う必要がないのでは?という発想に至る…人もいるのではないかと思います。(私がそうでした←)

 

しかし、getActiveUserメソッドで取得できる戻り値はあくまでUserクラスのオブジェクトです。それを実証できるコードを以下に載せました。

 

ログインしているユーザーメールアドレスの@前の部分を取得するコードです。メールアドレスが「○○@gmail.com」であれば「○○」を取得できなければいけないのですが、上記のサンプルコードではエラーになってしまいます。

上記で利用しているsliceメソッドは文字列に対して利用できるメソッドであるのに対して、対象となっている変数内のデータがUserクラスのオブジェクトであるためにエラーが起きてしまうのです。

 

このように、getActiveUserメソッドで取得できるのはあくまでUserクラスのオブジェクトであることを強く認識しておくべきです。

先ほどのメール送信に関するコードについても、実際にはメールを送信することができてはいますが、あまり推奨できるコードではないことからちゃんとgetEmailメソッドを使ってメールアドレスを取得しておきます。

 

ユーザー情報を取得できる条件

実は、どのような場合においてもgetAcriveUserメソッドでユーザー情報を取得することができる…というわけではありません。条件に当てはまる場面でなければユーザー情報を取得することができず、プログラムの実行結果として空の戻り値が返ってきます。

この利用条件を把握しておかなければ、自分以外にはまったく使い物にならないプログラムを作り上げてしまった。。。ということにもなりかねないので、以下からご紹介する条件をしっかり確認した上で開発をしていきましょう。

※この条件リストを作成するにあたって、以下の質問ページを参考にさせていただき、補足として情報を追記いたしました。

 

スクリプトを作成した本人がスクリプトを実行させた場合

当然といえば当然ですが、自分が作成したスクリプトからgetActiveUserメソッドを実行した場合にはユーザー情報を取得できます。取得できるユーザー情報は当然ですが自分のユーザー情報となります。

 

スクリプトエディタからスクリプトを実行させた場合

スクリプトエディタからスクリプトを起動させた場合については実行したユーザーに関わらずユーザー情報を取得することができます。

ただし、スクリプトを作成したユーザー以外の者がスクリプトエディタにアクセスするためには、エディタへのアクセス権の共有を受ける必要があります。

 

getActiveUserメソッドは(取得制限がなければの話ですが)ユーザー情報をこっそり取得する事が可能ですが、スクリプトエディタへのアクセス許可を受けているユーザーであれば、そもそも開発者とメールアドレスを互いに知り合っている仲になりますのでユーザー情報の取得も許可している…ということでしょう。

 

G Suiteユーザーが開発したスクリプトであり、かつ、同ドメインのユーザーがスクリプトを実行させた場合

※G Suiteは簡単に言うとビジネス用のGoogle アカウントです。独自のドメイン(メールアドレスのうち@以下の情報のことですね)を設定して契約するGoogle アカウントになるので、○○@gmail.comでないメールアドレス、GoogleログインIDを持つことができます。

この場合においてもユーザー情報を取得することが可能です。社内のユーザー情報…メールアドレスについてもそもそも全社員が知っていても問題ないものであるためユーザー情報を取得することができるのでしょう。

 

このため、ユーザー情報を使った社内アプリケーション…例えば、社員ごとに異なる情報を見せたり、違う計算処理を行なう…といったプログラムを実装したいと思った場合、G Suiteユーザーであれば問題なく可能ですが、無料のGoogle アカウントではその実現が大変難しくなります。

 

Webアプリケーションとして実行していて、かつ、「次のユーザーとしてアプリケーションを実行」の設定を「ウェブアプリケーションにアクセスしているユーザー」に設定している

先ほど、無料のGoogleアカウントでのユーザー情報を使った社内アプリケーションの作成について”不可能”ではなく”大変難しくなる”とご説明したのは、”Google Apps ScriptをWebアプリケーションとして実行していて、かつ、アクセスしているユーザーとして実行アプリケーションを実行することを許可しているものについてはユーザー情報を取得できる”からです。

 

しかし、その仕組みを作るのはやはり大変難しいです。なぜなら、Webアプリケーションとして実行する場合、Google スプレッドシートなどのサービス上でスクリプトを動かすことはできず、スクリプトを実行するためのWebページをスクリプトエディタ上で開発する必要があるからです。

 

参考として、スプレッドシート上にユーザー情報を記録するだけのスクリプトをWebアプリケーションとして実行してみました。(手順の説明は省略)以下のようにまったく機能していないことがわかります。

 

ここではGoogle Apps ScriptによるWebアプリケーションの作成方法についての説明は割愛いたしますが、そこそこのプログラミング能力を要求されるものになりますので、ユーザー情報を活用した社内向けアプリケーションをもっと気軽に作りたい…っという場合は、G Suiteをご契約されることをオススメいたします。(もちろん、契約のメリットはそれだけではないのですが笑)

 

使用例

※後日追記予定

関連メソッド

以下のメソッドも確認しておくと、よりgetActiveUserを活用することが可能です。(後日追加予定)

yoshi

JavaScript、Google Apps Scriptがメイン。Pythonもちょっとだけ。Google Apps Script開発、Pythonスクレイピングなどをする機会が多いです。ご依頼なども承っております。 記事内容についてのご意見・ご指摘などいただけますと幸いです。

シェアする

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

コメントする