【GAS】②Classroomのコースを新規作成

# 目次
1. [【GAS】①Classroomのコース一覧を取得する](https://qiita.com/oktaSI/items/223515dcc8214175c726)
2. [【GAS】②Classroomのコースを新規作成](https://qiita.com/oktaSI/items/38e7fc3bb897de93fdb4)（このページ）
3. [【GAS】③Classroomのコース情報を変更](https://qiita.com/oktaSI/items/9c8bd51b4eed1989d080)

# コースの作成
Classroomのコースを作成するためにはcreateメソッドを用いる。

```
Classroom.Courses.create(リソース情報)
```
リソース情報の指定は以下の[Manage Courses](https://developers.google.com/classroom/guides/manage-courses)の例（一部改変）の様に、courseオブジェクトを作成してそれを読み込む形がコードが読みやすくておすすめ。

```javascript
/**
 * Creates 10th Grade Biology Course.
 */
function createCourse() {
  let course = {
    name: '10th Grade Biology',
    section: 'Period 2',
    descriptionHeading: 'Welcome to 10th Grade Biology',
    description: "We'll be learning about about the structure of living creatures from a combination of textbooks, guest lectures, and lab work. Expect to be excited!",
    room: '301',
    ownerId: 'me',
    courseState: 'PROVISIONED'
  };
  course = Classroom.Courses.create(course);
  Logger.log('Course created: %s (%s)', course.name, course.id)
}
```

リソースのうちname, ownerId, courseStateは必ず指定しなければならない。ちょっと試してみる程度なら、以下でも良い。一般ユーザーが自身のクラスルームにGASでコースを作成する場合には、courseStateはPROVISIONED（承諾、辞退の選択あり）ではなく、ACTIVE（承諾済み）で良い。Googleの無料アカウントだといきなりACTIVEはできない？

```javascript:最低限の指定
Classroom.Course.create({name: 'ここにコースの名前', ownerId: 'me', courseState: 'ACTIVE'});
```

# Coursesリソースの説明
よく使うものだけを表にまとめる。詳細は[Resource:Courses](https://developers.google.com/classroom/reference/rest/v1/courses#resource:-course)を参照。

| リソース | 型 | 説明 |
|:-|:-|:-|
| id  | string  | コース作成の時には不要。SISを使用している場合には新規作成時にもエイリアスを指定することが推奨されている。詳細は[参考](#参考)を参照|
| name  | string  | （必須）コースの名前  |
| ownerId  | string  | （必須）自身なら'me'。管理者権限保持者なら一般ユーザーのメールアドレスの指定も可能  |
| courseState  | string  | （必須だが）省略した場合のデフォルト値は'PROVISIONED'。それ以外で基本的なものは'ACTIVE', 'ARCHIVED', 'DECLINED'。これらの意味は[CourseStateの説明](#CourseStateの説明)  |
| description  | string  | （省略可）クラスの説明  |
| section  | string  | （省略可）セクション名  |
| room  | string  | （省略可）部屋  |

# CourseStateの説明
よく使うものだけを表にまとめる。詳細は[CourseState](https://developers.google.com/classroom/reference/rest/v1/courses#coursestate)を参照。

| 状態 | 説明 |
|:-|:-|
| ACTIVE | 使用可能 |
| PROVISIONED  | コースへの参加承諾(ACTIVE)・辞退(DECLINED)を求める状態。ここからの状態変更はACTIVE、DECLINEDのみ。 |
| DECLINED  | コースへの参加辞退した状態。ここからの状態変更はPROVISIONEDのみ。  |
| ARCHIVED  | コースがアーカイブされた状態。ここからの状態変更はいずれも可能。 |

# 参考
Classroomと[SIS](https://support.google.com/edu/classroom/answer/9356588#partnerships)を接続している場合、コースを新規作成するときのコースIDにはSISのコースIDをコースエイリアスとして指定することが推奨されています。これはSISからコースを作成したり、SISへコースをリンクさせたりする場合にコースの重複を避けるためです。コースエイリアスをつけたコース作成コードのサンプルは以下の通り。詳細は[Mange Course Aliases](Manage Course Aliases)を参照のこと。

```javascript
/**
 * Creates Course with an alias specified
 */
function createAlias() {
  let course = {
    id: 'p:10th_bio',
    name: '10th Grade Biology',
    section: 'Period 2',
    descriptionHeading: 'Welcome to 10th Grade Biology',
    description: "We'll be learning about about the structure of living creatures from a combination of textbooks, guest lectures, and lab work. Expect to be excited!",
    room: '301',
    ownerId: 'me',
    courseState: 'PROVISIONED'
  };
  let course = Classroom.Courses.create(course);
  Logger.log('Course created: %s (%s)', course.name, course.id)
}
```