3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-01-31

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

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

初心者向けですが、javascriptの基本的なルールは押さえておいた方が理解はしやすいと思いますので、まだの方はProgateでサクッとjavascriptの文法を学習してみてください。

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

また、ReferenceError: Classroom is not definedとエラーが出てしまった方は、こちらの記事を参考にしてみてください。
では、早速トライしていきましょう!

createメソッドをとりあえず使ってみようとするが全く上手くいかない

公式ドキュメントより、とりあえずcreateメソッドがあるので見よう見まねで使ってみる。


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の公式ドキュメントをみると、コースに指定できる引数がこんないっぱいあるんですよ。。。

{
  "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)だけを指定しているこちらの記事を参考にして書いてみます。


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

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

実行してみると、、、なんと新しいクラスが作成されていました!!!
スクリーンショット (32)_LI.jpg

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

さて、ちなみにコースの名前だけでも作成できるのか試してみましょう。

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

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

はい、エラー出ましたね。
スクリーンショット (34).png
エラー内容は以下
GoogleJsonResponseException: API call to classroom.courses.create failed with error: course.ownerId: You must specify an ownerId
ownerIdは必須らしいです。

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

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

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

これもエラー出ました。
スクリーンショット (35).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を実行
上記のやり方でできます。コードは以下

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

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

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

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?