【GAS】GoogleAppsScriptを用いてClassroomで指定した生徒に課題を配布する方法(CourseWork.create)

こんにちは！GoogleAppsScriptを使った業務効率化に夢中の初心者プログラマー、太郎です。

今日は**GoogleAppsScript(GAS)を用いてClassroomに生徒を招待する方法**について書いていきたいと思います。

初心者向けですが、javascriptの基本的なルールは押さえておいた方が理解はしやすいと思いますので、まだの方は[Progate](https://prog-8.com/dashboard)でサクッとjavascriptの文法を学習してみてください。

また、初心者が手当たり次第にコードを書いてみて詰まったところやその時の心の声などもつらつらと書いています。やり方のみさっと知りたい方は、最後の[まとめ](#まとめ-classroomで指定した生徒に課題を配布する方法)を参照ください。

また、`ReferenceError: Classroom is not defined`とエラーが出てしまった方は、[こちらの記事](https://qiita.com/coticoticotty/items/fd73cf477140349b2809)を参考にしてみてください。
では、早速トライしていきましょう！
##assigneeModeが使えそう
[ClassroomでDriveの課題を配布する方法(CourseWork.create)](https://qiita.com/coticoticotty/items/8cb421f8f38222d69433)の記事で書いたやり方を少しだけ帰れば行けそうな気がします。[公式ドキュメント](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork)を確認すると、課題を作成するときに、すべての生徒に配布するか、個々の生徒に配布するか選べるキー、`assigneeMode`というものがあるみたい。この値として、`ALL_STUDENTS`を選べば、すべての生徒に配布できます。ちなみにこのモードがデフォルトみたいです。`INDIVIDUAL_STUDENTS`を選べば指定したの生徒一覧に課題を配布できそうです。
ただ、生徒の指定の仕方がここには書いていないですが、すぐ次にありますね！
`individualStudentsOptions`というキーです。
先の`assigneeMode="INDIVIDUAL_STUDENTS"`のときのみ、指定した生徒一覧のみに課題を配布できるようです。
`individualStudentsOptions`の中には、生徒IDを配列で渡せます。
こういうことですね。

```javascript
individualStudentsOptions:{
  "studentIds": [studentid1, studentid2, studentid3,　・・・] 
}
```
それでは、GAS太郎とGAS次郎とGAS三郎の3名が参加しているこのクラスで、太郎と次郎にだけ課題を配布してみたいと思います(ネーミングセンスのなさには突っ込まないでください)。
![スクリーンショット (71).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108046/ae22d50e-dd75-f411-34f9-d9606286fc6b.png)
とは言っても、以下の記事の課題を作成するときに渡すパラメータに`assigneeMode`と`individualStudentsOptions`を加えてあげればいいだけのはず。
[ClassroomでDriveの課題を配布する方法(CourseWork.create)](https://qiita.com/coticoticotty/items/8cb421f8f38222d69433)

```javascript
function createCourseWork() {
  var targetCourseId = '××××'//課題を配布するコースを選択
  var createAssignment = {
    title: '特定の生徒に課題を配布する',
    state: 'PUBLISHED',
    workType: 'ASSIGNMENT',
    materials: [{
      "driveFile": {
        "driveFile": {"id": "××××"}//課題として配布するファイルのIDを取得
        }
      }],
    assigneeMode: "INDIVIDUAL_STUDENTS",
    individualStudentsOptions: {
      "studentIds": ['××××@××××', '××××@××××']//GAS太郎とGAS次郎のgmailメールアドレスを入力
    }
  };
  Classroom.Courses.CourseWork.create(createAssignment, targetCourseId);
}
```
ではこれで実行してみましょう！
![スクリーンショット (73).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108046/9a8a0ad0-8265-b169-01cd-0d6cc6c7015a.png)
出来ました！！！太郎と次郎にのみ課題が配布されています！！！
いや～～～、新しいコースを作成したり削除するときにものすごく詰まったりしましたが、だんだんとClassroomのAPIに慣れてきたかもしれません！
最後、まとめます！
##まとめ-Classroomで指定した生徒に課題を配布する方法
クラスルームで指定した生徒にのみ課題を配布したい場合は、CourseWork.createメソッドを実行するときに`assigneeMode`を`INDIVIDUAL_STUDENTS`にして`individualStudentsOptions`で配布したい生徒のメールアドレスを指定してあげればOKです！

```javascript
function createCourseWork() {
  var targetCourseId = '××××'//課題を配布するコースを選択
  var createAssignment = {
    title: '○○○○',//課題のタイトルを入力
    state: 'PUBLISHED',
    workType: 'ASSIGNMENT',
    materials: [{
      "driveFile": {
        "driveFile": {"id": "××××"}//課題として配布するファイルのIDを入力
        }
      }],
    assigneeMode: "INDIVIDUAL_STUDENTS",
    individualStudentsOptions: {
      "studentIds": ['××××@××××', '××××@××××', '××××@××××', ・・・]//課題を配布したい生徒のアドレスを入力
    }
  };
  Classroom.Courses.CourseWork.create(createAssignment, targetCourseId);
}
```
以上、参考になれば嬉しいです。Google Classroom APIは日本語の情報が少ないため、今後も様々トライしてみた結果を記事に書いていきたいと思います！