【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 より:

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

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

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

  2. 関西の高校教師 より:

    Classroom関連の記事、本当に助かっています。ありがとうございます。

    大変不躾ではございますが、ご質問をさせていただきたく思います。お時間のある時でよいので、ご返答いただけると幸いです。

    質問といいますのは、こちらの記事の「招待」、「削除」はうまく動作したのですが、「追加」がうまく動きません。The caller dose not have permissionというエラーが返ってきてしまいます。削除ができていることからも、クラスルームの管理者アカウントで動かしていると思うのですが、調べてみても理由がわかりません(日本語の記事が本当に少ないので、こちらのサイトは本当に貴重です!)
    「追加」というのは、本人の承諾なしに教師、または生徒として登録させられるということでしょうか?また、動かない理由がお分かりでしたら、お教えいただきたく思います。どうぞよろしくお願いいたします。

    • ichi3270 より:

      私もはっきりした原因がわからず申し訳ないのですが、別ドメインのユーザーを「追加」しようとすると「The caller dose not have permission」が発生しました。
      同じドメインのユーザーでしたら、「追加」に成功し、本人の承諾なしにクラスに参加させることができました。

  3. 大阪の高校教員より より:

    いつもありがとうございます。
    この通り動かしてみたところ、既出のエラーinvitation.course_id’(TYPE_STRING),※実際のコースIDが表示されます。
    コメントを参考に、書式なしに変更してみても同じエラーが表示され、どのようにすればよいのか困っております。
    何か、他に試みることはあるでしょうか?
    お時間のあるときにお返事いただければと思います。

    • ichi3270 より:

      すみません、私の方ではうまく動作しているので、原因がわからないです。
      そのエラーメッセージですと、書式の問題かな・・・とは思うのですが・・・。書式なしテキストにした後に、他のシートのセルからコースIDを貼り付けたりした際に書式が数値に戻ってしまっている・・・くらいしか思い当たりませんでした。(書式なしテキストに設定→手でコースIDを入力→スクリプト実行 の順でやってもエラーになるようでしたら、これ以上は私にはわからなそうです)