Google Apps Scriptで宣言した関数が、「実行する関数を選択」に一覧表示される。
privateとして扱いたい関数については非表示にしたいと思い、調べたのでメモ。
試行錯誤
何パターンか試してみたが、関数宣言(function 関数名...
)、関数式(const 関数名 = function...
)、ラムダ式のいずれも、グローバルに記述した場合は選択欄に表示される。
クラスにメソッドとして定義したり、IIFEで関数を返すと、表示されなくなった。
また、関数名の指定の仕方で何とかならないかと思い、関数名に記号をつけたりしてみたところ、関数名の末尾にアンダースコアをつけた場合も表示されなくなった。
非表示になるパターン
関数名の末尾にアンダースコア
これが一番簡単。
最初はPythonのように、関数名の先頭にアンダースコア2つをつけたりしたが効果なし。
そういえば、Google JavaScript Style Guideでは、privateなフィールドやメソッドの末尾はアンダースコアにするんだったなと思い、試してみたらうまくいった。
Google Apps Scriptのベストプラクティスにも記載あり。
関数宣言、関数式、ラムダ式、いずれの場合も有効だった。
// 関数宣言 function hiddenFunc1_() {} // 関数式 const hiddenFunc2_ = function() {}; // ラムダ式 const hiddenFunc3_ = () => {};
また、この方法で宣言した関数は、サーバー側の関数呼び出しの対象外ともなる模様。
クラスにメソッドとして定義
グローバル関数が選択肢として表示されるようなので、メソッドにしてやれば表示されない。
2022/4現在、Google Apps Scriptでもclassキーワードによるクラス宣言が使えるので、メソッドにするのは簡単。
適当なオブジェクトを用意して、そこにメソッドを追加しても非表示になりそうだが、未確認。
IIFEで関数を返す
エンクロージャ的に、関数を返す即実行関数だと、認識されない模様。
const hiddenFunc = (() => { return () => {}; })();
一応できることはできるが、末尾アンダースコアがあるので使わないか。
振り返り
何年か前にも試していて、できることは覚えていたが、どうやればいいかすっかり忘れていたのでメモしておく。
claspは使わず、久しぶりにGASを書いたが、クラス宣言が使えて結構感動した。