見出し画像

プロパティサービスを使ってGASで秘密情報を管理する

こんにちは。
CREFILでコンサルタントをしている鈴木です。

先日Googleカレンダーの予定を
Slackに通知するGAS(Google Apps Script)を作ってみた際に、
「プロパティサービス」という機能を知りました。

今回は備忘も兼ねて投稿します。

プロパティサービスとは

スクリプトは、1 つのスクリプト、1 つのスクリプトのユーザー、または 1 つのアドオンが使用されるドキュメントにスコープされた Key-Value ペア形式のシンプルなデータを保存できます。スクリプト間でプロパティを共有することはできません。

Google Workspace Apps Script リファレンス Class PropertiesService

Key-Valueで文字列を保存できる機能で、
主にコードへ直書きしたくないパスワードやAPIキー等の管理に使用されているようです。

更にGASでは以下の3種類のプロパティが使用できます。

ScriptProperties
保存先:GASプロジェクト
method:getScriptProperties()
このスクリプト内から、全ユーザーがアクセスできる
GUIでも操作可能。プロジェクト権限があれば参照可能。

UserProperties
保存先:GASプロジェクト×ユーザ
method:getUserProperties()
このスクリプト内から、現在のユーザーのみがアクセスできる
設定を保存したユーザ以外参照できない。

DocumentProperties
保存先:GASプロジェクト×ドキュメント
method:getDocumentProperties()
ドキュメント,スプレッドシート,フォームから全ユーザーがアクセスできる
別プロジェクト、別ドキュメントだと同じ値を参照できない。

実際に使ってみた

今回はGUIでも操作できる「スクリプトプロパティ」を使ってみました。

スクリプトプロパティを追加する

  1. Apps Script プロジェクトを開く

  2. 左側ギアマークの「プロジェクトの設定」

  3. スクリプト プロパティで「スクリプト プロパティを追加」

  4. 値を入れて保存

コードエディタで追加したプロパティの値を取得

// プロパティストアから"CALENDAR_ID"の値を取得
const calendarId = PropertiesService.getScriptProperties().getProperty("CALENDAR_ID");

実際に使用したのは取得だけでしたが、色々と操作できるみたいです。
詳しくはClass Propertiesをご参照下さい。

var properties = PropertiesService.getScriptProperties();

  // すべてのKey-Valueを取得
  properties.getProperties();

  // "CALENDAR_ID"を取得
  properties.getProperty("CALENDAR_ID");

  // 複数更新 
  scriptProperties.setProperties({
    'CALENDAR_ID': 'xxx',
    'key': 'value'
  });

  // 更新
  properties.setProperty("CALENDAR_ID","xxx");

まとめ

今回GASを触ってみてとっても手軽で驚きました。
但し、秘密情報の管理にはきちんと気をつけていきたいですね。

また、Web上に素晴らしいエンジニアさん方のナレッジもたくさんあったので、他にも色々と活用してみたいなと思っています。

是非、この記事が皆さんの一助になりましたら幸いです。
『スキ』や『フォロー』も宜しくお願いします!