なぜ秘密情報の管理が必要なのか
まず、なぜ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の商標です。