ADVERTISEMENT

【Googleスプレッドシート】Apps ScriptでスクリプトプロパティとUserプロパティ!永続化の使い分け

【Googleスプレッドシート】Apps ScriptでスクリプトプロパティとUserプロパティ!永続化の使い分け
🛡️ 超解決

Apps Scriptでデータを永続化したいとき、PropertiesServiceを使う方法があります。しかし、提供されるプロパティの種類が複数あり、どれを使うべきか迷う方も多いでしょう。この記事では、スクリプトプロパティとUserプロパティの違いを詳しく解説します。それぞれの特性を理解することで、適切な使い分けができるようになります。

【要点】スクリプトプロパティとUserプロパティの使い分けを理解する

  • スクリプトプロパティ(PropertiesService.getScriptProperties): すべてのユーザーで共有されるデータを保存します。APIキーや設定値など、アクセスする全員が同じ値を使う場合に適しています。
  • Userプロパティ(PropertiesService.getUserProperties): ユーザーごとに異なるデータを保存します。個人の設定や一時的なワークフローの状態など、ユーザー単位で管理したい場合に使います。
  • ドキュメントプロパティ(PropertiesService.getDocumentProperties): スプレッドシートやドキュメントに紐づくデータを保存します。補足として紹介しますが、この記事では主にスクリプトとUserプロパティを比較します。

ADVERTISEMENT

スクリプトプロパティとUserプロパティの仕組みと違い

PropertiesServiceは、Apps Scriptでデータをキーと値のペアで保存できる機能です。保存されたデータは、スクリプトの実行が終了しても永続化されます。大きく分けて3種類のスコープがあります。スクリプトプロパティはスクリプト全体で共有され、UserプロパティはGoogleアカウントごとに独立します。ドキュメントプロパティは、スクリプトが紐づいているドキュメント(スプレッドシートやドキュメント)ごとに保存されます。この記事では特にスクリプトとUserプロパティに焦点を当てます。

スクリプトプロパティは、例えば「APIのエンドポイントURL」や「定数として使う閾値」など、全ユーザーが同じ値を使うべきデータに向いています。一方、Userプロパティは「ユーザーごとの表示設定」や「個人のアクセストークン」など、ユーザーにより値が変わるデータに使います。保存場所はGoogleのサーバー上で、ユーザーやスクリプトごとに分離されています。スクリプトプロパティのデータは、スクリプトエディタの「プロジェクトの設定」からも確認できますが、Userプロパティはスクリプトを通してのみアクセス可能です。

スクリプトプロパティの基本的な使い方

  1. スクリプトエディタを開く
    スプレッドシートから拡張機能→Apps Scriptを開きます。あるいは単独のスクリプトファイルでも構いません。
  2. プロパティを設定するコードを書く
    以下のコードでスクリプトプロパティに値を保存します。
    PropertiesService.getScriptProperties().setProperty('API_KEY', 'your-api-key');
  3. プロパティを取得するコードを書く
    保存した値を取得するには以下のようにします。
    var apiKey = PropertiesService.getScriptProperties().getProperty('API_KEY');
  4. 実行して確認する
    関数を実行すると、プロパティが保存されます。取得した値が正しいかログ出力などで確認しましょう。

Userプロパティの基本的な使い方

  1. Userプロパティを取得するコードを書く
    Userプロパティはユーザーごとに独立しているため、getUserProperties()メソッドを使います。
    var userProps = PropertiesService.getUserProperties();
  2. 値を設定する
    設定方法はスクリプトプロパティと同じです。
    userProps.setProperty('theme', 'dark');
  3. 値を取得する
    同様にgetPropertyで取得します。
    var theme = userProps.getProperty('theme');
  4. ユーザーによって値が異なることを確認する
    別のGoogleアカウントで同じスクリプトを実行すると、異なる値が返ります。

ADVERTISEMENT

使い分けの判断基準と具体的なユースケース

使い分けの基本は「データを誰と共有するか」です。全ユーザーで同じ値を使いたいならスクリプトプロパティ、ユーザーごとに異なる値ならUserプロパティを選びます。以下に具体例を挙げます。

スクリプトプロパティを使うケース

– アプリケーション全体の設定値(データベース接続情報など)
– 外部APIのエンドポイントURL
– キャンペーンの開始日など、全ユーザーに統一したい値
– スクリプトのバージョン管理用の定数

Userプロパティを使うケース

– ユーザーごとの表示テーマ(ライト/ダーク)
– 個人のアクセストークン(OAuth2のリフレッシュトークンなど)
– ワークフローの進行状態をユーザー単位で保存
– 最近使った項目の履歴など、個人の利用状況

注意点と制限事項

PropertiesServiceにはいくつかの制限があります。知っておかないと意図しない動作を引き起こす可能性があります。

保存容量の制限

スクリプトプロパティ、Userプロパティ、ドキュメントプロパティそれぞれに容量制限があります。現在の制限は、キーと値の合計で500KBまでです。特に大きなデータを保存する場合は注意が必要です。制限を超えるとエラーが発生します。

データの削除方法

プロパティを削除するにはdeleteProperty()メソッドを使います。スクリプトプロパティの全削除はdeleteAllProperties()で可能ですが、Userプロパティの全削除はユーザーごとに実行します。スクリプトのエディタから手動で削除することもできますが、コードで管理する方が安全です。

Userプロパティの取得タイミング

Userプロパティは、スクリプトを実行したそのユーザーのプロパティのみ取得できます。他のユーザーのプロパティにアクセスすることはできません。そのため、全ユーザー情報を集約したい場合はスクリプトプロパティか、永続化とは別の方法(スプレッドシートなど)を検討してください。

セキュリティ上の注意

スクリプトプロパティは全ユーザーが読めるため、機密情報(APIの秘密鍵など)を保存するのは避けるべきです。秘密鍵はスクリプトプロパティではなく、スクリプトエディタの「プロジェクトの設定」にある「スクリプトプロパティ」のUIで保存する方法もありますが、これも同様に全ユーザーから見えます。本当に機密な情報はUserプロパティか、Google CloudのSecret Managerなどを利用しましょう。

スクリプトプロパティとUserプロパティの比較

項目 スクリプトプロパティ Userプロパティ
保存場所 スクリプトに紐づく 各ユーザーのアカウントに紐づく
共有範囲 全ユーザーで共有 個人ごとに独立
アクセス方法 getScriptProperties() getUserProperties()
データ削除 スクリプト全体で一括削除可能 ユーザーごとに個別削除
用途例 設定定数、APIエンドポイント 個人設定、アクセストークン
容量制限 500KB(全プロパティ共通) 500KB(全プロパティ共通)

まとめ

この記事では、Apps ScriptのスクリプトプロパティとUserプロパティの違いと使い分けを解説しました。スクリプトプロパティは全ユーザー共有のデータ、Userプロパティは個人用データと覚えておきましょう。実際にコードを書く際は、保存するデータの性質に合わせて適切なプロパティを選んでください。さらに、Cacheサービスを使って一時的なデータを扱う方法も学ぶと、より効率的なスクリプトが書けるようになります。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。