こんにちは!
Yuki (@yukibnb) です。
スプレッドシートに独自メニューとGoogle Apps Script (GAS) の実行ボタンを追加する方法を先日紹介しました。
www.yukibnb.com
独自メニューは非常に便利ですが、スプレッドシートにアクセスできる社内スタッフ全員がGASを実行できるとまずい場合もあるかと思います。
今回は特定のGoogleユーザー (Google Workspaceユーザー) のみがGASを実行できるようにするコードを紹介します。
いつものようにコピペでそのまま使用できます!
利用シーン
スプレッドシートなどのGoogleサービスは他者と簡単に共有でき、リアルタイムで共同作業できるのが魅力です。
上記のように多くの社内スタッフと共同作業を行うととても便利です。
ですがスプレッドシートを閲覧・編集させたいがGASは実行させたくないスタッフもいると思います。
例えば画像内の鈴木さん (suzuki@company.com) がまさにそのスタッフだとします。
スタッフ名 | 閲覧・編集 | GAS実行 |
---|---|---|
田中さん | ||
鈴木さん | ||
山田さん |
「鈴木さんにはスプレッドシートを閲覧・編集して業務を行ってほしい。でもGASは実行させたくない」
こんな時に使えるコードです。
コピペでOK!GASの実行可能ユーザーを制限するコード
コードを書く場所
紹介するコードは実行したい本来の関数より前にコピペしてください。
そうすることで、許可されていないGoogleユーザーがGASを実行しようとするとその時点でGASを終了させることができます。
GASの実行可能ユーザーを制限するコード
コードをそのままコピペして使用できます。
GAS実行を許可するGoogleユーザーのメールアドレスはみなさんご自身で置き換えてください。
複数のGoogleユーザーにGAS実行を許可させたい場合、カンマで区切って入力してください。
//GAS実行を許可するGoogleユーザーのメールアドレスの一覧 var acceptedUsers = ["tanaka@company.com" ,"yamada@company.com"]; //ファイルにアクセスしているGoogleユーザーのメールアドレスを取得する var activeUser = Session.getActiveUser().getEmail(); //許可されていない場合、GASを終了する if(acceptedUsers.indexOf(activeUser) == -1) { Browser.msgBox("あなたには実行権限がありません。"); return; }
これだけでOKです。簡単ですね!
もし鈴木さん (suzuki@company.com) や他の許可されていないユーザーがGASを実行しようとした場合、「あなたには実行権限がありません。」というメッセージボックスが表示され、そこでGASが終了します。
ポイントを徹底解説!
紹介したGASのコードのポイントを細かく紹介します!
「細かいことはいいから使えたらいい!」という方や、GAS内のコメントで十分という方はこの項目は飛ばして頂いて大丈夫です。
許可するユーザーのメールアドレスを配列に格納する
変数acceptedUsers
にGAS実行を許可するユーザーのメールアドレスを配列で格納します。
コード内では"tanaka@company.com"と"yamada@company.com"を変数acceptedUsers
に格納しました。
許可するユーザーの数だけGoogleユーザーアカウントのメールアドレスを記入してください。
複数記入する場合はカンマで区切って記入してください。
ファイルにアクセスしているユーザーのメールアドレスを取得する
Session.getActiveUser().getEmail()
でファイルにアクセスしているユーザー(ログインしているユーザー)のメールアドレスを取得します。
そしてそのメールアドレスを変数activeUser
に格納します。
もし田中さんがファイルにアクセスしてGASを実行すれば変数activeUser
には"tanaka@company.com"が格納されます。
同じように鈴木さんがファイルにアクセスしてGASを実行すれば変数activeUser
には"suzuki@company.com"が格納されます。
「許可するユーザー」 = 「アクセスしているユーザー」 か判別する
ここまでの処理で「許可するユーザー」と「アクセスしているユーザー」をそれぞれ変数に格納できました。
次はindexOfメソッドを使用して「許可するユーザー」 = 「アクセスしているユーザー」 か判別します。
indexOfメソッドとは検索したい値が配列内に存在するかどうか確認できるメソッドです。
もし検索したい値が配列内に存在しなければ「-1」を、存在すれば配列のインデックス番号「0以上」を返します。
対象 | 種別 | メールアドレス |
---|---|---|
許可するユーザー | "yamada@company.com" |
|
アクセスしているユーザー |
今回のコードでは《許可するユーザー》配列である変数acceptedUsers
に、《アクセスしているユーザー》鈴木さんのメールアドレス"suzuki@company.com"が含まれていなければ「-1」を、含まれていれば配列のインデックス番号「0以上」を返します。
鈴木さんのメールアドレス"suzuki@company.com"は変数acceptedUsers
に含まれていませんので、「-1」を返します。
つまりここで大事なことは許可されていないユーザーは「-1」になるということです。
許可されていない場合、GASを終了する
許可されていないユーザーは「-1」になることがわかりました。
ということは「-1」の時にGASを終了させることができればOKですね。
以下箇所では「-1」になったらBrowser.msgBox()
でメッセージを表示し、return
で関数を終了します。
return
を使うことでその場で関数を終わらせることができたので、以降に記述されているGASのコードは実行されません。
//許可されていない場合、GASを終了する if(acceptedUsers.indexOf(activeUser) == -1) { Browser.msgBox("あなたには実行権限がありません。"); return; }
まとめ
今回は特定のGoogleユーザー (Google Workspaceユーザー) のみがGASを実行できるようにするコードを紹介しました。
多くの社内スタッフにスプレッドシートを共有したとしても、特定のスタッフだけGASを実行することが可能なので便利です。
みなさんの業務の参考になれば幸いです!