📝

もうコードに設定を直書きしない!GASのプロパティを使い分けについて

に公開

はじめに

GASの前回実行時点の情報を保存しておきたい場面が出てきたため、プロパティを使って解決しました。

その際にGASのPropertiesServiceには複数の種類があり、今回のケースではどれを使うのがベストか迷ったため、自己理解のために調査した内容をまとめたいと思います。

この記事を読めば、以下の点が明確になります。

  • 3つのプロパティ(Script, User, Document)の役割と違い
  • 具体的なシナリオに基づいた、実践的な使い分け方法
  • プロパティ利用時の注意点

プロパティの種類と早わかり比較表

PropertiesServiceには 3種類 のプロパティが存在し、データの保存場所や共有範囲に違いがあります。
それぞれの特徴を簡単に表にまとめました。

プロパティ種類 保存場所 共有範囲 ファイルコピー時の挙動
スクリプトプロパティ スクリプト自体 全員で共有 引き継がれる
ユーザープロパティ ユーザー × スクリプト 個人に限定 引き継がれない
ドキュメントプロパティ ファイル自体 ファイル閲覧者で共有 引き継がれない

この違いを理解することが、適切な使い分けの第一歩です。
それぞれの具体的な使い分けを詳しく見ていきましょう。

具体的な使い分け

スクリプトプロパティ:システム全体の「固定設定」に

役割:
誰が使っても、ファイルをコピーして使っても変わらない、システム全体の共通設定を保存します。
また、スクリプトプロパティは唯一GUIで設定値の追加・削除・編集が可能なプロパティです。

コード内に定数として書く(ハードコーディング)よりも、スクリプトプロパティに分離(外部化)する方が断然おすすめです。
非エンジニアでも安全に変更でき、コードの可読性も上がります。

使用例:
報告書などを作成する際、
テンプレートとなるスプレッドシートをコピーして編集し、スプレッドシートをPDF変換してGoogle Driveに保存するような場合に、PDFの提出先となるフォルダIDはスクリプトプロパティに保存します。

ユーザープロパティ:実行ユーザーの「個人設定」に

役割:
スクリプトを実行するユーザー(個人)の設定を保存します。
データはその人だけのプライベートなものです。
「この設定は、他の人に見られたり、影響を与えたりしてはいけない」と感じたら、ユーザープロパティを使いましょう。

使用例:
個人のアカウントに紐づくAPIキーなどを保存します。
(必要に応じて初回起動時などにユーザーに入力をしてもらいましょう。)

ドキュメントプロパティ:ファイルごとの「状態管理」に

役割:
特定のファイルで固有のデータや状態を保存します。
ファイル自体に保存されるのでユーザー間では共有されます。

使用例:
連番の情報や最終更新の情報などでファイルをコピーした場合にリセットされて欲しい値を保存します。
(個人的には使ったことがないです。)

注意点とTips

プロパティを使いこなす上で、知っておくと便利な知識や注意点もご紹介します。

注意:値はすべて「文字列」として扱われる

PropertiesServiceに保存した値は、取得するとすべて文字列型 (String) になります。

const properties = PropertiesService.getScriptProperties();
properties.setProperty('FEE', 100);

const fee = properties.getProperty('FEE'); // "100" という文字列が返る

// そのまま計算すると意図しない結果に!
console.log(100 + fee); // 200 ではなく "100100" の文字列結合になる

数値として扱いたい場合は、Number()parseFloat() で必ず型変換しましょう。

const feeValue = parseFloat(properties.getProperty('FEE'));
console.log(100 + feeValue); // 200

Tips:複雑なデータはJSON形式で

オブジェクトや配列のような複雑なデータを保存したい場合は、JSON.stringify()で文字列に変換してから保存し、取り出す際にJSON.parse()で元に戻すのが定石です。

const userSettings = { theme: 'dark', notifications: true };
// 保存時
properties.setProperty('user_settings_json', JSON.stringify(userSettings));
// 取得時
const settings = JSON.parse(properties.getProperty('user_settings_json'));
console.log(settings.theme); // dark

まとめ

今回は、GASの3つのプロパティの使い分けについて解説しました。

これらの役割を理解し適切に使い分けることで、コードは格段に読みやすく、安全で、メンテナンスしやすいものに進化します。

まずはコードの中にあるAPIキーや固定IDを、スクリプトプロパティに置き換えることから始めてみませんか?

より詳細な情報が気になった方は公式リファレンスも覗いてみて下さい。

BABY JOB  テックブログ

Discussion