スクリプト実行者の氏名を取得する方法 – Google Apps Script

2021年5月20日

猫さまはスクリプトを発動させたのが誰か気になるようです。

スプレッドシートのGoogle Apps Script(通称GAS)で氏名を扱いたいとき、自分専用のスクリプトならテキストとして名前を入れればOKです。

しかし、ほかの人にもスクリプトを共有し、実行者の名前を別途取得する必要があります。Gmailに作業者=送信者の名前入れたいときとか?

今回はGoogle Apps Scriptでスクリプト実行者の名前を取得する方法をご紹介。っていうか備忘録。

氏名を取得するコード

function myFunction() {
let user = Session.getActiveUser(); // スクリプトの実行者を取得
let contact = ContactsApp.getContact(user); // 実行者の連絡帳データを取得

let fullName = contact.getFullName(); // フルネームを取得
let familyName = contact.getFamilyName(); // 姓(苗字)のみ
let givenName = contact.getGivenName(); // 名(下の名前)のみ

Browser.msgBox(fullName + "\n" + familyName + "\n" + givenName);
}

上記がスクリプト実行者の氏名を取得するスクリプトのサンプルコードです。10行のうち大事なのは3行ぐらい。

以下詳しく解説しますが、ContactsAppを使い、スクリプトを作動させたアカウントのGoogle連絡帳から氏名を取得する形式です。

Googleアカウントそのものに設定した氏名を取得しているわけではない点がポイント。

流れ1:連絡帳データの取得

上記スクリプトは以下の流れでスクリプト実行者の名前を取得しています。

  • マクロ実行者のアカウント(メールアドレス)を特定
  • 実行者のGoogle連絡帳からのデータを取得
  • その連絡帳内にあるそのアカウントの氏名を取得

実行者の連絡帳をデータを取得するのが下記。上記コードでいう2行目から3行目部分です。

let user = Session.getActiveUser(); // スクリプトの実行者を取得
let contact = ContactsApp.getContact(user); // 実行者の連絡帳データを取得

Session.getActiveUser()で変数contactに連絡帳のデータを定義しています。

流れ2:名前の取得

続く3行が変数contactに定義された連絡帳データから名前を取得するコードです。

let fullName = contact.getFullName(); // フルネームを取得
let familyName = contact.getFamilyName(); // 姓(苗字)のみ
let givenName = contact.getGivenName(); // 名(下の名前)のみ

getFullNameメソッドはフルネーム、getFamilyNameメソッドは苗字だけ、getGivenNameメソッドは下の名前を取得するメソッド。

フルネームを使うことが多いかと思いますが、例えばメール冒頭の挨拶なんかでは苗字だけほしかったりしますよね。

あと、getFullNameメソッドでは姓名の間にスペースなくベタづきで取得されるので、間にスペースを入れたいときなんかは姓名を別に取得して下記みたいにすると良き。

contact.getFamilyName() + " " + contact.getGivenName();

Nullエラーが出たりうまく氏名を取得できない場合

Nullエラーが出た場合の対処方法。

ただ、氏名をうまく取得できず、スクリプト発動時にNullエラーとして下記のエラーが出ることがあります。

TypeError: Cannot read property 'getFullName’ of null

エラーにはならずとも空白やGoogleアカウントに設定されているものとは違う氏名が取得されることが。これはgetFullNamegetFamilyNamegetGivenNameメソッドに限らずContactsApp、つまりGoogle連絡帳からデータを取ろうとすると起こりがちな現象。

Nullエラーや取得される氏名が違う現象回避方法は別途記事にしていますので、下記リンクよりどうぞ。

まとめ:GASでスクリプト実行者の氏名を取得する方法

一応、エラー回避方法はわかっていますけど、Google Apps Scriptでスクリプト実行者の氏名取得するにはGoogle連絡帳を利用するしか方法がないのが残念。

普通に実行者自身のGoogleアカウントの名前を取得する手段があればいいのに。ログインID=Gmailアドレスは簡単に取得できるんですけど。

もしほかの取得方法が見つけた方がいらしたらぜひ教えてください。