はじめに
claspを使えば、GASのコーディングをローカルで行い、それをGAS環境へpushできます。なので、ローカルからGitHubへcommitなどの管理もしやすい。
一方で、GASには、パスワードなどの秘密情報を格納する場所がありません。
GASのブラウザ画面にハードコーディングするのは百歩譲ってOK(?)としても、コードをGitHubに載せるのだとしたら、コード上にハードコーディングするのはご法度。
ということで、その解決方法(の1つ)です。百歩譲らなくてもよいです。
方法
1. 空の状態でコーディング
下記のコードをGASへpushします。この時点では、APP_PASSWORD
はどこにも書いていません。
// 設定
const APP_PASSWORD_INITIAL = "";
// 固定値
const APP_PASSWORD = PropertiesService.getScriptProperties()
.getProperty("APP_PASSWORD");
// 初期処理
// 初めての実行時に、APP_PASSWORD_INITIALに正しい値を入れて1回実行する。
// そうすると、ScriptPropertiesに値が格納され、次回以降使えるようになる。
function initializeEnvironment() {
PropertiesService.getScriptProperties()
.setProperty("APP_PASSWORD", APP_PASSWORD_INITIAL);
}
2. GAS上で実行してスクリプトプロパティに覚えさせる
GASのエディタの中で、const APP_PASSWORD_INITIAL = "";
にパスワードを記入します。次にinitializeEnvironment()
をデバッグ実行します。
そうすると、ScriptPropertiesに設定されます。この値は、スクリプトエディタにアクセスできる人以外には読むことはできません。(うっかり値をreturnするAPIを作ったりすることは問題外として)
3. 通常利用
下記によって、スクリプトプロパティから値を抽出してAPP_PASSWORD
に設定されるので、そこから先は変数として使うだけ。
const APP_PASSWORD = PropertiesService.getScriptProperties()
.getProperty("APP_PASSWORD");
注意点
変数を出力するコードを書いてしまったらもうおしまいなので、そこは注意。
ローカルでコーディング中には、const APP_PASSWORD_INITIAL = "";
に触らない。
Googleの公式としては
Google Cloud Secret Managerという、GCPの機能を使って、そこに保存しそこから読むべしとのこと。そのためには、GCPにプロジェクトを作成し、GASとGCPを接続しないといけない。
課金は発生しないと思いますが、GCPの利用のためには、カード登録をしないといけない。
正式利用するならそうすべきだと思いますが、個人ツールとかなら、スクリプトプロパティでいいんじゃないかと個人的には思います。(個人の見解です)
まとめ
最近GASで何かをすることが多いので、自分の備忘録も兼ねて書いておきました。だれかの参考になれば。
ではよきwith Google生活を。