みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
本記事はApps Script Advent Calendar 2017の参加をしておりまして、本当はGoogle Home関連の何かを書きたかったのですが、あんまりナイスな技が思いつかなかったのと、せっかくなので12/23に発売される拙著の中から何か紹介できれば…ということで、このネタに変更しました。
さて、チームでスプレッドシートを使用している場合、各人ごとのスプレッドシートを作成して、それを中央管理的なスプレッドシートやそれにバインドしたスクリプトで集計したりするような使い方をしたいことがありますね。
例えば、勤怠管理だったり、経費精算だったりがそのような使い方をすることがあると思います。
ただ、その場合、ユーザーごとのスプレッドシートを作り、そのすべてのスプレッドシートIDを調べて管理する必要が出てきます。
そんなときに便利なのが、ユーザーごとに異なるデータを管理することができるユーザープロパティです。
今回は、GASのユーザープロパティについて、またユーザーごとのスプレッドシートを作成してそのIDをユーザープロパティで管理するスクリプトを紹介します。
ユーザープロパティとは
ユーザープロパティは、プロジェクトにデータを格納することができる領域で、ユーザーごとに別々のデータを保管することができます。
また、実行者であるユーザー自身のユーザープロパティにのみアクセスすることができるというものです。
ユーザープロパティはプロパティストアの一つで、ほかにプロジェクトに紐づいてデータを格納するスクリプトプロパティ、ドキュメントに紐づいてデータを格納するドキュメントプロパティがあります。
- スクリプトプロパティ:プロジェクト単位で格納、スクリプトエディタで編集可能
- ユーザープロパティ:ユーザー単位で格納
- ドキュメントプロパティ:ドキュメント単位で格納
プロパティストアには、キーと値のペアの形式でデータを格納します。
つまり、例えば
SPREAD_SHEET_ID: ‘XXXXXXXX’
E_MAIL: ‘〇〇@example.com’
というような形です。
ユーザーごとにスプレッドシートを作成するスクリプト
ユーザーごとにスプレッドシートを作成するスクリプトはこちらです。
例えば、チームのユーザーにこのスクリプトがバインドしているスプレッドシートを共有して、各自がメニューなどからスクリプトを実行することで、各自のスプレッドシートを作成することができます。
function createSS() { var userProperties = PropertiesService.getUserProperties(); var spreadSheetId = userProperties.getProperty('SPREAD_SHEET_ID'); if(spreadSheetId) { throw('既にスプレッドシートが存在しています: ' + spreadSheetId); } else { var newSpreadSheet = SpreadsheetApp.create('スタッフごとのスプレッドシート'); userProperties.setProperty('SPREAD_SHEET_ID', newSpreadSheet.getId()); } }
実行ユーザーのユーザープロパティを取得する
スクリプト実行時に、その実行をしているユーザーのユーザープロパティを取得するにはPropertiesServiceクラスのgetUserPropertiesメソッドを使います。
ただ、ここで取得したものはキーと値がセットになっている入れ物、つまりプロパティストアを表すPropertiesオブジェクトですので、さらにその中から欲しいデータをほじくる必要があります。
キーを指定してプロパティストアから値を取り出す
プロパティストアから値を取り出すには、PropertiesクラスのgetPropertyメソッドを使います。
指定したキーに対応をする値を取り出すということです。
今回の例では3行目で、「SPREAD_SHEET_ID」というキーに対応する値を取り出します。きっとスプレッドシートIDが格納されているのでしょう。
プロパティストアにデータを格納する
また、プロパティストアにデータを格納するには、PropertiesクラスのsetPropertyメソッドを使います。
対象となるプロパティストアに、指定したキーに対して値を格納します。キーが存在しない場合は、新たにキーと値をセットで格納をします。
例では8行目ですが、そのユーザーのスプレッドシートID(つまりキー「SPREAD_SHEET_ID」に対応する値)が存在していない場合に、新規で作成したスプレッドシートのIDをセットするという処理をしています。
まとめ
GASでプロパティストアを使ってユーザーごとのスプレッドシートを作成する方法についてお伝えしました。
これで、ユーザーごとのIDをスプレッドシートなどで管理する危うさとはオサラバです。
ただ、ユーザー本人しかアクセスできないので、検証はしづらいという点はありますので、その点気を付けながらご活用ください。
あ、あと明日12/23に「詳解!GoogleAppsScript完全入門」発売になりますよ~!