見出し画像

GAS×Classroom⑥添付ファイル付き課題の投稿(編集権限を付与)|イチからDX

前回の記事はこちら

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


今回やりたい事

今回は受講者の方全員で取り組んで頂く課題の投稿に挑戦しました。

ロカリアの研修やワークショップで出す課題は基本的にチームで一つのワークシート(ファイル)を編集します。

そのため、別のフォルダに格納されているテンプレートファイルをクラスのDriveフォルダへコピーした上で課題として添付し、かつそのファイルを生徒全員が編集可能な状態にできるのが理想です。


添付ファイル付き課題の投稿

事前準備)Drive APIの追加

あらかじめ「Drive API」を追加しておいてください。

1.「サービス」の横の「+」ボタンをクリック
2.Drive APIを選択して「追加」をクリック


手順1)テンプレートファイルの複製

※前回までのコードは省略しています
(Drive_ID=クラスのDriveフォルダのID、company=会社名)

//ワークシート配布(全員で一つのファイルを編集)
  //ワークシートをテンプレートから複製+クラスのドライブに格納
  //ドライブにファイルを格納する準備
  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();

今回、テンプレートファイルの形式はGoogleスプレッドシートやスライドを想定しています。ファイルのIDはURLから取得できます。

〜d/の後から/editの前までがファイルのIDになります


手順2)課題としてクラスに投稿

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

  //投稿内容設定
  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);

以前ご紹介した閲覧権限のみ付与(VIEW)して資料を共有する方法とは異なり、今回はshareModeを「EDIT」にしてあげることで生徒に編集権限を付与します。

ちなみに、もし生徒一人一人別々のファイルを用意したい場合はshareModeをSTUDENT_COPYにすると良さそうです。詳細はこちらを参照ください💡

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);  

//クラス作成
  //クラスルーム生成に必要な各要素の指定
  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人目)」に先に挑戦したいと思います。

それではまたお会いしましょう🐰🍓


𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧
初回の記事はこちら

シリーズ一覧はこちら

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

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

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