見出し画像

GASで環境変数を管理する - Google Apps Script

なぜ環境変数を使う必要があるのか

環境変数を使うことでパスワードや機密情報を安全に管理することができます。環境変数とは、パスワードや機密情報を隠すためのものです。ソースコードに含めずに、別の場所に保存しておきます。もしソースコードが漏洩した場合でも、環境変数は漏れないため、安全に保たれます。

このブログは素人の筆者が「あったらいいな」と思ったものを”完全個人利用”を前提に作る際、調べたことや感じたことを踏まえつつ ChatGPTの助けを借りてまとめたものです。特にセキュリティに関しては素人ですので、レベルに応じて必要な対策を取ってください。

環境変数の使い方

Google Apps Script (GAS) には、3 つの Properties サービスのメソッドがありますが、個人で使用する場合は UserProperties のみで十分です。

参照:プロパティ サービス

環境変数を管理する関数をメインのコードファイルとは別にしておくと、管理が容易になります。その場合、ファイルを移動する際は、`appsscript.json`の直下に配置してください。

コード解説

参照: Class Properties

準備

1. 設定するプロパティ名と値を用意する

const newProperties = {
  API_KEY: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  FOLDER_ID: "1234567890abcdefghijklmnopqrstuvwxyz",
};

この部分をプロジェクトや目的に応じて書き換えます。複数のプロパティを一度に設定することができます。設定が終了したら、セキュリティ上の理由から、必ずプロパティ名と値を削除するようにしてください。

2. よく使うメソッドを変数に入れておく

const userProperties = PropertiesService.getUserProperties();

実行用の関数を作成する

GAS で関数を選んで実行する際に使う関数を作ります。用意するのは、プロパティを「設定する関数」「確認する関数」「削除する関数」「取得する関数」の4つです。

1. プロパティを設定する関数

function setAndLogUserProperties() {
  userProperties.setProperties(newProperties);
  // 設定した環境変数をログに表示する
  for (const key in newProperties) {
    Logger.log("プロパティ名: " + key + "\n値: " + newProperties[key]);
  }
}

プロパティをまとめて設定する際は`setProperties`を使います。(一つずつ設定する`setProperty`もありますが今回は使いません)

2. すべてのプロパティを確認する関数

function checkUserProperties() {
const properties = userProperties.getProperties();
// 取得したすべてのプロパティ名と値をログに表示する
for (const key in properties) {
  Logger.log(key + ": " + properties[key]);
}
}

現在設定されているプロパティと値を取得する際は`getProperties`を使います。取得するだけでは表示されないのでログに表示するようにしています。

3. 特定のプロパティを削除する関数

function removeUserProperty() {
// プロパティ名を入力する
const key = "KEY"

userProperties.deleteProperty(key);

// 削除が完了したことを確認する
Logger.log(key + "はUserPropertiesから削除されました。");
}

特定のプロパティを削除する際は`deleteProperty`を使います。(すべてのプロパティを削除する`deleteAllProperties`もあります)

4. 特定のプロパティの値を取得する関数

function getApiKey(KEY) {
  return userProperties.getProperty(KEY);
}

特定のプロパティの値を取得する際は`getProperty`を使います。実際のコードで呼び出す場合にこの関数を使います。

例:フォルダIDを`FOLDER_ID`というプロパティ名で設定している場合

const forderID = getApiKey(`FOLDER_ID`);

終わりに

GASでコードを書く際、セキュリティ的に環境変数を使ったほうがいいとは思いつつ、いつも適当にやり過ごしていたので、今回ChatGTPの助けを借りつつ自分なりにまとめてみて、理解が深まりました。

複数人で使う場合は`documentProperties`や`scriptProperties`を使い分ける必要も出てくると思います。

この記事が参考になったら記事の購入またはサポートをお願いします!

本日のおまけ

  • `UserProperties` `documentProperties` `scriptProperties`の使い分けをわかりやすくまとめた画像

  • この記事で作った関数の一発コピー用コードスニペット

ここから先は

1,310字 / 2画像

¥ 100

期間限定 PayPay支払いすると抽選でお得に!

この記事が参加している募集

#スキしてみて

527,736件

#AIとやってみた

28,436件

読者の皆様からのサポートに、心より感謝しています。これからもより良い記事をお届けできるよう、日々精進してまいります!