【GAS】PropertiesServiceでスクリプトプロパティ取得・保存方法(ユーザープロパティも)

Google Apps Script(GAS)にはコード上に記載すべきではない、APIキーやパスワードなどの秘匿情報を保存するために、スクリプトプロパティやユーザープロパティが用意されています。

そうしたプロパティの値を取得したり、保存したりするPropertiesServiceクラスの利用方法を解説します。

GASのプロパティとは?

Google Apps Script(GAS)では、プロパティという仕組みが用意されています。

連想配列のようにキーと値のペアにして、各種情報が保存できるようになっています。

GASに用意されたプロパティは全部で3種類です。

  1. スクリプトプロパティ
  2. ユーザープロパティ
  3. ドキュメントプロパティ

スクリプトプロパティはGASプロジェクトに紐づく形でプロパティが保持されます。

一方ユーザープロパティはGASを実行するユーザーに紐づく形でプロパティが保持され、ドキュメントプロパティはドキュメントにひも付きます。

これらのプロパティはコードに直書きすることが危険とされるAPIキーやアクセストークン、パスワードなど秘密情報を扱う際に利用します。

PropertiesServiceでプロパティ各種操作

前述したGoogle Apps Script(GAS)の各種プロパティを操作するためのクラスとして、PropertiesServiceが用意されています。

PropertiesServiceクラスには3つのメソッドが用意され、各種プロパティのオブジェクトを取得できるようになっています。

  • getDocumentProperties()
  • getScriptProperties()
  • getUserProperties()

取得できたドキュメントプロパティ、スクリプトプロパティ、ユーザープロパティのオブジェクトで、プロパティの保存や取得、削除などの操作がメソッドで実行可能です。

ScriptPropertiesを使ったスクリプトプロパティ操作は非推奨

なおQiitaやGASに関するブログでは、スクリプトプロパティの値を取得する方法として、ScriptPropertiesクラスを使った方法がよく紹介されています。

例えば、「KEY」というキー名で保存されたスクリプトプロパティの値を取得するには以下のメソッドを実行します。

ScriptProperties.getProperty('KEY’)

しかし、ScriptPropertiesは2023年5月時点でGASとしてはサポート終了しており、非推奨です。

そのため、前述したPropertiesServiceクラスを使ったスクリプトプロパティの取得や保存、削除の操作が推奨されています。

PropertiesServiceでスクリプトプロパティ取得・保存

実際にPropertiesServiceクラスを使い、Google Apps Script(GAS)でスクリプトプロパティの取得と保存する方法を解説します。

さきほどのPropertiesServiceクラスのリファレンスから、getScriptProperties()メソッドの戻り値であるPropertiesクラスで実行できるメソッドが以下の通りです。

この中から、スクリプトプロパティを保存するsetProperty(key, value)と、取得するgetProperty(key)を使ったサンプルコードを紹介します。

function myFunction() {
  //PropertiesServiceでスクリプトプロパティをセット
  PropertiesService.getScriptProperties().setProperty('TEST','テストです');
  //スクリプトプロパティを取得し、ログ出力
  console.log(PropertiesService.getScriptProperties().getProperty('TEST'));
}

PropertiesServiceでスクリプトプロパティをセット・取得するコードを実行すると、実行ログにスクリプトプロパティの値が表示されます。

GASエディタの左メニューにある「プロジェクトの設定」から、スクロールして表示されるスクリプトプロパティを確認すると、スクリプトプロパティが追加されているのが確認可能です。

このようにPropertiesServiceクラスに用意されたメソッドを使うことで、スクリプトプロパティがコードから操作できました。

PropertiesServiceでユーザープロパティ取得・保存

スクリプトプロパティと同様にしてユーザープロパティについても、PropertiesServiceクラスで取得可能です。

Google Apps Script(GAS)のユーザープロパティを保存して取得するコードを実行すると、実行ログに出力されます。

function userPropertyTest(){
  //PropertiesServiceでユーザープロパティをセット
  PropertiesService.getUserProperties().setProperty('USER','ユーザーです');
  //ユーザープロパティを取得し、ログ出力
  console.log(PropertiesService.getUserProperties().getProperty('USER'));  
}

ユーザープロパティの場合は、実行ユーザーに紐づいたプロパティのため、スクリプトプロパティ上には追加されません。

そのため、GASスクリプトを編集できるユーザーでも取得できない仕様になっています。

ドキュメントプロパティの設定・取得も可能

なお、PropertiesServiceクラスを使えば、3種類あるプロパティの最後の1つであるドキュメントプロパティも操作することができます。

基本的な使い方はスクリプトプロパティとユーザープロパティと同様です。

PropertiesService.getDocumentProperties()

上記でドキュメントプロパティのオブジェクトが取得できるので、setPropertyやgetPropertyメソッドで設定・取得できます。

ただ、Google Apps Script(GAS)で利用するプロパティとしてはスクリプトプロパティを利用することが多いです。

GASスクリプト実行ユーザー以外からは値を参照捺せたくない場合に、ユーザープロパティを利用します。

そのため、ドキュメントプロパティを利用する機会は少ないですが、スクリプトプロパティの使い方が理解できていれば、すぐ利用できるので、大丈夫です。

まとめ・終わりに

今回、Google Apps Script(GAS)でスクリプトプロパティなど各種プロパティを操作するためのPropertiesServiceの使い方を紹介しました。

スクリプトプロパティの場合、以前はScriptPropertiesクラスを利用していましたが、サポート終了したので、PropertiesServiceを使うことが推奨されています。

PropertiesServiceではまず、3種類あるプロパティをオブジェクトとして取得した上で、取得や保存、削除などの操作メソッドを実行します。

QiitaやZennなどでもGASのスクリプトプロパティ操作はScriptPropertiesを使った方法が多いですが、非推奨のためPropertiesService.getScriptProperties()を使うようにしましょう。