【GAS】自分がGoogle Apps Scriptで使うファイルIDとかフォルダIDを管理するライブラリを作ればいいじゃん

Code

はじまり

リサちゃん
リサちゃん

作業にGoogle Apps Scriptを使うことが多いのだが、そのスクリプトで書いたGoogleスプレッドシートやGoogleドライブのIDがどのファイルのことを書いたか忘れちゃうんだよなあ・・・

135ml
135ml

おっと! お困りかい?

リサちゃん
リサちゃん

うむ、フォルダIDとかファイルIDを一括で管理できれば良いんだけど・・・

135ml
135ml

そんなときは、自分がGoogle Apps Scriptで使うファイルIDとかフォルダIDを管理するライブラリを作ればいいじゃん。

GASで書いたファイルIDとかフォルダIDが点在していませんか?

Google Apps Scriptでは、例えば以下のようなメソッドや関数を使う時に、ファイルIDやフォルダIDを記述すると思います。

// Google Drive
let folder = DriveApp.getFolderById("ID");
let file = DriveApp.getFileById("ID");

// Google Docs
let doc = DocumentApp.openById("ID");

// Google Spreadsheet
let ss = SpreadsheetApp.openById("ID");

// Google Slides
let slide = SlidesApp.openById("ID");

コードの中にIDを直書きしてしまうと、後々見返した時に、どこのスクリプトにIDを記述されているのかが追えなくなるという事態が、僕の中で問題の1つとしてありました。

この状態だと、例えば、その記述されているフォルダやファイルを消してしまった時に、そのスクリプトが気づかぬ間に動かなくなってしまう危険性があります。

そこで、IDを一括管理するためのライブラリを作った

そこで、初期段階として、1つライブラリを作りました。

以下、そのライブラリを「ID一括管理ライブラリ」と呼びます。

どんなものかと言うと、僕は普段スクリプトを書く時に、そのスクリプトに使うIDとかの定数をスクリプトの特定のファイルに一括で管理しています。

そこの定数の宣言時にID一括管理ライブラリ内の関数を読み込ませます。

そして、読み込まれる方のID一括管理ライブラリでは、各々のスクリプトで使用するフォルダやファイルのIDを関数の返り値として記述します。

こうすることで、ファイルIDやフォルダIDの定数を保持しているのは、ID一括管理ライブラリのみとなります。

このライブラリには、Google Workspace利用するフォルダIDとファイルIDだけではなく、スクリプト内でリクエストしたいURLを書くのもアリですし、OAuth tokenを記述するのもアリかと思います。

まあ、OAuth tokenとかを書くのであれば、そのライブラリは間違いなくPrivateにするべきですが・・・。まあ、基本的にこの「ID一括管理ライブラリ」は自分だけ閲覧できる状態にするべきだと思います。

ライブラリを読ませる方法

さて、この「ID一括管理ライブラリ」を利用する方法です。

「ID一括管理ライブラリ」のスクリプトIDをコピーする

まずは、スクリプトIDをコピーします。

スクリプトエディターの画面の左側の歯車をクリックすると、スクリプトの設定画面になります。

その画面で、「ID一括管理ライブラリ」のスクリプトIDが表示されますので、「コピー」をクリックします。

「ID一括管理ライブラリ」を読み込ませるスクリプトにインポートする

「ID一括管理ライブラリ」を読み込ませられるように設定します。

スクリプトエディタ上の「ライブラリ」一覧の「+」ボタンをクリックします。

すると、インポートするスクリプトIDを入力するポップアップが表示されますので、先程コピーした「ID一括管理ライブラリ」のスクリプトIDを貼り付けます。

そうすると、「ID一括管理ライブラリ」を読み込めます。今回は、自分だけが利用するライブラリになりますので、「HEAD(開発モード)」を選択して「追加」をクリックします。

これで、スクリプトに「ID一括管理ライブラリ」を導入することが出来ました!

補足

今回、「HEAD(開発モード)」を利用するので、Google Cloud Platform(GCP)プロジェクトの設定を行う必要はないかと思います。

おそらく、Google Apps Scriptのホーム画面にある、この「Google Apps Script API」もオフのままでいけるのではないでしょうか。(ちょっと自信ないです。インポートできなかったらオンにしてみて下さい。)

これからの構想

これで、Googleドライブにあるフォルダ/ファイルのIDを一括管理することが出来ました。

そして、次の段階としては、Googleドライブ上のフォルダ/ファイルを削除しようと思った時に、

このライブラリのスクリプトファイルの中身を読み取って、自分が作成したスクリプトにそのIDが使用されていないかどうかをチェックするツールを作れれば良いかなと思っています。

これで行けそうな気がしますね。まあ、今度取り組んでみたいと思います。

grep 'ID' -r ./

おしまい

135ml
135ml

今回は、GASライブラリ上でやってみましたが、他にDBとかで管理する手もあるかと思います。

やりやすい方法で一括管理してみましょう。

おそらく、スクリプトの手直しや管理がしやすくなるはず。

リサちゃん
リサちゃん

一目で見渡せる。って良いよね。

以上になります!

コメント

タイトルとURLをコピーしました