【GAS】GoogleAppsScriptを用いてGoogleClassroomにコースを作成する(Courses.create)

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

今日は**GoogleAppsScript(GAS)を用いてGoogle Classroomでコースを作成する方法**について書いていきたいと思います。

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

また、初心者が手当たり次第にコードを書いてみて詰まったところやその時の心の声などもつらつらと書いています。やり方のみさっと知りたい方は、最後の[まとめ](#まとめ-googleclassroomにコースを作成する方法)を参照ください。

また、`ReferenceError: Classroom is not defined`とエラーが出てしまった方は、[こちらの記事](https://qiita.com/coticoticotty/items/fd73cf477140349b2809)を参考にしてみてください。
では、早速トライしていきましょう！

## createメソッドをとりあえず使ってみようとするが全く上手くいかない
[公式ドキュメント](https://developers.google.com/classroom/reference/rest)より、とりあえずcreateメソッドがあるので見よう見まねで使ってみる。

```javascript

function createCourse() {
  Classroom.Courses.create();
}
```

`Classroom.Courses.create`ではなく、`Classroom.create`ではだめな理由はよく分かりません(たしかに公式ドキュメントにはそう書いてあるのですが、なぜなのかは理解していない)。

当たり前ですが、エラーが出ました。

`Exception: Invalid number of arguments provided. Expected 1-2 only
createCourse	@ コード.gs:2
`

どうも、無効な番号(=Invalid number)が指定されているらしい。これだけ読んでもよく分からない。ただ、どう見てもパラメーターが足りなさそうなので、createの引数に何かを指定しないといけないんだろうな～と推測。

[Classroomの公式ドキュメント](https://developers.google.com/classroom/reference/rest/v1/courses)をみると、コースに指定できる引数がこんないっぱいあるんですよ。。。

```javascript
{
  "id": string,
  "name": string,
  "section": string,
  "descriptionHeading": string,
  "description": string,
  "room": string,
  "ownerId": string,
  "creationTime": string,
  "updateTime": string,
  "enrollmentCode": string,
  "courseState": enum (CourseState),
  "alternateLink": string,
  "teacherGroupEmail": string,
  "courseGroupEmail": string,
  "teacherFolder": {
    object (DriveFolder)
  },
  "courseMaterialSets": [
    {
      object (CourseMaterialSet)
    }
  ],
  "guardiansEnabled": boolean,
  "calendarId": string
}
```

この情報、全部入れないといけないの？？？
そういえばさっきのエラーメッセージに
`Expected 1-2 only`
と書いてあったので、1、2個入れれば良いのかもしれません。

##引数をいくつか指定＋newCourseメソッドをとりあえず使ってみる
クラスの名前(name)とownerID(ownerId)だけを指定している[こちらの記事](https://stackoverflow.com/questions/44379503/create-a-new-course-with-google-apps-script-classroom-api)を参考にして書いてみます。

```javascript

function createCourse() {
  //ひとまず新しいコースを作成
  var course = Classroom.newCourse();

  //以下、コースの情報を追記
  course.name = 'GASテスト用クラス';
  course.ownerId = '××××@gmail.com';//ご自身のGmailアドレスを入力してください。 
  
  // 上記で作成したコースをクラスルームに作成
  Classroom.Courses.create(course);
}
```

実行してみると、、、なんと新しいクラスが作成されていました！！！
![スクリーンショット (32)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108046/39f0d351-f588-439c-aa76-3e81ac9c4c4d.jpeg)

ここまでたどり着くのに昨晩から今朝にかけて3時間以上調べていたので感動です！！！（冒頭でものべていますが私はプログラミング初心者です。。。）

さて、ちなみにコースの名前だけでも作成できるのか試してみましょう。
 
```javascript
function createCourse() {
  //ひとまず新しいコースを作成
  var course = Classroom.newCourse();

  //以下、コースの情報を追記
  course.name = 'コースの名前だけで作成';
  
  // 上記で作成したコースをクラスルームに作成
  Classroom.Courses.create(course);
}
```

はい、エラー出ましたね。
![スクリーンショット (34).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108046/c6c61ef1-ca64-ec17-f193-15f6b0b86c2d.png)
エラー内容は以下
`GoogleJsonResponseException: API call to classroom.courses.create failed with error: course.ownerId: You must specify an ownerId`
ownerIdは必須らしいです。

ではownerIdだけで作成できるのかも試してみましょう。

```javascript
function createCourse() {
  //ひとまず新しいコースを作成
  var course = Classroom.newCourse();

  //以下、コースの情報を追記
  course.ownerId = '××××@gmail.com';//ご自身のGmailアドレスを入力
  
  // 上記で作成したコースをクラスルームに作成
  Classroom.Courses.create(course);
}
```

これもエラー出ました。
![スクリーンショット (35).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108046/040863b3-5b9d-7715-4900-553afe9e957b.png)
`GoogleJsonResponseException: API call to classroom.courses.create failed with error: course.name: Course name must be specified.`
コースの名前も必須みたい、つまりは、nameとownerIdを指定すればコースは作成できるようです（公式ドキュメント見てもそういう記述が見当たらない気がするのはなぜ、、、）

##まとめ-GoogleClassroomにコースを作成する方法
GoogleClassroomに新しくコースを作成するには、
①Classroom.newCourseでコースを作成
②nameとownerIdの情報を追加
③Classroom.Courses.createを実行
上記のやり方でできます。コードは以下

```javascript
function createCourse() {
  //新しいコースを作成
  var course = Classroom.newCourse();

  //nameとownerIdを指定
  course.name = 'コース名';
  course.ownerId = '××××@gmail.com';//オーナーにする人のGmailアドレスを入力
  
  // 上記で作成したコースをクラスルームに作成
  Classroom.Courses.create(course);
}
```

以上、参考になれば嬉しいです。Google Classroom APIは日本語の情報が少ないため、今後も様々トライしてみた結果を記事に書いていきたいと思います！