sitateru tech blog: G Suite

sitateru tech blog

シタテルの技術やエンジニアの取り組みを紹介するテックブログです。

ラベル G Suite の投稿を表示しています。 すべての投稿を表示
ラベル G Suite の投稿を表示しています。 すべての投稿を表示

2019年10月11日金曜日

GASでG Suiteグループ追加をやってみた

10月 11, 2019
どうも朝野です。

以前の記事で、作業を楽にするためにRPAを触ってみたという話を書いたのですが
その関係の取り組みの一つとして現在Google Apps Script(GAS)でアカウント管理操作を集約・省力化するという作業を進めています。

Google Apps Scriptはご存知の方も多いと思いますが、Googleの様々なサービスと連携させて動かすことができるスクリプト言語です。

シタテルではG Suiteをバリバリ使っているので、アカウント管理システムもGASを中心として作っていこうと考えています。
そこで、まずはGASで何か作ってみる第1号として、ユーザーをグループに追加するフォームを作ってみました。
グループ追加はG Suiteの管理画面からできるのですが若干作業として面倒だったりするんですね。

というわけでまずはGoogleフォームを作成。
「追加するユーザー」「追加先グループ」の入力欄を作ります。
それからオプション設定の「メールアドレスを収集する」をチェック。

つづいて右上メニューから「スクリプトエディタ」を選択するとGASのオンラインエディタが開きます。

ここでソースコードを編集します。
今回のコードはこのようなものです。
var privilegedRespondent = ['taro@sitateru.sample', 'jiro@sitateru.sample'];

// グループ追加,フォーム送信時に実行
function addUserToGroup(event) {
  console.log('addUserToGroup()');
  var message = "グループ追加フォームからの通知です\n\n";
  const respondent = event.response.getRespondentEmail();
  if(privilegedRespondent.indexOf(respondent) === -1) {
    console.log('Respondent ' + respondent + ' not allowed');
    message += 'あなた( ' + respondent + " )にはアカウントを作成する権限がありません\n";
    sendResult(respondent, message);
    return;
  }
  const response = parseResponse(event.response.getItemResponses());
  const userName = response['追加するユーザー'];
  const groups = response['追加先グループ'].split(',');
  for (var i = 0; i < groups.length; i++) {
    var groupName = groups[i].trim();
    try {
      var member = addGroupMember(userName, groupName);
      console.log(' added member', member);
      if(member == undefined) {
        message += "ユーザーをグループに追加できませんでした。入力内容を確認してください\n";
        message += ' ユーザー: ' + userName + "@sitateru.com\n";
        message += ' グループ: ' + groupName + "@sitateru.com\n\n";
      } else {
        message += "ユーザーをグループに追加しました\n";
        message += ' ユーザー: ' + userName + "@sitateru.com\n";
        message += ' グループ: ' + groupName + "@sitateru.com\n\n";
      }
    } catch(error) {
      console.log(' error', error);
      message += "ユーザーをグループに追加できませんでした。入力内容を確認してください\n";
      message += ' ユーザー: ' + userName + "@sitateru.com\n";
      message += ' グループ: ' + groupName + "@sitateru.com\n";
      message += ' エラー: ' + error.toString() + "\n\n"
    }
  }
  sendResult(respondent, message);
}

// Googleユーザーをグループに追加
function addGroupMember(userName, groupName) {
  if(userName && groupName) {
    const userEmail = userName + '@sitateru.com';
    const groupEmail = groupName + '@sitateru.com';
    console.log(' add ' + userEmail + ' to ' + groupEmail);
    const member = {
      email: userEmail,
      role: 'MEMBER'
    };
    return AdminDirectory.Members.insert(member, groupEmail);
  }
}

// メール送信
function sendResult(recipient, message) {
  MailApp.sendEmail({
    name: 'アカウント管理システム',
    to: recipient,
    subject: 'グループ追加フォーム実行結果',
    body: message
  });
  console.log('send result');
}

// フォームの入力内容をオブジェクトにして返す
function parseResponse(itemResponses) {
  var obj = {};
  for (var i = 0; i < itemResponses.length; i++) {
    var itemResponse = itemResponses[i];
    var question = itemResponse.getItem().getTitle();
    // var type = itemResponse.getItem().getType();
    var answer = itemResponse.getResponse();
    obj[question] = answer;
  }
  return obj;
}

あとはスクリプトにグループを操作する権限を与えるために、メニューの「Googleの拡張サービス」を選択して「Admin Directory API」をONにします。

コードは長いですが、GASでユーザーをグループに追加するには AdminDirectory.Members.insert() を実行すればOKです。公式のサンプルはこちら

今回のコードではグループ追加フォームとして実用上あったほうがいい機能もいろいろつけてみました。
event.response.getRespondentEmail() でフォーム送信者のメールアドレスを取得し、あらかじめ定義しておいた privilegedRespondent にいる人でなければ実行しない
・「追加先グループ」はカンマ区切りで複数指定できるように
・最後に実行結果をメール送信 MailApp.sendEmail()

と、こんなもので実際に利用を始めています。

こちらにリファレンスがありますが、GASはかなりの種類のGoogleのサービスを操れるのが強みです。↓のページで左メニューの「G Suite Services」や「Advanced Google Services」を開いてみよう!
https://developers.google.com/apps-script/reference

これからもいろいろなものを作って楽をしていこうと思います!