Google Workspaceを導入していたら必ずあるであろう各種申請。グループアドレス関係、共有ドライブ関係の2つについて、追加・変更・削除を行えるフォームです。通常のGoogleフォームと違い、申請側と承認側の2つを備えており、承認をするだけでGASでそれぞれの項目についてメンバーの追加や新規作成などが行われ完了する、情シス部門の作業軽量化のために作成しています。

各種セットアップを行って設置すれば直ぐにでも稼働できるので、日々この手の雑用で煩わしい管理作業をしてる人にとっては手軽になるのではないかと思います。

今回利用するファイル

1つのファイルに3つのプロジェクトが入っています。ユーザ側フォーム、管理者側フォーム、そして共通プロパティ項目。まずは次項のセットアップ項目を参照してセットし、データを整備し、動かしてみましょう。

※自分の場合、これにさらにPCリプレース申請や、新規PC利用申請、各種アプリケーション利用申請を加えて、APIを用いて各種クラウドサービスのアカウント作成までも自動化しています。

セットアップ

各種シートの概要

このアプリケーションは複数のシートのデータでもって構成されています。この作業はGoogle Workspaceの特権管理者である必要があります。また、情シス申請フォームのファイル自体は公開する必要はありません。

  • orderシート - ユーザ側からの申請データが格納されます。
  • memberシート - 申請時に合わせて送られて来る複数のメンバーデータを格納親IDは、orderシートのIDと連結します。
  • sharedDriveシート - テナント内にある共有ドライブの一覧を格納。アプリから取得して格納します。
  • grouparrシート - テナント内にあるグループアドレスの一覧を格納。アプリから取得して格納します。
  • employeeシート - 社員情報を格納しておくシート。アプリから取得して格納します。
  • listシート - sharedDrive, grouparrの各種シートからユニークなものだけを取り出しておく作業シートです。アプリから利用します。
  • adminシート - 管理者として入れるメンバーのリスト。記載していないと承認作業は行えません。

ここで手動でメンテが必要なのは、adminシートのみ。まずは承認できる情シスメンバーのリストを完成させましょう。また、employeeシートはAdmin SDKを利用して、Google Workspaceのディレクトリから情報を取ってくることになるので、各ユーザの氏名や所属等はAdmin Console上から事前に整備しておきましょう(自分の場合、カスタム属性を作成して全情報を格納してありますが、今回のプログラムでは以下の数点だけを取ってきます。

  • メールアドレス
  • 従業員ID(社員番号)
  • 氏名
  • 部門(所属部署)

図:ディレクトリ情報は整備しておきましょう。

Google Workspaceの動的グループで楽をしよう

共通プロパティ項目をライブラリ化

3つ存在するGASプロジェクトのうちの1つである共通プロパティ項目(プロジェクト名はpropman)は、申請側・承認側のそれぞれで利用するスクリプトプロパティを格納する場所となっています。まずはこのスクリプトをデプロイしてライブラリとしてそれぞれのフォーム内に登録します。

  1. 右上のデプロイを管理を開く
  2. 新規にデプロイは「ライブラリ」としてデプロイする
  3. ダイアログを閉じる
  4. 左サイドバーからプロジェクトの設定を開く
  5. スクリプトIDをコピーする
  6. 情シス申請フォームのadmin側フォームおよびuser側フォームを開く
  7. ライブラリの+をクリックし、ダイアログに5.のスクリプトIDを入れて検索する
  8. 開発モードじゃないバージョンを選択し、IDはpropmanのままで、追加をクリックする
  9. これで、2つのフォーム側から共用で利用するスクリプトプロパティの場所を確保できました。

Google Apps Scriptはライブラリを活用すべし【GAS】

ウェブアプリケーションとしてデプロイ

前述のライブラリとしてデプロイの他、申請側および承認側のフォームについてもウェブアプリケーションとしてデプロイする必要があります。この時末尾のexecが付いたURLを後述のアプリの設定のアプリ設定にて登録する必要があります。このデプロイ作業は「管理者権限を持つユーザ」でデプロイする必要があるので、持っていないユーザでデプロイしてはなりません。

  1. スプレッドシートメニューから拡張機能=>Apps Scriptを開く
  2. admin側フォーム、user側フォームの両方を新しいタブで開いておく
  3. 右上のデプロイをクリック
  4. 新しいデプロイをクリック
  5. 種類の選択ではウェブアプリを選択し、「次のユーザとして実行は自分」にしておきます(管理者権限で動作しますが、スプレッドシートを公開する必要はありません)
  6. アクセスできるユーザは、社内公開する必要があるので「ドメイン内組織内全員」としておきます
  7. 末尾がexecで終わるURLが発行される。これがウェブアプリケーションのページとなります。控えておきます。
  8. 次回以降コードを編集して再デプロイ時はデプロイを管理から同じURLにて、新しいバージョンを指定して発行することが出来ます。
  9. この作業を2.の2つのフォームそれぞれで行っておきます。

図:組織内の全員が使えるようにしておきます。

アプリの設定

それ以外の設定関係です。スプレッドシートのメニューから以下の順番で順次実行します。

初期セットアップ

本アプリがデータを書き込む自身のスプレッドシートのIDを共通プロパティのスクリプトプロパティに書き込みます。この値がセットされていないと、他のデータの保存や読み込みが出来ないのでまず、この処理を実行します。

管理設定=>初期セットアップを実行するだけでオッケーです。

管理者メアド指定

ユーザ側からの申請や、承認時に送信するCCとして管理者のメアド(グループアドレス可)を利用しメール通知を送っています。申請が来たことを察知したり、承認・却下の通知がこのメールアドレス宛にも送信されます(申請者宛にはToで指定がされているので自動で通知は送られます)。

複数管理者や担当者がいる場合には、グループアドレスを作成してここに登録しておくと良いでしょう。

トリガー設置

後述のシートデータを取得について、Google Workspaceからの取得について自動的に深夜の0時~1時に自動実行して同期するトリガーを設置する事が可能です。日中に様々なグループアドレスやドライブ、ユーザの追加と削除を行った場合、手動で実行しても良いですが、深夜に自動実行させておく事で、常に最新の状態を保つことが可能になります。

  1. スプレッドシートのメニューから管理設定=>トリガー設置を開く
  2. 共有ドライブ一覧取得トリガーでsharedDriveシートのデータを自動的に整備します。
  3. グループアドレス一覧取得トリガーでgrouparrシートのデータを自動的に整備します。
  4. ユーザ一覧取得トリガーでemployeeシートのデータを自動的に整備します。

アプリ設定

アプリ設定は後述のデプロイ作業をした後で設定する必要があります。ここでは、アプリ内で利用してる

  • ドメインの指定(xxxx.comなど)
  • 承認側ウェブアプリケーションURLの指定(ユーザからの申請時に承認側を直接開くURLを構築するのに利用)
  • ユーザ側ウェブアプリケーションURLの指定(承認時にユーザ通知で、ユーザが対象申請を直接開くURLを構築するのに利用)

をセットします。前述のウェブアプリケーションとしてデプロイした際の末尾がexecのURLを承認側、ユーザ側の2つをここに入力して保存する必要があります。

図:サイドバーから各種設定

シートデータを取得する

sharedDrive, grouparr, employeeの3つのシートについて、Google Workspaceよりデータを取得しておく必要があります。これらがフォーム上でのドライブ名やグループアドレス、ユーザの選択用のデータとして利用することになります。

以下の手順で一括で取得できますが、実行するにはGoogle Workspaceの管理者権限が必要になります。

  1. スプレッドシートのメニューより管理設定を開く
  2. データ取得を開く
  3. 共有ドライブ一覧取得で、sharedDriveのリストが自動的に取得されます。
  4. グループアドレス一覧取得で、grouparrのリストが自動的に取得されます。
  5. ユーザ一覧取得で、employeeのリストが自動的に取得されます。

図:一括でデータ整備が可能です

adminシートの整備

adminシートの整備が必要です。このシートの役目は

  • 承認者側フォームへアクセスできるメンバーの制限
  • 管理者権限を持ってるユーザでなければ実行できない処理があるため、そうではないユーザの排除

になります。氏名とメアドの2つ、および対象のユーザが管理者権限を割り当てられているかを確認してください。グループやドライブの作成といった権限があればよいので、特権管理者である必要性はありません

使い方

ユーザ側フォーム

現在はユーザ側フォームは6パターンの処理を装備しています。自分の場合これをさらに改造して、9つの社内申請を自動化させています。ユーザ側の入力負担の軽減(メンバー追加やドライブ名の指定等調べる必要が無い)、全角半角違いなどの相違の解消、データ流用による情シス側負担軽減につながります。

申請済み一覧

こちらには自身が申請した申請一覧のみが表示されます。他者が申請したものはリストに出てきません。アクションにあるアイコンをクリックする事で、申請した内容の現在の状態がダイアログでわかります。

図:申請一覧の様子

図:申請した内容を閲覧中

グループアドレスメンバー更新

既存のグループアドレスに対してメンバーの追加と削除を行います。以下の手順で入力し申請を行います。

  1. 左上の「≡」をクリックし、グループアドレスメンバー更新を開く
  2. 変更するグループアドレスには、アドレスを入力し出てきた候補をクリックして選択する
  3. メンバー情報ではまず、新規追加・削除・外部追加・外部削除を選択する
  4. 新規追加・削除の場合は変更するメンバーにドメイン内のメンバーアドレスを入力する(現在、グループアドレスの追加は出来ない)
  5. 外部追加・削除の場合は通常のメールアドレスを入力する(ドメイン外のメンバーを追加する場合)
  6. 申請理由を記述する
  7. 右下の🐨のボタンをクリックして、送信をクリックする
  8. 確認ダイアログが出てくるので「はい」をクリックすると申請が飛んでいき、自動応答メールが返ってくる。

※自分の場合既にグループアドレス一覧も4.のアドレス入力で追加できるようにしてあるので、グループアドレスにグループアドレスを追加する処理を実装済みです。

図:グループメンバー変更の画面

グループアドレス作成

グループアドレスを新規に作成する場合に利用します。アドレス作成時に同時にメンバーの追加も行います。指定のドメインではないグループアドレスは当然作れないので、入力時のチェックで弾かれるようになっています。以下の手順で申請します。

  1. 左上の「≡」をクリックし、グループアドレス作成を開く
  2. 追加するメンバーアドレスでは、アドレスを入力し出てきた候補をクリックして選択する
  3. 新規追加の場合は変更するメンバーにドメイン内のメンバーアドレスを入力する(現在、グループアドレスの追加は出来ない)
  4. 外部追加の場合は通常のメールアドレスを入力する(ドメイン外のメンバーを追加する場合)
  5. 申請理由を記述する
  6. 右下の🐨のボタンをクリックして、送信をクリックする
  7. 確認ダイアログが出てくるので「はい」をクリックすると申請が飛んでいき、自動応答メールが返ってくる。

今回のアプリの場合、グループのポリシーは以下のような形でセットされます。承認側フォームでの作成時のポリシー設定コードを変更することで、デフォルトのポリシー設定を変えることが可能です。

※既に作成済みの同名のグループがある場合チェックされて作成されません。

図:デフォルトのグループポリシー

図:グループアドレス作成時にメンバーも同時に追加

グループアドレス削除

作成済みのグループアドレスを削除したい申請の場合はシンプルです。以下の手順で申請します。

  1. 左上の「≡」をクリックし、グループアドレス削除を開く
  2. 削除するメンバーアドレスでは、アドレスを入力し出てきた候補をクリックして選択する
  3. 申請理由を記述する
  4. 右下の🐨のボタンをクリックして、送信をクリックする
  5. 確認ダイアログが出てくるので「はい」をクリックすると申請が飛んでいき、自動応答メールが返ってくる。

図:グループ削除の申請画面

共有ドライブメンバー更新

作成済みの共有ドライブのアクセスメンバー変更をする場合に利用します。以下の手順で申請します。

  1. 左上の「≡」をクリックし、共有ドライブメンバー更新を開く
  2. 変更する共有ドライブでは、共有ドライブの名称を入力して選択する。ドライブIDは自動的に入力されます。
  3. メンバー情報では新規追加か?削除か?権限変更か?を選択します。外部メンバー追加・削除は未対応です。
  4. 新規追加と権限変更の場合は、アクセス権限を選択し、更新するメンバーはドメイン内のユーザアドレスを入力して選択し、追加をクリックする
  5. 但しアクセス権限では管理者ロールは選択できないようにしています。
  6. 申請理由を記述する
  7. 右下の🐨のボタンをクリックして、送信をクリックする
  8. 確認ダイアログが出てくるので「はい」をクリックすると申請が飛んでいき、自動応答メールが返ってくる。

図:ドライブメンバーの追加と削除の画面

共有ドライブ作成

共有ドライブを新規に作成する場合に利用します。同時にメンバーを追加する事が可能です。但し、管理者はデプロイした管理者ユーザのみとし、他のメンバーはコンテンツ管理者以下のロールのみが適用可能です。

  1. 左上の「≡」をクリックし、共有ドライブ作成を開く
  2. ドライブ名称はこのアプリの仕様では、通常通りの名称のみを入れる。
  3. ドライブタイプを選び、その接頭辞である00_や01_といったものが2.の名称の頭に自動的につくようになっています。
  4. アクセス権限を選択し、更新するメンバーではドメイン内メンバーのアドレスを入力し、追加をクリックする
  5. 申請理由を記述する
  6. 右下の🐨のボタンをクリックして、送信をクリックする
  7. 確認ダイアログが出てくるので「はい」をクリックすると申請が飛んでいき、自動応答メールが返ってくる。

既に同名で存在するドライブは作成できないようにチェックが入ります。

図:ドライブを新規作成時にメンバーも追加する

共有ドライブ削除

不要になった共有ドライブを削除する申請になります。注意点としてドライブ内のファイルも諸共、削除しますので、事前にバックアップや移動をしていない場合には消えてなくなります(手動で削除する場合は中身が入ってると削除できないところをGASで実行する場合、削除することが可能)

  1. 左上の「≡」をクリックし、共有ドライブ削除を開く
  2. 変更する共有ドライブにドライブ名称を入れて選択する。ドライブIDは自動的に入力されます。
  3. 申請理由を記述する
  4. 右下の🐨のボタンをクリックして、送信をクリックする
  5. 確認ダイアログが出てくるので「はい」をクリックすると申請が飛んでいき、自動応答メールが返ってくる。

図:ドライブを削除する申請

自動応答メール

申請を行うと申請者及び管理者宛にメール通知が飛ぶようになっています。以下のスクリーンショットはその事例で、CSSにてレスポンシブ対応としたメールが送られてきます。noReplyで送信されていますので返信は出来ません。

mailcss.html内にテーブルのCSSに記述しており、こちらのサイトからお借りしました。

また、管理者側メール本文には承認証URLが追加されており、クリックすると直接該当の申請の承認画面が開くようになっています。

図:自動応答メールはレスポンシブ対応

承認側フォーム

承認側のフォームはシンプルです。申請済み一覧と処理済みの申請の2パネルのみで、基本動作も承認するか?却下するか?の2パターンのみとなります。それぞれの申請ジャンルに応じて、承認を実行する事でGASにてGoogle Workspaceに対して作業を自動的に行います。

申請済み一覧

申し込み一覧に表示されるのは、orderおよびmemberシートで未着手となってるレコードが対象となります。アクションのアイコンをクリックすることで承認処理が可能となっています。

承認処理の画面は、右下の🌸のアイコンをクリックし、「承認」を選ぶとコメント入力ダイアログが出てきます。コメントを入力して実行をクリックすると、承認とGASでのバックグラウンドの作業、完了通知メールが送信されます。却下の場合も同様の処理となります。

エラーが出てこなければ、グループアドレス、共有ドライブのそれぞれの処理が実行されます。そして完了した処理はステータスが完了となり、処理済みの申請に表示されるようになります。

図:申請中のものがリストアップされる

図:承認処理の画面

処理済みの申請

こちらは承認・却下した過去の申請についての一覧を確認するためだけの画面です。閲覧オンリーですので削除等の作業は出来ません。orderシートおよびMemberシートのステータスが完了になってるものだけがここにリストアップされます。アクションのアイコンをクリックすることで、ダイアログが表示され、中身を確認することが可能です。

図:処理済みの一覧が表示される

注意点

一覧取得について

今回のアプリは管理者権限でデプロイしている関係上、リスト構築で取得されるグループアドレスや共有ドライブ一覧は、対象ユーザがアクセスできないものであってもリストアップされています。以下のエントリーのテクニックを利用すれば、選択するリストなどをユーザの権限の範囲内でアクセスできるものにだけ絞る事も可能になります。

Google Apps Scriptで一部だけをユーザ権限で動かしたい時は?

グループアドレスをリストから選択させる場合

今回のアプリは自分が使ってるフォームと違い、グループアドレスにグループアドレスを追加出来たり、共有ドライブに対してグループアドレスを追加できるように、リスト選択でユーザアドレスとグループアドレスを両方含めています。しかし、この機能を実装する場合以下のことを考慮する必要があります。

  • 対象のグループアドレスがまだ新規作成申請中の場合、共有ドライブにリスト追加は選択肢に無い為出来ません。
  • 承認されてもgrouparrに対象のアドレスを追記する処理をしておく必要があります(選択肢に出るようにする為)

grouparrをGoogle Workspaceから再取得するコードを実行しても良いのですが、量がある場合そこそこ時間が掛かるので、普通に1行追記する処理のほうが簡便で早く完了可能です。

メアドのドメインチェック

自分が業務で利用してるアプリでは、本アプリケーションに「メアドのドメインチェック」を加えています。しかし、本アプリはドメインチェックを加えていませんので、例えばグループアドレス新規作成時に、どのようなドメインであっても申請は通過してしまいます(但し作成は当然出来ません。エラーになります)

とりわけ、セカンダリドメインを導入している場合などに対応するには、コードを改造する必要があります。また、セカンダリドメインをエイリアス運用してる場合には、employeeのリストにはデータ一括取得で出てきません(予備のメールアドレスである為)、既存のグループアドレスにセカンダリドメインでのメアドで追加したい場合に於いても、選択リストには出てきませんので、外部メンバーとして追加する必要性があります。

Google Workspaceにセカンダリドメインを追加する

改訂履歴

  • 2024/1/16 : 共有ドライブメンバー更新に於いて、権限変更の機能を追加
  • 2024/1/5 : 初版リリース

関連リンク

Google Apps Scriptでグループアドレスの作成・削除を行う

Google Apps Scriptで共有ドライブをコントロールする【GAS】

Google Apps Scriptでレスポンシブメールを送ってみた【GAS】