森田 嶺

プロパティサービス入門!GASで機密情報を安全に管理する方法

プロパティサービス入門!GASで機密情報を安全に管理する方法サムネイル画像

Google Apps Script(GAS)を使って、SlackやSalesforceといった外部サービスと連携する際、APIキーやアクセストークンといった「秘密情報」をコード内に埋め込むケースがあります。しかし、そのままコード内に書いてしまうのは非常に危険です。誤って公開された場合、情報漏洩や不正アクセスのリスクがあります。

そこでGASで「秘密情報」を安全に管理するために用意されているのが、「PropertiesService(プロパティサービス)」です。本記事では、GASのプロパティサービスを使って、安全かつ効率的に秘密情報を管理する方法を、初心者にもわかりやすく解説します。

なぜ秘密情報の管理が必要なのか

まず、なぜGASで秘密情報の取り扱いに注意しなければならないのかを理解しておきましょう。

1つ目はセキュリティの観点です。スクリプトエディタに直接APIキーやパスワードを書き込むと、他の編集者や管理者がコードを見ることで漏洩するリスクがあります。また、GitHubなどにコードを公開する際、うっかりキーごとアップロードしてしまう可能性もあります。

2つ目は、保守性の観点です。スクリプト中にハードコーディングされた値を変更するのは非常に面倒なのと、プロジェクトの環境(本番・開発)に応じた設定管理がしづらくなるデメリットがあります。

プロパティサービスとは何か

プロパティサービスは、GASでキーバリュー形式の設定情報を保存・取得できる仕組みです。例えば以下のような情報を格納できます。

  • APIキー
  • アクセストーク
  • 外部サービスの認証情報
  • 各種設定(ユーザーの設定や最終実行日時など)

プロパティサービスには3種類のグローバルオブジェクトが存在する

プロパティサービスでは、用途に応じて次の3つの保存領域を使い分けます。それぞれ用途や共有範囲は異なりますが、今回のテーマであるAPIキーやアクセストークン等の機密情報の管理については、Script Propertiesを使います。

種類

説明

共有範囲

Script Properties

スクリプト全体で共通の情報

全ユーザー共通

User Properties

各ユーザー専用の情報

スクリプトを使っているユーザー単位

Document Properties

特定のドキュメントに紐づく情報

ドキュメントの共有ユーザー

保存情報はコードから分離されている

プロパティサービスを利用する場合、保存された情報はコードとは分離されるため、GitHubなどでコードを共有しても秘密情報が漏れにくくなるというメリットがあります。GitHub上でキーを参照するプログラムが保存されていたとしても、キーに紐づく機密情報はGASプロジェクト内で保管されます。ただし、対象のGASプロジェクトで編集権限以上を保持している場合、GASプロジェクトの設定ページから、保存された機密情報が閲覧できてしまいます。機密情報に対するアクセス範囲を絞り込みたい場合は、対象者に閲覧権限を付与するようにしてください。

機密情報を管理する場合はScript Propertiesを利用する

前述した通り、APIキーやアクセストークン、もしくは共通で利用したいWebサービスの接続先URLなど、アプリ全体で共通の値を保存したい場合はScript Propertiesを利用します。次章では、実際にScript Propertiesを使って、機密情報を操作する手順について説明します。

Script Propertiesの使い方

ここからは、実際にScript Propertiesを使って、機密情報を管理する方法について学んでいきます。

機密情報を保存する(setProperty)

Script Propertiesに機密情報を保存する場合は、setProperty()メソッドを利用してプロパティデータを保管します。このメソッドで保存できるデータは1つのみです。複数のプロパティをまとめて保存したい場合は、後述するsetProperties()メソッドを利用します。

function saveSecret() {

  // Script Propertiesを取得する

  const scriptProperties = PropertiesService.getScriptProperties();

  //「API_KEY」をキーとして、APIキー(文字列)を保存する

  scriptProperties.setProperty('API_KEY', 'your-secret-api-key');

}

機密情報を取得する(getProperty)

Script Propertiesから機密情報を取得する場合は、getProperty()メソッドを利用してプロパティデータを取得します。複数のプロパティをまとめて取得したい場合は、getProperties()メソッドを利用します。

function getSecret() {

  // Script Propertiesを取得する

  const scriptProperties = PropertiesService.getScriptProperties();

  //「API_KEY」をキーとして、APIキー(文字列)を取得する

  const apiKey = scriptProperties.getProperty('API_KEY');

  Logger.log(apiKey);

}

機密情報を一括保存する(setProperties)

Script Propertiesに複数の機密情報を保存する場合は、setProperties()メソッドを利用してプロパティデータを保管します。このメソッドでは、連想配列を利用して複数のプロパティを保存することができます。

function saveMultipleSecrets() {

  // 連想配列を利用して一括で値を保存する

  PropertiesService.getScriptProperties().setProperties({

    'API_KEY': 'abc123',

    'ENDPOINT_URL': 'https://example.com/api'

  });

}

機密情報を一括取得する(getProperties)

Script Propertiesから機密情報を一括で取得する場合は、getProperties()メソッドを利用します。

function getAllSecrets() {

  // 全ての機密情報を取得する

  const props = PropertiesService.getScriptProperties().getProperties();

  Logger.log(props); 

}

機密情報を削除する(deleteProperty)

Script Propertiesから機密情報を削除する場合は、deleteProperty()メソッドを利用します。このメソッドでは、キーを指定することでプロパティを削除することができます。

function deleteSecret() {

  // キーデータを指定してプロパティデータを削除する

  PropertiesService.getScriptProperties().deleteProperty('API_KEY');

}

GASコンソールでプロパティを管理する

ここまで、GASコードを使ってプロパティデータにアクセスする方法について解説しましたが、コードを書かなくてもGASプロジェクトの設定画面から、プロパティデータをKey/Value形式で保存することは可能です。設定画面でプロパティを保存する方法は以下の通りです。

1. GASプロジェクトを開く

2. 左メニューの「プロジェクトの設定(歯車アイコン)」をクリックする


3.「スクリプトプロパティ」設定で「スクリプトプロパティの追加」をクリックする



4. 「プロパティ」と「値」を入力して、「スクリプトプロパティを保存」をクリックする



これで、スクリプトプロパティの設定は完了です。

プロパティサービスを安全に使うためのベストプラクティス

プロパティの暗号化は必要?

基本的に、プロパティサービスはGASの内部に安全に保存されますが、完全な暗号化ではありません。高いセキュリティ要件がある場合、暗号化ライブラリを使って保存前に暗号化し、取得時に復号する方法もあります。

デプロイ前にプロパティを手動設定する

前章で説明した通り、GASのスクリプトエディタ > 「プロジェクトの設定」>「スクリプトプロパティ」からプロパティを直接保存できます。これなら初期設定ファイルに情報を埋め込まずにすみます。基本的にはGASプログラムでなく、Webのコンソールで設定すればいいでしょう。

まとめ

GAS(Google Apps Script)でAPIキーや認証情報などの秘密情報を安全に管理するには、プロパティサービスの活用が欠かせません。コード内に直接書くのではなく、スクリプトやユーザー、ドキュメント単位で情報を管理することで、セキュリティを高めながら再利用性の高いスクリプトを作成できます。特に、Script Propertiesはチーム開発や外部連携でも便利で、プロジェクトの初期設定や接続先URLの管理にも最適です。また、GUIからの設定やset/getPropertyメソッドの使い方をマスターすることで、より柔軟なスクリプト運用が可能になります。安全・簡潔・拡張性のあるGAS開発の基本ツールとしてプロパティサービスを積極的に取り入れていきましょう。

※Google CloudおよびGoogle Cloudの製品・サービス名称はGoogle LLCの商標です。

森田 嶺
森田 嶺
大学卒業後、 AWS や Google Cloud 等、主にクラウドを基盤とした新規サービス開発の経験を経て、YOSHIDUMIに入社。Google ドライブ拡張サービス「Cmosy」「共有ドライブマネージャー」等、 Google Cloud を活用した自社サービスの開発に従事。現在、 Google 等が提供する生成AIを活用したサービスを開発中。
ぶっちゃけどうなの? 経験者が語るグループウェア移行の落とし穴セミナー

13:00-14:00 オンライン

ぶっちゃけどうなの? 経験者が語るグループウェア移行の落とし穴セミナー

詳細はこちら

データはすべてドライブへ!Google ドライブ運用まるわかりセミナー

14:00-15:00 オンライン

データはすべてドライブへ!Google ドライブ運用まるわかりセミナー

詳細はこちら

Google Workspace ユーザー必見! AppSheet & Google Apps Script 連携で実現する業務改善セミナー

14:00-15:00 オンライン

Google Workspace ユーザー必見! AppSheet & Google Apps Script 連携で実現する業務改善セミナー

詳細はこちら

非エンジニア歓迎!基礎から活用シーンまで学べる! AppSheet を使った現場 DX 入門セミナー

14:00-15:00 オンライン

非エンジニア歓迎!基礎から活用シーンまで学べる! AppSheet を使った現場 DX 入門セミナー

詳細はこちら

Gemini と NotebookLM でビジネスを加速! ~ Google Workspace との連携で実現する、生産性向上と DX 推進~

14:00-15:00 オンライン

Gemini と NotebookLM でビジネスを加速! ~ Google Workspace との連携で実現する、生産性向上と DX 推進~

詳細はこちら

まだ AI 導入で消耗してる?2025 年最新「生成 AI 標準搭載」Gemini vs Copilot 徹底比較

14:30-15:00 オンライン

まだ AI 導入で消耗してる?2025 年最新「生成 AI 標準搭載」Gemini vs Copilot 徹底比較

詳細はこちら

オンラインセミナー開催中

お申込みはこちらをCheck!

関連する他の記事をよむ