見出し画像

GAS×Classroom⑧生徒の招待とまとめ|イチからDX

前回の記事はこちら

𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧


当初の予定…

本当は作成したクラスに生徒を招待するための招待リンクの取得がやりたかったのですが、事例記事も見つからず自力ではコードを書けませんでした…

今回できたこと

当初の予定とは異なりますが、生徒に招待メールを送付することはできたのでそこだけご紹介します。


生徒の招待

●参考にさせて頂いた記事


※前回までのコードは省略しています(newroomID=作成したクラスのID)

//生徒招待
  Classroom.newInvitation();
  const invitationData = {
   'userId': 'dummy1234@gmail.com',
   'courseId': newroomID,
   'role': 'STUDENT'
  }
  Classroom.Invitations.create(invitationData);

GASを実行したのはいつも通り管理者権限を所有するアカウントですが、招待するアカウント(招待状送付先)はドメイン内でもドメイン外でも大丈夫でした。

生徒にはこんなメールが届きます。


※自分では試していませんが、複数名の生徒を招待したい場合はこちらの記事が参考になると思います。

生徒の招待に関しては公式のリファレンスはあまり参考にならなかったのですが、一応該当ページを貼っておきます。


シリーズまとめ

シリーズ記事一覧


コード全体像

function workshop() {

//スプレッドシートから情報取得
  //開いているスプレッドシート取得
  const spreadsheet = SpreadsheetApp.getActive();
  
  //該当シート指定
  const sheet = spreadsheet.getSheetByName('入力シート'); //シート名

  //会社名を取得
  const company = sheet.getRange('B1').getValue(); //セル番地
  Logger.log(company);

  //プログラム名取得
  const program = sheet.getRange('B2').getValue(); //セル番地
  Logger.log(program);  

  //クラスの説明取得
  const memo = sheet.getRange('B3').getValue(); //セル番地
  Logger.log(memo);  

  //教師1のメールアドレス(オーナー)
  const teacher = sheet.getRange('B5').getValue(); //セル番地
  Logger.log(teacher);  

  //教師のアドレス(2人目を追加する場合)
  const teacher_2 = sheet.getRange('B6').getValue(); //セル番地
  Logger.log(teacher_2); 


//クラス作成
  //クラスルーム生成に必要な各要素の指定
  const course = Classroom.newCourse();

    course.name = program; //部屋の名前(必須項目)
    course.ownerId = teacher; //オーナー(必須項目)
    course.section = company; //セクション
    course.description = memo; //クラスの説明
    course.courseState = 'ACTIVE'; //コースの状態指定
  //クラスルーム生成
  const newroom = Classroom.Courses.create(course);

  //作成したクラスルームのID取得
  const newroomID = newroom.id;
  Logger.log(newroomID);  

  //作成したクラスルームのURL取得
  const newroomURL = newroom.alternateLink;
  Logger.log(newroomURL);  
   //スプレッドシートに書き出し
   sheet.getRange('B8').setValue(newroomURL); //セル番地

  //作成したクラスルームのドライブフォルダ情報取得
  const Drive = newroom.teacherFolder;
   //ID取得
   const Drive_ID = Drive.id;
   Logger.log(Drive_ID); 
   //IDをURLにしてスプレッドシートに書き出し
   const Drive_URL = 'https://drive.google.com/drive/folders/' + Drive_ID;
   sheet.getRange('B9').setValue(Drive_URL); //セル番地


//トピック作成、ID取得(最初に追加したトピックの上に二つ目のトピックが追加されるので注意)
  //①トピック1:受講後アンケート
  const topic_1 = Classroom.Courses.Topics.create({name: '受講後アンケート'},newroomID);  //トピック名
  const topicID_1 = topic_1.topicId;
  Logger.log(topicID_1);  

  //②トピック2:事前課題
  const topic_2 = Classroom.Courses.Topics.create({name:'事前課題'},newroomID);  //トピック名
  const topicID_2 = topic_2.topicId;
  Logger.log(topicID_2); 

  //③トピック3:動画コンテンツ
  const topic_3 = Classroom.Courses.Topics.create({name: '動画コンテンツ'},newroomID);  //トピック名
  const topicID_3 = topic_3.topicId;
  Logger.log(topicID_3);  


//資料配布(閲覧のみ)
  //投稿内容設定
  const sample_movie = {
    //投稿タイトル
    title: 'サンプル動画',
    //説明文
    description: '動画を再生し、問題なく閲覧できることを確認してください。',
    //投稿を配置するトピック
    topicId: topicID_3,
    //公開・未公開等の指定(参照ページ https://developers.google.com/classroom/reference/rest/v1/courses.courseWork#CourseWorkState)
    state: 'PUBLISHED',
    materials: [{
      "driveFile": {
        //添付ファイルのID
        "driveFile": {"id": "共有したいファイルのIDに差し替えてください"},  //添付ファイルのID
        //共有方法(参照ページ https://developers.google.com/classroom/reference/rest/v1/Material#ShareMode)
        "shareMode": 'VIEW'  //閲覧権限のみ付与
        }
      }]
  };
  //クラスに投稿
  Classroom.Courses.CourseWorkMaterials.create(sample_movie, newroomID);


//アンケート投稿(formsは説明文中にリンク貼っただけ)
  //投稿内容設定
  const questionary = {
    //投稿タイトル
    title: '受講後アンケート',
    //説明文
    description: '最後に、お手数ではございますがアンケートにご協力頂けましたら幸いです。\n\nアンケートフォーム:https://forms.gle/dummy1234',
    //投稿を配置するトピック
    topicId: topicID_1,
    //公開・未公開等の指定(参照ページ https://developers.google.com/classroom/reference/rest/v1/courses.courseWork#CourseWorkState)
    state: 'PUBLISHED',
    //投稿の種類(参照ページ https://developers.google.com/classroom/reference/rest/v1/CourseWorkType)
    workType: 'ASSIGNMENT',
  };
  //クラスに投稿
  Classroom.Courses.CourseWork.create(questionary, newroomID);


//ワークシート配布(全員で一つのファイルを編集)
  //ワークシートをテンプレートから複製+クラスのドライブに格納
  //ドライブにファイルを格納する準備
  const Drive_folder = DriveApp.getFolderById(Drive_ID);
  //ファイル名を指定
  const pretask_filename = 'ワークシート_'+ company +'様';  //ファイル名
  //テンプレートファイル(テンプレ変更の時は''内のIDを差し替え)
  const pretask_template = DriveApp.getFileById('テンプレートファイルのIDに差し替えてください');  //テンプレファイルのID
  //コピー作成
  const pretask_copied = pretask_template.makeCopy(pretask_filename, Drive_folder);
  //コピーしたワークシートのID取得
  const pretaskID_copied = pretask_copied.getId();

  //投稿内容設定
  const create_pretask = {
    //投稿タイトル
    title: '事前課題',
    //説明文
    description: 'ワークショップ当日までにワークシートへの入力をお願いします。\n不明な点があればチャットより教師へ質問できます。',
    //投稿を配置するトピック
    topicId: topicID_2,
    //公開・未公開等の指定(参照ページ https://developers.google.com/classroom/reference/rest/v1/courses.courseWork#CourseWorkState)
    state: 'PUBLISHED',
    //投稿の種類(参照ページ https://developers.google.com/classroom/reference/rest/v1/CourseWorkType)
    workType: 'ASSIGNMENT',
    materials: [{
      "driveFile": {
        //事前課題ファイルのID
        "driveFile": {"id": pretaskID_copied },
        //共有方法(参照ページ https://developers.google.com/classroom/reference/rest/v1/Material#ShareMode)
        "shareMode": 'EDIT'  //編集権限付与
        }
      }]
  };
  //クラスに投稿
  Classroom.Courses.CourseWork.create(create_pretask, newroomID);


//2人目の教師を追加
  Classroom.Courses.Teachers.create({userId: teacher_2} , newroomID);


//生徒招待
  Classroom.newInvitation();
  const invitationData = {
   'userId': 'dummy1234@gmail.com',
   'courseId': newroomID,
   'role': 'STUDENT'
  }
  Classroom.Invitations.create(invitationData);

}
思ってたよりは完成に近づけたのでよかったです🐰🍒


さいごに

あとは資料や課題を投稿するコードを何度か繰り返せば実際の業務で使えそうです。詳しい人が書けばもっと短いコードで同じことができるんだろうと思いますが、不恰好でもやりたいことは概ねできたので満足しています✨

リストもほぼ消化したので、本シリーズの更新も一旦おしまいにしようと思います。時間があればGoogleformsの添付はもう少し追求したいところ🤔

本シリーズでは同じ授業内容のクラスをたくさんつくる想定で進めてきましたので、参考になる所もならない所もあると思いますが、少しでもお役に立てましたら幸いです。それではまたお会いしましょう🐰🥕


𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧

𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧

いいなと思ったら応援しよう!