プロパティ サービス

プロパティ サービスを使用すると、1 つのスクリプト、1 つのスクリプトのユーザー、またはアドオンが使用されている 1 つのドキュメントにスコープされた Key-Value ペア形式のシンプルなデータを保存できます。通常は、デベロッパーの構成やユーザー設定を保存するために使用されます。プロパティはスクリプト間で共有されません。

プロパティ サービスの 1 日の割り当てと保存容量の上限を確認するには、Google サービスの割り当てをご覧ください。

プロパティ ストアの比較

PropertiesService グローバル オブジェクトには 3 つのメソッドがあります。それぞれが類似の Properties オブジェクトを返しますが、アクセス権が異なります。次の表に示します。

スクリプト プロパティ ユーザー プロパティ ドキュメント プロパティ
アクセス方法 getScriptProperties() getUserProperties() getDocumentProperties()
データの共有先 スクリプト、アドオン、ウェブアプリのすべてのユーザー スクリプト、アドオン、ウェブアプリの現在のユーザー 開いているドキュメント内のアドオンのすべてのユーザー
主な用途 アプリ全体の構成データ(デベロッパーの外部データベースのユーザー名とパスワードなど) ユーザー固有の設定(メートル法やヤードポンド法など) ドキュメント固有のデータ(埋め込みグラフのソース URL など)

データ形式

Properties サービスは、すべてのデータを Key-Value ペアの文字列として保存します。保存されたオブジェクトに含まれるメソッドなど、文字列ではないデータ型は自動的に文字列に変換されます。

データの保存

単一の値を保存するには、次の例に示すように、適切なストアのメソッド Properties.setProperty(key, value) を呼び出します。

service/propertyService.gs
try {
  // Set a property in each of the three property stores.
  const scriptProperties = PropertiesService.getScriptProperties();
  const userProperties = PropertiesService.getUserProperties();
  const documentProperties = PropertiesService.getDocumentProperties();

  scriptProperties.setProperty('SERVER_URL', 'http://www.example.com/');
  userProperties.setProperty('DISPLAY_UNITS', 'metric');
  documentProperties.setProperty('SOURCE_DATA_ID',
      '1j3GgabZvXUF177W0Zs_2v--H6SPCQb4pmZ6HsTZYT5k');
} catch (err) {
  // TODO (developer) - Handle exception
  console.log('Failed with error %s', err.message);
}

データを一括で保存するには、Key-Value ペアのマップを Properties.setProperties(properties) に渡します。パラメータ内のオブジェクトの各 Key-Value ペアは、個別のプロパティとして保存されます。

service/propertyService.gs
try {
  // Set multiple script properties in one call.
  const scriptProperties = PropertiesService.getScriptProperties();
  scriptProperties.setProperties({
    'cow': 'moo',
    'sheep': 'baa',
    'chicken': 'cluck'
  });
} catch (err) {
  // TODO (developer) - Handle exception
  console.log('Failed with error %s', err.message);
}

データの読み取り

以前に保存した単一の値を取得するには、Properties.getProperty(key) を呼び出します。

service/propertyService.gs
try {
  // Get the value for the user property 'DISPLAY_UNITS'.
  const userProperties = PropertiesService.getUserProperties();
  const units = userProperties.getProperty('DISPLAY_UNITS');
  console.log('values of units %s', units);
} catch (err) {
  // TODO (developer) - Handle exception
  console.log('Failed with error %s', err.message);
}

現在のプロパティ ストア内のすべての値を取得するには、Properties.getProperties() を呼び出します。

service/propertyService.gs
try {
  // Get multiple script properties in one call, then log them all.
  const scriptProperties = PropertiesService.getScriptProperties();
  const data = scriptProperties.getProperties();
  for (const key in data) {
    console.log('Key: %s, Value: %s', key, data[key]);
  }
} catch (err) {
  // TODO (developer) - Handle exception
  console.log('Failed with error %s', err.message);
}

データの修正

getProperty() メソッドと getProperties() メソッドは、ライブビューではなく保存されたデータのコピーを返すため、返されたオブジェクトを変更してもプロパティ ストアの値は更新されません。ストア内のデータを更新するには、データをもう一度保存します。

service/propertyService.gs
try {
  // Change the unit type in the user property 'DISPLAY_UNITS'.
  const userProperties = PropertiesService.getUserProperties();
  let units = userProperties.getProperty('DISPLAY_UNITS');
  units = 'imperial'; // Only changes local value, not stored value.
  userProperties.setProperty('DISPLAY_UNITS', units); // Updates stored value.
} catch (err) {
  // TODO (developer) - Handle exception
  console.log('Failed with error %s', err.message);
}

データを削除する

単一の値を削除するには、Properties.deleteProperty(key) を呼び出します。

service/propertyService.gs
try {
  // Delete the user property 'DISPLAY_UNITS'.
  const userProperties = PropertiesService.getUserProperties();
  userProperties.deleteProperty('DISPLAY_UNITS');
} catch (err) {
  // TODO (developer) - Handle exception
  console.log('Failed with error %s', err.message);
}

現在のストア内のすべてのプロパティを削除するには、Properties.deleteAllProperties() を呼び出します。

service/propertyService.gs
try {
  // Get user properties in the current script.
  const userProperties = PropertiesService.getUserProperties();
  // Delete all user properties in the current script.
  userProperties.deleteAllProperties();
} catch (err) {
  // TODO (developer) - Handle exception
  console.log('Failed with error %s', err.message);
}

スクリプトのプロパティを手動で管理する

プロジェクト設定ページでは、最大 50 個のカスタム プロパティを Key-Value ペアの文字列として手動で追加できます。50 を超えるプロパティを追加するには、データの保存で説明した方法を使用して、プログラムで追加する必要があります。プロジェクト設定ページからスクリプト プロパティを設定する場合、スクリプト変数を参照することはできません。

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

  1. Apps Script プロジェクトを開きます。
  2. 左側の [プロジェクト設定] プロジェクト設定のアイコン をクリックします。
  3. 最初のプロパティを追加するには、[スクリプト プロパティ] で [スクリプト プロパティを追加] をクリックします。
  4. 2 つ目以降のプロパティを追加するには、[スクリプト プロパティ] で [スクリプト プロパティを編集] > [スクリプト プロパティを追加] をクリックします。
  5. [プロパティ] に鍵名を入力します。
  6. [] にキーの値を入力します。
  7. (省略可)プロパティを追加するには、[スクリプト プロパティを追加] をクリックします。
  8. [スクリプト プロパティを保存] をクリックします。

スクリプトのプロパティを編集

  1. Apps Script プロジェクトを開きます。
  2. 左側の [プロジェクト設定] プロジェクト設定のアイコン をクリックします。
  3. [スクリプト プロパティ] で、[スクリプト プロパティを編集] をクリックします。
  4. 変更するプロパティごとに、キー名とキー値を変更します。
  5. [スクリプト プロパティを保存] をクリックします。

スクリプト プロパティを削除する

  1. Apps Script プロジェクトを開きます。
  2. 左側の [プロジェクト設定] プロジェクト設定のアイコン をクリックします。
  3. [スクリプト プロパティ] で、[スクリプト プロパティを編集] をクリックします。
  4. 削除するプロパティの横にある削除アイコン をクリックします。
  5. [スクリプト プロパティを保存] をクリックします。