MENU

GASで利用者ごとの設定を保存する

当ページのリンクには広告(PR)が含まれていることがあります。
GASで利用者ごとの設定を保存する。共有するツール、利用者別の設定、各自の初期値の処理例。

共有ツールの表示件数を変えたら、同僚の画面まで同じ件数になってしまう場合は、設定の保存先を確認します。スクリプト全体で共有する設定と、その利用者だけの設定は分けて保存できます。

GASのUserPropertiesは、現在または実効的な利用者に対応した、スクリプト内の設定を扱います。APIキーのような共通設定を保存するScriptPropertiesと同じものではありません。ここでは個人向けの表示件数だけを保存する例を使います。

目次

設定の値は文字列で保存される

PropertiesServiceはキーと値を文字列として保存します。20を入れても、読み出すときの値は文字列なので、計算や件数制限へ使う前に変換と範囲の検査が必要です。

未設定と不正な値も区別します。設定がなければ既定の20件を使いますが、保存値が"abc"なら設定の不備として止めます。何でも既定値へ戻すと、設定が無視された理由を利用者が追えなくなります。

保存先の違いとデータ形式は公式のProperties Serviceガイドで確認できます。共通のAPI設定はスクリプトプロパティの使い方と役割を分けます。

表示件数を読む・保存する・戻す

練習用の許容範囲は1〜100件です。文字列を数値へ変えるだけでなく、整数だけの文字が保存されているかを先に検査します。20件を20として読み進めることはしません。

function readPageSize(store) {
  const raw = store.getProperty('practice.pageSize');
  if (raw === null) return 20;
  if (!/^[1-9]\d*$/.test(raw)) throw new Error('表示件数の設定を確認してください');
  const value = Number(raw);
  if (!Number.isSafeInteger(value) || value > 100) {
    throw new Error('表示件数は1〜100です');
  }
  return value;
}

function savePageSize(store, value) {
  if (!Number.isSafeInteger(value) || value < 1 || value > 100) {
    throw new Error('表示件数は1〜100です');
  }
  store.setProperty('practice.pageSize', String(value));
}

function practiceUserSetting() {
  const store = PropertiesService.getUserProperties();
  console.log('変更前: ' + readPageSize(store));
  savePageSize(store, 30);
  console.log('保存後: ' + readPageSize(store));
}

function resetPracticeUserSetting() {
  PropertiesService.getUserProperties().deleteProperty('practice.pageSize');
}

未設定からpracticeUserSettingを動かすと、変更前20、保存後30が想定されます。保存するのはpractice.pageSizeだけです。戻したい場合はresetPracticeUserSettingでそのキーを削除すると、次の読み取りは既定の20になります。ほかの設定を全削除する処理は使いません。

誰の設定になるかを確かめる

UserPropertiesの「利用者」を、ブラウザの閲覧者と常に同じだと思わないようにします。公式のPropertiesServiceは、現在または実効的な利用者の保存先として説明しています。

Webアプリが作成者として実行される構成では、閲覧者ごとに独立した設定になるかを、その実行条件で確認する必要があります。別アカウントで開いて設定を変えた際に、誰の値が保存され、どちらの画面へ影響するかを試してください。

カスタム関数にも固有の制約があります。セルから呼ぶ関数の中で、表示設定を変更するような動きへ広げる前に、使う実行方法に合う保存先かを確認します。画面と権限の関係はGASのWebアプリ化にもまとめています。

設定はデータ本体と分ける

表示件数のように失っても再設定できる値と、受付の完了状態や顧客データは役割が違います。ここで保存しているのは画面表示の設定だけです。機密情報を入れるかどうかは別の判断です。

ローカルでは代用の保存先で、未設定・保存後・不正文字・範囲外・初期化を確認しました。Google上での利用者の切り替わりや保存権限は未実行です。最初に共有用の本物のツールへ組み込まず、練習用プロジェクトでアカウントごとの動作を確かめてください。

この記事を書いた人

Watanabeのアバター Watanabe サイト運営者

2020年よりブログ開始。
SEOが思いのほか性にあっていたようで現在に至る。
モットーは「勝率の高い選択をする」
AIは活用するが吉、最後は人間が息を吹き込む。
アートと科学を追求し、日々精進。
―――
収益:6~7桁をウゴウゴ。
サイト:ペラサイト~中規模サイトまで運営中。
案件:1000円以上の案件をメインに取組中。
打ち手:ブラックSEO~ホワイトSEOまで
―――

目次