見出し画像

GAS×Classroom⑤トピックと課題/資料の紐付け、投稿順序について|イチからDX

前回の記事はこちら

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


今回やりたい事

前回作成したトピックに投稿する課題や資料を紐づける
②トピック、課題、資料を意図した順番に並べる

画像は前回までのGASで作成したクラス


トピックと課題/資料の紐付け、投稿順序

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

//トピック作成、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);

補足説明

トピックと課題/資料との紐付けに関してはこの一行でOKです。
コース内の既存トピックとしか紐付けられないので注意してください。
(→公式リファレンス

    //投稿を配置するトピック
    topicId: topicID_3,


投稿順序についてですが、イメージはこんな感じです。
先に実行(作成)したものがクラスでは下の方に表示され、後に作成したものは上へ積み上げられていきます。

そのため(もしかしたら順番を指定する方法が別にあるのかもしれませんが)、下に表示させたいトピックや課題、資料からコードを書いていけば意図した通りに並べることができます🐰💡


おまけ

「資料」として投稿できました

こちらの記事では「資料」として投稿したいのに「課題」になったまま次に進みましたが、修正できそうだったのでやってみました。

課題として投稿する場合はCourseWork.createでしたが、

  Classroom.Courses.CourseWork.create(questionary, newroomID);

資料として投稿する場合はCourseWorkMaterials.createを使います。

  Classroom.Courses.CourseWorkMaterials.create(sample_movie, newroomID);

なお、CourseWorkMaterials.createで作成する場合はworkTypeは指定できないので削除してください(詳細は公式リファレンスを確認ください🙇‍♀️)。


今回ご紹介したコードで作成したクラスがこちらです。


現在までのコード全体像

前回までのコードに今回ご紹介したコードを追加しました。

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


さいごに

今回はGoogleフォームのリンクを説明文中に貼ることで対応してしまったのですが、添付ファイルとして追加できた方が回答状況の確認等が後々やりやすいのかもしれませんね😅
色々試してみて必要そうであれば改良したいと思います!
それではまたお会いしましょう🐰🍒

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

シリーズ一覧はこちら

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

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

この記事が気に入ったらサポートをしてみませんか?