【Google Classroom】スプレッドシートを使って教師・生徒を一括追加・招待・削除する

最近Google Classroomにはまっているichi3270です。

前回までの記事に続き、Google Classroomをスプレッドシートから一括操作していきます。
GASに詳しくない人は、初回の記事からお読みいただくと理解できると思います。

今回は、スプレッドシートを利用して、教師や生徒を一括で追加・招待・削除する方法を紹介します。

*この記事を参考にしたことにより、ご利用者様、または第三者に損害・トラブル等が発生した場合でも、一切の責任を負いません。自己責任の上でのご利用をお願いいたします。

スプレッドシートを作る

さて、今回もまずはスプレッドシートを作成します。
前回までの記事も実践している人は、同じスプレッドシート内にシートを追加してください。

ユーザー設定というシート名で、下図と同じように作ってください。(一言一句同じにする必要はありません)

作成するスプレッドシート
今回も項目少な目で楽です

スクリプトを貼り付ける+ボタンに割り当てる

シートが作成できたら、次はスクリプトエディタに下記のスクリプトを貼り付けてください。
(前回までの記事を実践されている場合は、既存のスクリプトの末尾に貼り付けてください。)

/***********************************************
 *  コースのユーザーを変更する
 ***********************************************/
function changeUsers() {
    const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ユーザー設定");
    const data = sheet.getDataRange().getValues();
    data.shift();
    const select = Browser.msgBox( data.length + "件の処理を行います。この処理は、細心の注意のもとで行ってください。よろしいですか?", Browser.Buttons.OK_CANCEL);
    if (select == "cancel") {
        Browser.msgBox("キャンセルしました");
        return;
    }
    for (i = 0; i < data.length; i++) {
      let response;
      let invitation;
      console.log(data[i][2]);
      switch ( data[i][2] ){
        case "教師":
          const teacher = { "userId": data[i][1] };
          try {
            switch (data[i][3]){
              case "追加":
                response = Classroom.Courses.Teachers.create(teacher, data[i][0]);
                break;
              case "招待":
                invitation = {
                  "userId": data[i][1],
                  "courseId": data[i][0],
                  "role": "TEACHER"
                }
                response = Classroom.Invitations.create(invitation);
                break;
              case "削除":
                response = Classroom.Courses.Teachers.remove(data[i][0], data[i][1]);
                break;
              default:
                sheet.getRange(i + 2, 5).setValue("処理は追加・招待・削除のいずれかを入力してください。");
                break;
            }
            sheet.getRange(i + 2, 5).setValue("成功");
          } catch(e) {
            sheet.getRange(i + 2, 5).setValue(e);
          }
          break;
        case "生徒":
          const student = { "userId": data[i][1] };
          try {
            switch (data[i][3]){
              case "追加":
                response = Classroom.Courses.Students.create(student, data[i][0]);    
                break;
              case "招待":
                invitation = {
                  "userId": data[i][1],
                  "courseId": data[i][0],
                  "role": "STUDENT"
                }
                response = Classroom.Invitations.create(invitation)
                break;
              case "削除":
                response = Classroom.Courses.Students.remove(data[i][0], data[i][1]);
                break;
              default:
                sheet.getRange(i + 2, 5).setValue("処理は追加・招待・削除のいずれかを入力してください。");
                break;
            }
            sheet.getRange(i + 2, 5).setValue("成功");
          } catch(e) {
            sheet.getRange(i + 2, 5).setValue(e);
          }
          break;
        default:
          sheet.getRange(i + 2, 5).setValue("ユーザー種別は教師か生徒を入力してください");
          break;
      }
    }
    Browser.msgBox("処理が終了しました。");  
  }

コードの貼り付けが終わったら、スプレッドシート上のユーザー変更ボタンにchangeUsersを割り当ててください。

実行してみましょう

ここまでの手順でツールは完成していますので、実行してみましょう。

まずは、スプレッドシートにデータを入力します。

スプレッドシートに設定する内容
サンプルとしてこんな感じに設定しました

コースIDがわからない場合は、過去の記事で紹介したツールを使って取得することができます。
メールアドレスを入力し、ユーザー種別列には、そのユーザーが教師なのか生徒なのかを入力します。
最後に、処理列に、追加招待削除のいずれかを入力して、ユーザー変更ボタンを押してください。

なお、追加と削除はGoogle Classroomの管理者でないと実行できません。
一般のユーザーは、招待のみ実行できます。

実行確認メッセージ
確認メッセージが表示される

OKを押せば、処理が実行され、最右列に結果が表示されます。
*残念ながら、招待の場合にメールアドレスを誤入力していてもエラーにならないようですので、入力間違いにご注意ください。

ちなみに、招待された側は、下記のようなメールが届きます。
(クラスルームの画面から手動で招待した場合も同じです)

届いた招待メール

おわりに

いかがでしたか?Google Classroomの管理者は、教師や生徒の一括設定を依頼されることも多いかと思いますので、この記事が役に立てば幸いです。

次回は、課題の一括登録について説明したいな~と思っています。

コメント

  1. 関西の中学校教員 より:

    スクリプトの公開ありがとうございます。非常に便利でクラスルームの他のスクリプトと併せて使用させていただいています。
    今回の教員一括招待のスクリプトですが、何度やってもうまく行きません。
    結果の欄に
    Invalid value at ‘invitation.course_id’(TYPE_STRING),※実際のコースID
    素人ながら調べてみると、コースIDが無効な値になっているとわかりました。しかしID自体は間違っていないので、どうすれば良いかわからずコメント致しました。お時間がございましたら、ご返信いただけると幸いです。

    • ichi3270 ichi3270 より:

      説明が不十分ですみません、
      シート全体の書式を「書式なしテキスト」にして、再度お試し頂けますでしょうか

      • 関西の中学校教員 より:

        ご返信ありがとうございます。成功しました。重宝させていただきます。

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