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プロパティはスクリプトを通してのみアクセス可能です。
スクリプトプロパティの基本的な使い方
- スクリプトエディタを開く
スプレッドシートから拡張機能→Apps Scriptを開きます。あるいは単独のスクリプトファイルでも構いません。 - プロパティを設定するコードを書く
以下のコードでスクリプトプロパティに値を保存します。PropertiesService.getScriptProperties().setProperty('API_KEY', 'your-api-key'); - プロパティを取得するコードを書く
保存した値を取得するには以下のようにします。var apiKey = PropertiesService.getScriptProperties().getProperty('API_KEY'); - 実行して確認する
関数を実行すると、プロパティが保存されます。取得した値が正しいかログ出力などで確認しましょう。
Userプロパティの基本的な使い方
- Userプロパティを取得するコードを書く
Userプロパティはユーザーごとに独立しているため、getUserProperties()メソッドを使います。var userProps = PropertiesService.getUserProperties(); - 値を設定する
設定方法はスクリプトプロパティと同じです。userProps.setProperty('theme', 'dark'); - 値を取得する
同様にgetPropertyで取得します。var theme = userProps.getProperty('theme'); - ユーザーによって値が異なることを確認する
別の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
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
