回答編集履歴

45

 

2022/04/29 13:35

投稿

退会済みユーザー
test CHANGED
@@ -141,8 +141,10 @@
141
141
  }
142
142
  ```
143
143
  という形式のデータが返ってくることがわかります。
144
+
144
-
145
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-29/b80014e8-062d-4929-8250-90f1312bfd48.png)
146
+
145
- さらに「CourseWork」オブジェクトの中身を知りたいので、「CourseWork」の青色のリンクをクリックすると、[このページ](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork#resource:-coursework) にジャンプします。
147
+ さらに「CourseWork」オブジェクトの中身を知りたいので、「object (CourseWork)」の青色のリンクをクリックすると、[このページ](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork#resource:-coursework) にジャンプします。
146
148
 
147
149
  これを読むと、title がコースワークのタイトル、description がコースワークの説明文に該当するらしいことがわかります。
148
150
 

44

 

2022/04/29 11:18

投稿

退会済みユーザー
test CHANGED
@@ -119,14 +119,15 @@
119
119
  function showCourseWorks() {
120
120
  const params = {orderBy: 'updateTime desc'}; // クエリパラメータ
121
121
  const response = Classroom.Courses.CourseWork.list('コースID', params); // 「コースID」は、パスパラメータです。実際にはアクセス可能なコースIDに置き換えてください。
122
+ console.log(response)
122
123
  }
123
124
  ```
124
125
   
125
126
 
126
127
  ---
127
128
 
128
- これで、正常にデータが取得できていれば、response にデータ一式が格納されす。
129
+ これで、正常にデータが取得できていれば、ずらずらっと表示されるはずです。
129
- どのようなデータが入っているかに関しては、ドキュメントの「レスポンス本文」の項目に書いてあります。
130
+ どのようなデータが入っているかに関しては、ドキュメントの「レスポンス本文」の項目に書いてあります。
130
131
 
131
132
  [先のページのこの部分](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list#response-body)によると、レスポンス本文として
132
133
  ```json

43

 

2022/04/29 11:16

投稿

退会済みユーザー
test CHANGED
@@ -94,9 +94,9 @@
94
94
  ```
95
95
  (これは Classroom API を扱う際のベースとなるコードですが、なぜこのようなコードになるかについては説明が冗長となるため省略します。とにかくコースIDを取得できないことには始まらないので。このコードを作るまでの調べ方は、基本的には以降に書いてある手順と同じです)
96
96
    
97
- して、質問に記載の「『REST リソース: v1.courses.courseWork』の『list』というメソッド」を使っていく場合、下記のように調べながら実装していきま
97
+ れでは、質問に記載の「『REST リソース: v1.courses.courseWork』の『list』というメソッド」を使ったコードを、下記のように調べながら実装していきましょう
98
98
   
99
- まず、ブラウザで、**APIドキュメント**の左側ガイド一覧より、[course.CourseWork -> list](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list)を開きます。
99
+ ブラウザで、**APIドキュメント**の左側ガイド一覧より、[course.CourseWork -> list](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list)を開きます。
100
100
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-28/ff4953fc-d859-49eb-8fc5-d59ab3ca8a29.png)
101
101
   
102
102
   

42

 

2022/04/29 10:13

投稿

退会済みユーザー
test CHANGED
@@ -117,8 +117,8 @@
117
117
  (※下記コードのうち、「コースID」の部分は、実在するアクセス可能なコースIDに置き換えてください)
118
118
  ```js
119
119
  function showCourseWorks() {
120
- const options = {orderBy: 'updateTime desc'}; // クエリパラメータ
120
+ const params = {orderBy: 'updateTime desc'}; // クエリパラメータ
121
- const response = Classroom.Courses.CourseWork.list('コースID', options); // 「コースID」は、パスパラメータです。実際にはアクセス可能なコースIDに置き換えてください。
121
+ const response = Classroom.Courses.CourseWork.list('コースID', params); // 「コースID」は、パスパラメータです。実際にはアクセス可能なコースIDに置き換えてください。
122
122
  }
123
123
  ```
124
124
   
@@ -153,8 +153,8 @@
153
153
  const courses = Classroom.Courses.list().courses;
154
154
  courses.forEach(course => {
155
155
  console.log(`コース名:${course.name}, コースID:${course.id}`)
156
- const options = { orderBy: 'updateTime desc' };
156
+ const params = { orderBy: 'updateTime desc' };
157
- const response = Classroom.Courses.CourseWork.list(course.id, options);
157
+ const response = Classroom.Courses.CourseWork.list(course.id, params);
158
158
  const courseWork = response.courseWork;
159
159
  if (!courseWork || courseWork.length === 0) {
160
160
  console.log('コースワークがないか、有効なコースIDではありません');

41

 

2022/04/29 10:11

投稿

退会済みユーザー
test CHANGED
@@ -66,10 +66,20 @@
66
66
  ドキュメント本文やその他ドキュメントに付属のサンプルコードに記載の内容を総合すると
67
67
  + 『REST リソース: v1.aaa.bbb』の『ccc』というメソッド に対応するGAS上の関数は、 Classroom.Aaa.Bbb.ccc() という形式になる。(先頭は全部「Classroom」で始まり、各階層のオブジェクトは先頭が大文字)
68
68
  + パスパラメータ(スラッシュで区切って指定するパラメータのこと)は、各関数の引数として指定する(エディタで自動的に候補表示される)。
69
- + クエリパラメータ(「?」以降にパラメータ名を明記して指定するパラメータのこと)は、パラメータ名をーとするオブジェクトで指定する。
69
+ + クエリパラメータ(「?」以降にパラメータ名を明記して指定するパラメータのこと)は、パラメータ名をプロパティ、パラメタ値を値とする**オブジェクト**定義し、関数の引数に指定する。
70
-
70
+  
71
71
  となっています。
72
72
 
73
+ これを一般化すると
74
+ ```js
75
+ const クエリパラメータ = {クエリパラメータ名: パラメータの値};
76
+ Classroom.Aaa.Bbb.ccc(パスパラメータ, クエリパラメータ);
77
+
78
+ ```
79
+ という書き方になります。
80
+  
81
+  
82
+  
73
83
  # 実装の例
74
84
 
75
85
  まず、自分がアクセス可能なコース名およびコースIDは、下記のようにして取得できます。
@@ -107,8 +117,8 @@
107
117
  (※下記コードのうち、「コースID」の部分は、実在するアクセス可能なコースIDに置き換えてください)
108
118
  ```js
109
119
  function showCourseWorks() {
110
- const options = {orderBy: 'updateTime desc'};
120
+ const options = {orderBy: 'updateTime desc'}; // クエリパラメータ
111
- const response = Classroom.Courses.CourseWork.list('コースID', options); // 「コースID」は、アクセス可能なコースIDに置き換えてください
121
+ const response = Classroom.Courses.CourseWork.list('コースID', options); // 「コースID」は、パスパラメータです。実際にはアクセス可能なコースIDに置き換えてください
112
122
  }
113
123
  ```
114
124
   

40

 

2022/04/29 08:38

投稿

退会済みユーザー
test CHANGED
@@ -176,9 +176,9 @@
176
176
  先生やシステム担当者によって、生徒がGASやREST API経由でアクセスできないように制限されており、コース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示される場合が有ります。
177
177
  そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、権限を付与してもらう等の対応を行ってください。
178
178
   
179
- なお、いくら「課題提出状況チェックの効率化」という大義名分があるといっても、一生徒に過ぎないあなたが全生徒の課題提出状況にアクセスできてしまうのは、情報管理の観点から問題があると言えるでょう
179
+ なお、いくら「課題提出状況チェックの効率化」という大義名分があるといっても、一生徒に過ぎないあなたが全生徒の課題提出状況にアクセスできてしまうのは、情報管理の観点から問題があるかもれません
180
180
    
181
181
  したがって、開発中は「自分がアクセス可能な情報へのアクセス権限」だけもらい、自分がアクセス可能なデータだけを材料に開発を行う
182
-
182
+  
183
183
  本番稼働時は(全生徒の課題情報に対してアクセス権限を持っている)先生/システム担当の方で実行してもらう、
184
184
  といった運用が考えられます。

39

 

2022/04/29 08:36

投稿

退会済みユーザー
test CHANGED
@@ -64,7 +64,7 @@
64
64
  API と サービスの記述の変換方法については、[このドキュメント](https://developers.google.com/apps-script/guides/services/advanced#how_method_signatures_are_determined)に書かれているとおりです。
65
65
   
66
66
  ドキュメント本文やその他ドキュメントに付属のサンプルコードに記載の内容を総合すると
67
- + 『REST リソース: v1.aaa.bbb』の『ccc』というメソッド に対応するGAS上の関数は、 Classroom.aaa.bbb.ccc() という形式になる。(先頭は全部「Classroom」で始ま
67
+ + 『REST リソース: v1.aaa.bbb』の『ccc』というメソッド に対応するGAS上の関数は、 Classroom.Aaa.Bbb.ccc() という形式になる。(先頭は全部「Classroom」で始まり、各階層のオブジェクトは先頭が大文字
68
68
  + パスパラメータ(スラッシュで区切って指定するパラメータのこと)は、各関数の引数として指定する(エディタで自動的に候補表示される)。
69
69
  + クエリパラメータ(「?」以降にパラメータ名を明記して指定するパラメータのこと)は、パラメータ名をキーとするオブジェクトで指定する。
70
70
 

38

  

2022/04/29 08:34

投稿

退会済みユーザー
test CHANGED
@@ -54,7 +54,7 @@
54
54
 
55
55
  ---
56
56
   
57
- # コードの書き方について:
57
+ # ドキュメント調べ方について:
58
58
 
59
59
  [Classroomサービスのヘルプ](https://developers.google.com/apps-script/advanced/classroom) には最低限のことしか記載されていません。
60
60
   
@@ -64,16 +64,16 @@
64
64
  API と サービスの記述の変換方法については、[このドキュメント](https://developers.google.com/apps-script/guides/services/advanced#how_method_signatures_are_determined)に書かれているとおりです。
65
65
   
66
66
  ドキュメント本文やその他ドキュメントに付属のサンプルコードに記載の内容を総合すると
67
- + 『REST リソース: v1.●●.▲▲』の『☆☆』というメソッド に対応するGAS上の関数は、 Classroom.●●.▲▲(☆☆) 形式になる。(先頭は全部「Classroom」で始まる)
67
+ + 『REST リソース: v1.aaa.bbb』の『ccc』というメソッド に対応するGAS上の関数は、 Classroom.aaa.bbb.ccc() という形式になる。(先頭は全部「Classroom」で始まる)
68
- + パスパラメータは、各関数の引数として指定する(エディタで自動的に候補表示される)。
68
+ + パスパラメータ(スラッシュで区切って指定するパラメータのこと)は、各関数の引数として指定する(エディタで自動的に候補表示される)。
69
- + クエリパラメータは、パラメータ名をキーとするオブジェクトで指定する。
69
+ + クエリパラメータ(「?」以降にパラメータ名を明記して指定するパラメータのこと)は、パラメータ名をキーとするオブジェクトで指定する。
70
70
 
71
- というやり方になります。
71
+ なっています。
72
72
 
73
- # 実装の進め方
73
+ # 実装の
74
74
 
75
75
  まず、自分がアクセス可能なコース名およびコースIDは、下記のようにして取得できます。
76
- (これは Classroom API を扱う際のベースとなるコードですが、なぜこのようなコードになるかについては説明が冗長となるため省略します。とにかくコースIDを取得できないことには始まらないので。このコードを作るまでの調べ方は、基本的には以降に書いてある手順と同じです)
76
+
77
77
  ```js
78
78
  function showCourses() {
79
79
  const courses = Classroom.Courses.list().courses;
@@ -82,7 +82,8 @@
82
82
  });
83
83
  }
84
84
  ```
85
-  
85
+ (これは Classroom API を扱う際のベースとなるコードですが、なぜこのようなコードになるかについては説明が冗長となるため省略します。とにかくコースIDを取得できないことには始まらないので。このコードを作るまでの調べ方は、基本的には以降に書いてある手順と同じです)
86
+   
86
87
  そして、質問に記載の「『REST リソース: v1.courses.courseWork』の『list』というメソッド」を使っていく場合、下記のように調べながら実装していきます。
87
88
   
88
89
  まず、ブラウザで、**APIドキュメント**の左側ガイド一覧より、[course.CourseWork -> list](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list)を開きます。

37

 

2022/04/29 08:30

投稿

退会済みユーザー
test CHANGED
@@ -107,7 +107,7 @@
107
107
  ```js
108
108
  function showCourseWorks() {
109
109
  const options = {orderBy: 'updateTime desc'};
110
- const response = Classroom.Courses.CourseWork.list('コースID', options);
110
+ const response = Classroom.Courses.CourseWork.list('コースID', options); // 「コースID」は、アクセス可能なコースIDに置き換えてください
111
111
  }
112
112
  ```
113
113
   

36

 

2022/04/29 08:26

投稿

退会済みユーザー
test CHANGED
@@ -73,7 +73,7 @@
73
73
  # 実装の進め方
74
74
 
75
75
  まず、自分がアクセス可能なコース名およびコースIDは、下記のようにして取得できます。
76
- これは Classroom API を扱う際のベースとなるコードですが、なぜこのようなコードになるかについては説明省略します。基本的には以降に書いてあるやり方と同じです)
76
+ (これは Classroom API を扱う際のベースとなるコードですが、なぜこのようなコードになるかについては説明が冗長となるため省略します。とにかくコースIDを取得できないことには始まらないので。このコードを作るまでの調べ方は、基本的には以降に書いてある手順と同じです)
77
77
  ```js
78
78
  function showCourses() {
79
79
  const courses = Classroom.Courses.list().courses;

35

 

2022/04/29 07:33

投稿

退会済みユーザー
test CHANGED
@@ -1,9 +1,9 @@
1
- 「GASを用いて」というのが前提であるならば、素のREST APIを使おうとするよりも、Google Apps Scriptにもとから備わっている Classroom サービスを利用した方が楽で確実であると思います。
1
+ 「GASを用いて」というのが前提であるならば、素のREST APIを使おうとするよりも、Google Apps Scriptにもとから備わっている **Classroom サービス**を利用した方が楽です。
2
2
  https://developers.google.com/apps-script/advanced/classroom
3
3
 
4
4
 
5
- # Classroomサービスの追加手順 
5
+ # Classroom サービスの利用開始準備 
6
- Classroomサービスを追加するには、下記のようにします。
6
+ GAS で Classroom サービスを利用するには、下記のようにします。
7
7
   
8
8
  ①エディタの左側のうち、「サービス」のプラス記号をクリックします。
9
9
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-28/c324bd5a-5ac2-41f3-8605-2c23d3fd530c.png)

34

 

2022/04/29 07:17

投稿

退会済みユーザー
test CHANGED
@@ -173,17 +173,11 @@
173
173
  # 開発/運用に関するアドバイス
174
174
 
175
175
  先生やシステム担当者によって、生徒がGASやREST API経由でアクセスできないように制限されており、コース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示される場合が有ります。
176
- そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、
176
+ そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、権限を付与してもらう等の対応を行ってください。
177
- ・権限を付与してもらう
178
- または
179
- ・権限を持っている先生/システム担当者にコードを渡して実行してもらう
180
- 等の対応を行ってください。
181
-
182
- なお、後者のように、開発中に修正が発生する都度、修正したコードを他人に提供して実行してもらうのは、現実的ではありません。
183
177
   
184
- 一方、いくら「課題提出状況チェックの効率化」という大義名分があるといっても、一生徒に過ぎないあなたが全生徒の課題提出状況にアクセスできてしまうのは、情報管理の観点から問題があると言えるでしょう。
178
+ なお、いくら「課題提出状況チェックの効率化」という大義名分があるといっても、一生徒に過ぎないあなたが全生徒の課題提出状況にアクセスできてしまうのは、情報管理の観点から問題があると言えるでしょう。
185
-  
179
+   
186
- したがって、開発中は「自分がアクセス可能な情報へのアクセス権」だけもらい、自分がアクセス可能なデータだけを材料に開発を行う
180
+ したがって、開発中は「自分がアクセス可能な情報へのアクセス権」だけもらい、自分がアクセス可能なデータだけを材料に開発を行う
187
181
 
188
182
  本番稼働時は(全生徒の課題情報に対してアクセス権限を持っている)先生/システム担当の方で実行してもらう、
189
183
  といった運用が考えられます。

33

 

2022/04/29 07:16

投稿

退会済みユーザー
test CHANGED
@@ -183,8 +183,7 @@
183
183
   
184
184
  一方、いくら「課題提出状況チェックの効率化」という大義名分があるといっても、一生徒に過ぎないあなたが、全生徒の課題提出状況にアクセスできてしまうのは、情報管理の観点から問題があると言えるでしょう。
185
185
   
186
- したがって、権限を貰うと言っても、
187
- 「自分がアクセス可能な情報へのアクセス権」だけもらい、開発中は自分がアクセス可能なデータだけを材料に開発を行う
186
+ したがって、開発中は「自分がアクセス可能な情報へのアクセス権」だけもらい、自分がアクセス可能なデータだけを材料に開発を行う
188
187
 
189
188
  本番稼働時は(全生徒の課題情報に対してアクセス権限を持っている)先生/システム担当の方で実行してもらう、
190
189
  といった運用が考えられます。

32

 

2022/04/29 07:15

投稿

退会済みユーザー
test CHANGED
@@ -170,7 +170,7 @@
170
170
 
171
171
  ---
172
172
   
173
- # 運用に関するアドバイス
173
+ # 開発/運用に関するアドバイス
174
174
 
175
175
  先生やシステム担当者によって、生徒がGASやREST API経由でアクセスできないように制限されており、コース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示される場合が有ります。
176
176
  そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、

31

 

2022/04/29 07:13

投稿

退会済みユーザー
test CHANGED
@@ -70,7 +70,7 @@
70
70
 
71
71
  というやり方になります。
72
72
 
73
- # 実装
73
+ # 実装の進め方
74
74
 
75
75
  まず、自分がアクセス可能なコース名およびコースIDは、下記のようにして取得できます。
76
76
  これは Classroom API を扱う際のベースとなるコードですが、なぜこのようなコードになるかについては説明を省略します。(基本的には以降に書いてあるやり方と同じです)

30

 

2022/04/29 07:12

投稿

退会済みユーザー
test CHANGED
@@ -170,6 +170,7 @@
170
170
 
171
171
  ---
172
172
   
173
+ # 運用に関するアドバイス
173
174
 
174
175
  先生やシステム担当者によって、生徒がGASやREST API経由でアクセスできないように制限されており、コース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示される場合が有ります。
175
176
  そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、

29

 

2022/04/29 07:11

投稿

退会済みユーザー
test CHANGED
@@ -180,7 +180,7 @@
180
180
 
181
181
  なお、後者のように、開発中に修正が発生する都度、修正したコードを他人に提供して実行してもらうのは、現実的ではありません。
182
182
   
183
- 一方、いくら「課題チェックの効率化」という大義名分があるといっても、一生徒に過ぎないあなたが、全生徒の課題提出状況にアクセスできてしまうのは、情報管理の観点から問題があると言えるでしょう。
183
+ 一方、いくら「課題提出状況チェックの効率化」という大義名分があるといっても、一生徒に過ぎないあなたが、全生徒の課題提出状況にアクセスできてしまうのは、情報管理の観点から問題があると言えるでしょう。
184
184
   
185
185
  したがって、権限を貰うと言っても、
186
186
  「自分がアクセス可能な情報へのアクセス権」だけもらい、開発中は自分がアクセス可能なデータだけを材料に開発を行う

28

 

2022/04/29 07:10

投稿

退会済みユーザー
test CHANGED
@@ -178,8 +178,10 @@
178
178
  ・権限を持っている先生/システム担当者にコードを渡して実行してもらう
179
179
  等の対応を行ってください。
180
180
 
181
- なお、後者のように、開発中に修正が発生する都度、修正したコードを他人に提供して実行してもらうのは、現実的ではないと思い
181
+ なお、後者のように、開発中に修正が発生する都度、修正したコードを他人に提供して実行してもらうのは、現実的ではありせん
182
+  
182
-
183
+ 一方、いくら「課題チェックの効率化」という大義名分があるといっても、一生徒に過ぎないあなたが、全生徒の課題提出状況にアクセスできてしまうのは、情報管理の観点から問題があると言えるでしょう。
184
+  
183
185
  したがって、権限を貰うと言っても、
184
186
  「自分がアクセス可能な情報へのアクセス権」だけもらい、開発中は自分がアクセス可能なデータだけを材料に開発を行う
185
187
 

27

 

2022/04/29 07:06

投稿

退会済みユーザー
test CHANGED
@@ -176,4 +176,12 @@
176
176
  ・権限を付与してもらう
177
177
  または
178
178
  ・権限を持っている先生/システム担当者にコードを渡して実行してもらう
179
+ 等の対応を行ってください。
180
+
179
- 等の対応を行ってください。(後者について、開発中もずっと他人にコードを実行してもらうのは現実的ではないと思います。開発中の期間だけ権限を貰って開発し、本番稼働時は権限を返上し、先生/システムの方で実行してもらう、といった運用は考えられます)
181
+ なお、後者のように、開発中に修正が発生する都度、修正したコードを他人に提供して実行してもらうのは現実的ではないと思います。
182
+
183
+ したがって、権限を貰うと言っても、
184
+ 「自分がアクセス可能な情報へのアクセス権」だけもらい、開発中は自分がアクセス可能なデータだけを材料に開発を行う
185
+
186
+ 本番稼働時は(全生徒の課題情報に対してアクセス権限を持っている)先生/システム担当の方で実行してもらう、
187
+ といった運用が考えられます。

26

  

2022/04/29 07:01

投稿

退会済みユーザー
test CHANGED
@@ -175,5 +175,5 @@
175
175
  そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、
176
176
  ・権限を付与してもらう
177
177
  または
178
- ・権限を持っている先生/システム担当者にコードを実行してもらう
178
+ ・権限を持っている先生/システム担当者にコードを渡して実行してもらう
179
- 等の対応を行ってください。
179
+ 等の対応を行ってください。(後者について、開発中もずっと他人にコードを実行してもらうのは現実的ではないと思います。開発中の期間だけ権限を貰って開発し、本番稼働時は権限を返上し、先生/システムの方で実行してもらう、といった運用は考えられます)

25

 

2022/04/29 06:59

投稿

退会済みユーザー
test CHANGED
@@ -171,5 +171,9 @@
171
171
  ---
172
172
   
173
173
 
174
- もしコース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示され場合は、先生や業者によって、生徒GASやREST API経由でアクセスできないように制限されている可能性が有ります。
174
+ 先生やシステム担当者によって、生徒がGASやREST API経由でアクセスできないように制限されており、コース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示され場合が有ります。
175
- そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、権限を付与してもらう等してください。
175
+ そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、
176
+ ・権限を付与してもらう
177
+ または
178
+ ・権限を持っている先生/システム担当者にコードを実行してもらう
179
+ 等の対応を行ってください。

24

 

2022/04/29 06:48

投稿

退会済みユーザー
test CHANGED
@@ -93,7 +93,7 @@
93
93
  ・パスパラメータとして、「courseId」
94
94
  ・クエリパラメータとして、courseWorkStates[]、orderBy、pageSize、pageToken の4つがあることが分かります。
95
95
   
96
- ・「『courses.courseWork』『list』というメソッドを使うとして、たとえば以下のような要件を想定してみましょう
96
+ 説明ため、例として、すこし具体的な要件を想定してみま
97
97
 
98
98
  > 要件:
99
99
  > 自分がアクセスできる各コースごとに、更新時刻降順にコースワークを取得し、それぞれのタイトルと説明文を表示する。

23

 

2022/04/29 06:46

投稿

退会済みユーザー
test CHANGED
@@ -93,14 +93,13 @@
93
93
  ・パスパラメータとして、「courseId」
94
94
  ・クエリパラメータとして、courseWorkStates[]、orderBy、pageSize、pageToken の4つがあることが分かります。
95
95
   
96
-  
97
- 質問者さん書き方だ、やりたが漠然としているので、たとえば下のような具体的な要件を想定してみましょう。
96
+ ・「『courses.courseWork』『list』というメソッドを使う例」として、たとえば下のような要件を想定してみましょう。
98
97
 
99
98
  > 要件:
100
99
  > 自分がアクセスできる各コースごとに、更新時刻降順にコースワークを取得し、それぞれのタイトルと説明文を表示する。
101
-
102
-
100
+  
101
+  
103
- 「更新時刻降順にコースワークを取得」という処理は、ドキュメントに書いてあるクエリパラメータのうち、orderBy を使用することで実現できそうです。
102
+ 「更新時刻降順にコースワークを取得」という処理は、ドキュメントに書いてあるクエリパラメータのうち、orderBy を使用することで実現できそうです
104
103
  (下の図は https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list#query-parameters より引用)
105
104
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-28/1971730c-86dc-446d-a63d-b69882a70b83.png)
106
105
  したがって、第一段階のGASのコードは下記のようになります。

22

 

2022/04/29 05:30

投稿

退会済みユーザー
test CHANGED
@@ -163,7 +163,7 @@
163
163
 
164
164
  基本的に全部公式ドキュメントに書かれていますし、公式ドキュメント以外にも、Classroom APIに関するサンプルコードはたくさん転がっているので、
165
165
  ・ドキュメントをきちんと読む
166
- ・いろいろなサイトを検索して実際にコードを書いてみる
166
+ ・いろいろなサイトを検索して実際にコードを書いて実行してみる
167
167
  の試行錯誤を繰り返しさえすれば、質問者さんのやりたいことはできると思います。
168
168
 
169
169
  LINE関係の実装も同じです。「ドキュメントを読む/検索して見つけたコードを実際に書いて実行してみて試行錯誤する」の横断を繰り返し。

21

 

2022/04/29 05:25

投稿

退会済みユーザー
test CHANGED
@@ -16,7 +16,8 @@
16
16
    
17
17
  ④次に、エディタに戻り、appsscript.jsonファイルを開きます。
18
18
 
19
- そして、appsscript.json に、下記**「oauthScopes」以降を追加**します。
19
+ そして、appsscript.json に、下記に記載の **「oauthScopes」以降を追加**します。
20
+
20
21
  ```json
21
22
  {
22
23
  "timeZone": "Asia/Tokyo",
@@ -49,6 +50,8 @@
49
50
  }
50
51
  ```
51
52
    
53
+ ⑤ Ctrl+S(Macの場合はCommand+S)を押してコードを保存します。
54
+
52
55
  ---
53
56
   
54
57
  # コードの書き方について:

20

 

2022/04/29 05:07

投稿

退会済みユーザー
test CHANGED
@@ -158,8 +158,12 @@
158
158
  ---
159
159
   
160
160
 
161
- 基本的に全部公式ドキュメントに書かれていますし、Classroom APIに関するサンプルコードたくさん転がっているので、ドキュメントをきちんと読んでいろいろなサイトを検索して試行錯誤しさえすれば、質問者さんのやりたいことはできると思います。
161
+ 基本的に全部公式ドキュメントに書かれていますし、公式ドキュメント以外にも、Classroom APIに関するサンプルコードたくさん転がっているので、
162
+ ・ドキュメントをきちんと読む
163
+ ・いろいろなサイトを検索して実際にコードを書いてみる
164
+ の試行錯誤を繰り返しさえすれば、質問者さんのやりたいことはできると思います。
165
+
162
- LINE関係の実装も同じです。「ドキュメントを読む/検索して見つけたコードを実際に書いて実行してみて試行錯誤する」の横断を繰り返し
166
+ LINE関係の実装も同じです。「ドキュメントを読む/検索して見つけたコードを実際に書いて実行してみて試行錯誤する」の横断を繰り返し
163
167
   
164
168
 
165
169
  ---

19

 

2022/04/29 05:06

投稿

退会済みユーザー
test CHANGED
@@ -159,7 +159,7 @@
159
159
   
160
160
 
161
161
  基本的に全部公式ドキュメントに書かれていますし、Classroom APIに関するサンプルコードもたくさん転がっているので、ドキュメントをきちんと読んでいろいろなサイトを検索して試行錯誤しさえすれば、質問者さんのやりたいことはできると思います。
162
- (LINE関係の実装も同じです。「ドキュメントを読む検索して見つけたコードを実際に書いて実行してみて試行錯誤する」の横断を繰り返し)
162
+ (LINE関係の実装も同じです。「ドキュメントを読む検索して見つけたコードを実際に書いて実行してみて試行錯誤する」の横断を繰り返し)
163
163
   
164
164
 
165
165
  ---

18

   

2022/04/29 05:05

投稿

退会済みユーザー
test CHANGED
@@ -158,7 +158,8 @@
158
158
  ---
159
159
   
160
160
 
161
- 基本的に全部公式ドキュメントに書かれていますので、ドキュメントをきちんと読さえすれば、質問者さんのやりたいことはできると思います。
161
+ 基本的に全部公式ドキュメントに書かれていますし、Classroom APIに関するサンプルコードもたくさん転がっているので、ドキュメントをきちんと読んでいろいろなサイトを検索して試行錯誤しさえすれば、質問者さんのやりたいことはできると思います。
162
+ (LINE関係の実装も同じです。「ドキュメントを読む→検索して見つけたコードを実際に書いて実行してみて試行錯誤する」の横断を繰り返し)
162
163
   
163
164
 
164
165
  ---

17

 

2022/04/29 05:00

投稿

退会済みユーザー
test CHANGED
@@ -1,4 +1,4 @@
1
- 素のREST APIを使するよりも、Google Apps Scriptにもとから備わっている Classroom サービスを利用した方が確実と思います。
1
+ 「GASを用いて」というのが前提であるならば、素のREST APIを使おうとするよりも、Google Apps Scriptにもとから備わっている Classroom サービスを利用した方が楽で確実であると思います。
2
2
  https://developers.google.com/apps-script/advanced/classroom
3
3
 
4
4
 

16

 

2022/04/29 04:45

投稿

退会済みユーザー
test CHANGED
@@ -70,6 +70,7 @@
70
70
  # 実装
71
71
 
72
72
  まず、自分がアクセス可能なコース名およびコースIDは、下記のようにして取得できます。
73
+ これは Classroom API を扱う際のベースとなるコードですが、なぜこのようなコードになるかについては説明を省略します。(基本的には以降に書いてあるやり方と同じです)
73
74
  ```js
74
75
  function showCourses() {
75
76
  const courses = Classroom.Courses.list().courses;
@@ -79,7 +80,7 @@
79
80
  }
80
81
  ```
81
82
   
82
- そして、質問に記載の「『REST リソース: v1.courses.courseWork』の『list』というメソッド」を使場合下記のようにします。
83
+ そして、質問に記載の「『REST リソース: v1.courses.courseWork』の『list』というメソッド」を使っていく場合下記のように調べながら実装ていきます。
83
84
   
84
85
  まず、ブラウザで、**APIドキュメント**の左側ガイド一覧より、[course.CourseWork -> list](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list)を開きます。
85
86
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-28/ff4953fc-d859-49eb-8fc5-d59ab3ca8a29.png)

15

 

2022/04/29 04:42

投稿

退会済みユーザー
test CHANGED
@@ -71,7 +71,7 @@
71
71
 
72
72
  まず、自分がアクセス可能なコース名およびコースIDは、下記のようにして取得できます。
73
73
  ```js
74
- function getCoursesInfo() {
74
+ function showCourses() {
75
75
  const courses = Classroom.Courses.list().courses;
76
76
  courses.forEach(course => {
77
77
  console.log(`コース名:${course.name}, ID:${course.id}`)
@@ -102,7 +102,7 @@
102
102
  したがって、第一段階のGASのコードは下記のようになります。
103
103
  (※下記コードのうち、「コースID」の部分は、実在するアクセス可能なコースIDに置き換えてください)
104
104
  ```js
105
- function getCourseWorks() {
105
+ function showCourseWorks() {
106
106
  const options = {orderBy: 'updateTime desc'};
107
107
  const response = Classroom.Courses.CourseWork.list('コースID', options);
108
108
  }
@@ -131,11 +131,11 @@
131
131
 
132
132
  これを読むと、title がコースワークのタイトル、description がコースワークの説明文に該当するらしいことがわかります。
133
133
 
134
- したがって先ほどのgetCourseWorks()に、getCourseInfo()の内容と、ループ、 title / descriptionを取得する処理を合体して、完成となります。
134
+ したがって先ほどのshowCourseWorks()に、showCourses()の内容と、ループ、 title / descriptionを取得する処理を合体して、完成となります。
135
135
  (※簡便のため、下記のコードは nextPageTokenを使ったページ切替を実装していません。したがってコースワークの合計数によっては、一部のコースワークしか列挙されない場合が有ります)
136
136
 
137
137
  ```js
138
- function getCourseWorks() {
138
+ function showCourseWorks() {
139
139
  const courses = Classroom.Courses.list().courses;
140
140
  courses.forEach(course => {
141
141
  console.log(`コース名:${course.name}, コースID:${course.id}`)

14

 

2022/04/29 04:38

投稿

退会済みユーザー
test CHANGED
@@ -85,7 +85,7 @@
85
85
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-28/ff4953fc-d859-49eb-8fc5-d59ab3ca8a29.png)
86
86
   
87
87
   
88
- **ドキュメントを見ると**
88
+ **ドキュメントの[該当部分](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list#path-parameters)を見ると**
89
89
  ・パスパラメータとして、「courseId」
90
90
  ・クエリパラメータとして、courseWorkStates[]、orderBy、pageSize、pageToken の4つがあることが分かります。
91
91
   

13

 

2022/04/29 04:34

投稿

退会済みユーザー
test CHANGED
@@ -163,5 +163,5 @@
163
163
  ---
164
164
   
165
165
 
166
- もしコース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示された場合は、先生や業者によって、生徒GASやREST API経由でアクセスさせないように制限されている可能性が有ります。
166
+ もしコース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示された場合は、先生や業者によって、生徒GASやREST API経由でアクセスできないように制限されている可能性が有ります。
167
167
  そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、権限を付与してもらう等してください。

12

 

2022/04/29 04:34

投稿

退会済みユーザー
test CHANGED
@@ -138,7 +138,7 @@
138
138
  function getCourseWorks() {
139
139
  const courses = Classroom.Courses.list().courses;
140
140
  courses.forEach(course => {
141
- console.log(`コース名:${course.name}, ID:${course.id}`)
141
+ console.log(`コース名:${course.name}, コースID:${course.id}`)
142
142
  const options = { orderBy: 'updateTime desc' };
143
143
  const response = Classroom.Courses.CourseWork.list(course.id, options);
144
144
  const courseWork = response.courseWork;

11

 

2022/04/29 04:32

投稿

退会済みユーザー
test CHANGED
@@ -93,7 +93,7 @@
93
93
  質問者さんの書き方だと、やりたいことが漠然としているので、たとえば下記のような具体的な要件を想定してみましょう。
94
94
 
95
95
  > 要件:
96
- > 更新時刻降順にコースワークを取得し、それぞれのタイトルと説明文を表示する。
96
+ > 自分がアクセスできる各コースごとに、更新時刻降順にコースワークを取得し、それぞれのタイトルと説明文を表示する。
97
97
 
98
98
 
99
99
  「更新時刻降順にコースワークを取得」という処理は、ドキュメントに書いてあるクエリパラメータのうち、orderBy を使用することで実現できそうです。

10

 

2022/04/29 04:30

投稿

退会済みユーザー
test CHANGED
@@ -1,17 +1,20 @@
1
1
  素のREST APIを使用するよりも、Google Apps Scriptにもとから備わっている Classroom サービスを利用した方が確実かと思います。
2
2
  https://developers.google.com/apps-script/advanced/classroom
3
3
 
4
+
5
+ # Classroomサービスの追加手順 
4
- サービス追加は下記のようにします。
6
+ Classroomサービス追加するに下記のようにします。
7
+  
5
- エディタの左側のうち、「サービス」のプラス記号をクリックします。
8
+ エディタの左側のうち、「サービス」のプラス記号をクリックします。
6
9
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-28/c324bd5a-5ac2-41f3-8605-2c23d3fd530c.png)
7
-
10
+  
8
- 次に、「Google Classroom API」を選択して、右下の「追加」ボタンをクリックします。
11
+ 次に、「Google Classroom API」を選択して、右下の「追加」ボタンをクリックします。
9
12
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-28/eb3e43b2-ae91-41f2-8de7-67ee10bcd751.png)
10
-
13
+  
11
- 次に、左側に並んでいる、歯車のアイコンをクリックし「appsscript.json」マニフェスト ファイルをエディタで表示する」にチェックを入れます。
14
+ 次に、左側に並んでいる、歯車のアイコンをクリックし「appsscript.json」マニフェスト ファイルをエディタで表示する」にチェックを入れます。
12
15
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-29/6077a092-58c5-4ea2-acae-144457d906c5.png)
13
-  
16
+   
14
- 次に、エディタに戻り、appsscript.jsonファイルを開きます。
17
+ 次に、エディタに戻り、appsscript.jsonファイルを開きます。
15
18
 
16
19
  そして、appsscript.json に、下記**「oauthScopes」以降を追加**します。
17
20
  ```json
@@ -45,25 +48,39 @@
45
48
  ]
46
49
  }
47
50
  ```
51
+   
52
+ ---
48
53
   
49
- ---
50
-
51
- コードの書き方について:
54
+ # コードの書き方について:
52
55
 
53
56
  [Classroomサービスのヘルプ](https://developers.google.com/apps-script/advanced/classroom) には最低限のことしか記載されていません。
57
+  
54
- Classroomサービスの各関数は、APIとほぼ1対1対応していますので
58
+ Classroomサービスの各関数は、APIとほぼ1対1対応していますので
55
59
  基本的に **[APIのヘルプ](https://developers.google.com/classroom/reference/rest)を参照し、それをClassroomサービスの各関数の呼び出しに置き換えて実行していく**というステップになります。
60
+  
61
+ API と サービスの記述の変換方法については、[このドキュメント](https://developers.google.com/apps-script/guides/services/advanced#how_method_signatures_are_determined)に書かれているとおりです。
62
+  
63
+ ドキュメント本文やその他ドキュメントに付属のサンプルコードに記載の内容を総合すると
64
+ + 『REST リソース: v1.●●.▲▲』の『☆☆』というメソッド に対応するGAS上の関数は、 Classroom.●●.▲▲(☆☆) 形式になる。(先頭は全部「Classroom」で始まる)
65
+ + パスパラメータは、各関数の引数として指定する(エディタで自動的に候補表示される)。
66
+ + クエリパラメータは、パラメータ名をキーとするオブジェクトで指定する。
56
67
 
57
- API と サービスの記述の変換方法については、[このドキュメント](https://developers.google.com/apps-script/guides/services/advanced#how_method_signatures_are_determined)に書かれているとおりです。
58
-
59
- ドキュメント本文やその他ドキュメントに付属のサンプルコードに記載の内容を総合すると
60
- ・『REST リソース: v1.●●.▲▲』の『☆☆』というメソッド に対応するGAS上の関数は、 Classroom.●●.▲▲(☆☆) 形式になる。(先頭は全部「Classroom」で始まる)
61
- ・パスパラメータは、各関数の引数として指定する(エディタで自動的に候補表示される)。
62
- ・クエリパラメータは、パラメータ名をキーとするオブジェクトで指定する。
63
68
  というやり方になります。
64
69
 
65
- たとえば、質問に記載の「『REST リソース: v1.courses.courseWork』の『list』というメソッド」を使う場合は下記のようにします。
70
+ # 実装
66
71
 
72
+ まず、自分がアクセス可能なコース名およびコースIDは、下記のようにして取得できます。
73
+ ```js
74
+ function getCoursesInfo() {
75
+ const courses = Classroom.Courses.list().courses;
76
+ courses.forEach(course => {
77
+ console.log(`コース名:${course.name}, ID:${course.id}`)
78
+ });
79
+ }
80
+ ```
81
+  
82
+ そして、質問に記載の「『REST リソース: v1.courses.courseWork』の『list』というメソッド」を使う場合は下記のようにします。
83
+  
67
84
  まず、ブラウザで、**APIドキュメント**の左側ガイド一覧より、[course.CourseWork -> list](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list)を開きます。
68
85
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-28/ff4953fc-d859-49eb-8fc5-d59ab3ca8a29.png)
69
86
   
@@ -85,22 +102,13 @@
85
102
  したがって、第一段階のGASのコードは下記のようになります。
86
103
  (※下記コードのうち、「コースID」の部分は、実在するアクセス可能なコースIDに置き換えてください)
87
104
  ```js
88
- function main() {
105
+ function getCourseWorks() {
89
106
  const options = {orderBy: 'updateTime desc'};
90
107
  const response = Classroom.Courses.CourseWork.list('コースID', options);
91
108
  }
92
109
  ```
93
110
   
94
- ---
111
+
95
- 注)自分がアクセス可能なコース名およびコースIDは、下記のようにして取得できます。
96
- ```js
97
- function getCourseInfo() {
98
- const courses = Classroom.Courses.list().courses;
99
- courses.forEach(course => {
100
- console.log(`コース名:${course.name}, ID:${course.id}`)
101
- });
102
- }
103
- ```
104
112
  ---
105
113
 
106
114
  これで、正常にデータが取得できていれば、response にデータ一式が格納されます。
@@ -123,29 +131,37 @@
123
131
 
124
132
  これを読むと、title がコースワークのタイトル、description がコースワークの説明文に該当するらしいことがわかります。
125
133
 
126
- したがって先ほどのコードに、ループ title / descriptionを取得する処理を追加して、完成となります。
134
+ したがって先ほどのgetCourseWorks()に、getCourseInfo()の内容と、ループ title / descriptionを取得する処理を合体して、完成となります。
127
135
  (※簡便のため、下記のコードは nextPageTokenを使ったページ切替を実装していません。したがってコースワークの合計数によっては、一部のコースワークしか列挙されない場合が有ります)
128
136
 
129
137
  ```js
130
- function main() {
138
+ function getCourseWorks() {
139
+ const courses = Classroom.Courses.list().courses;
140
+ courses.forEach(course => {
141
+ console.log(`コース名:${course.name}, ID:${course.id}`)
131
- const options = { orderBy: 'updateTime desc' };
142
+ const options = { orderBy: 'updateTime desc' };
132
- const response = Classroom.Courses.CourseWork.list('コースID', options);
143
+ const response = Classroom.Courses.CourseWork.list(course.id, options);
133
- const courseWork = response.courseWork;
144
+ const courseWork = response.courseWork;
134
- if (!courseWork || courseWork.length === 0) {
145
+ if (!courseWork || courseWork.length === 0) {
135
- console.log('teratail_1vughhd1dfeus0:コースワークがないか、有効なコースIDではありません');
146
+ console.log('コースワークがないか、有効なコースIDではありません');
136
- return;
147
+ return;
137
- }
148
+ }
138
- courseWork.forEach(work => {
149
+ courseWork.forEach(work => {
139
- console.log(`タイトル:${work.title}`)
150
+ console.log(`タイトル:${work.title}`)
140
- console.log(`説明:${work.description}`)
151
+ console.log(`説明:${work.description}`)
152
+ });
141
153
  });
142
154
  }
143
155
  ```
144
156
 
145
157
  ---
158
+  
146
159
 
147
160
  基本的に全部公式ドキュメントに書かれていますので、ドキュメントをきちんと読みさえすれば、質問者さんのやりたいことはできると思います。
161
+  
148
162
 
149
163
  ---
164
+  
150
165
 
151
- もしコース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示された場合は、先生や業者によって、生徒にGASやREST API経由でアクセスさせないように制限されている可能性が有ります。そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、権限を付与してもらう等してください。
166
+ もしコース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示された場合は、先生や業者によって、生徒にGASやREST API経由でアクセスさせないように制限されている可能性が有ります。
167
+ そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、権限を付与してもらう等してください。

9

 

2022/04/29 04:09

投稿

退会済みユーザー
test CHANGED
@@ -148,4 +148,4 @@
148
148
 
149
149
  ---
150
150
 
151
- もしコース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示された場合は、先生や業者によって、生徒GASからアクセスできないように制限されている可能性が有ります。そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、権限を付与してもらう等してください。
151
+ もしコース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示された場合は、先生や業者によって、生徒GASやREST API経由でアクセスさせないように制限されている可能性が有ります。そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、権限を付与してもらう等してください。

8

 

2022/04/29 04:08

投稿

退会済みユーザー
test CHANGED
@@ -148,4 +148,4 @@
148
148
 
149
149
  ---
150
150
 
151
- もしコース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示された場合は、先生や業者によって、GASからアクセスできないように制限されている可能性が有ります。そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、権限を付与してもらう等してください。
151
+ もしコース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示された場合は、先生や業者によって、生徒がGASからアクセスできないように制限されている可能性が有ります。そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、権限を付与してもらう等してください。

7

 

2022/04/29 04:06

投稿

退会済みユーザー
test CHANGED
@@ -148,4 +148,4 @@
148
148
 
149
149
  ---
150
150
 
151
- もしコース一覧が表示できなかったり、権限がない等のエラーが表示された場合は、先生や業者によって、GASからアクセスできないように制限されている可能性が有ります。そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、権限を付与してもらう等してください。
151
+ もしコース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示された場合は、先生や業者によって、GASからアクセスできないように制限されている可能性が有ります。そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、権限を付与してもらう等してください。

6

 

2022/04/29 04:05

投稿

退会済みユーザー
test CHANGED
@@ -56,8 +56,8 @@
56
56
 
57
57
  API と サービスの記述の変換方法については、[このドキュメント](https://developers.google.com/apps-script/guides/services/advanced#how_method_signatures_are_determined)に書かれているとおりです。
58
58
 
59
- 要約すると
59
+ ドキュメント本文やその他ドキュメントに付属のサンプルコードに記載の内容を総合すると
60
- ・『REST リソース: v1.●●.▲▲』の『☆☆』というメソッド に対応するGAS上の関数は、 Classroom.●●.▲▲(☆☆) である。(先頭は全部「Classroom」で始まる)
60
+ ・『REST リソース: v1.●●.▲▲』の『☆☆』というメソッド に対応するGAS上の関数は、 Classroom.●●.▲▲(☆☆) 形式になる。(先頭は全部「Classroom」で始まる)
61
61
  ・パスパラメータは、各関数の引数として指定する(エディタで自動的に候補表示される)。
62
62
  ・クエリパラメータは、パラメータ名をキーとするオブジェクトで指定する。
63
63
  というやり方になります。

5

  

2022/04/29 04:03

投稿

退会済みユーザー
test CHANGED
@@ -57,8 +57,9 @@
57
57
  API と サービスの記述の変換方法については、[このドキュメント](https://developers.google.com/apps-script/guides/services/advanced#how_method_signatures_are_determined)に書かれているとおりです。
58
58
 
59
59
  要約すると
60
+ ・『REST リソース: v1.●●.▲▲』の『☆☆』というメソッド に対応するGAS上の関数は、 Classroom.●●.▲▲(☆☆) である。(先頭は全部「Classroom」で始まる)
60
- ・パスパラメータは、各関数の引数として指定(エディタで自動的に候補表示される)
61
+ ・パスパラメータは、各関数の引数として指定する(エディタで自動的に候補表示される)
61
- ・クエリパラメータは、パラメータ名をキーとするオブジェクトで指定
62
+ ・クエリパラメータは、パラメータ名をキーとするオブジェクトで指定する。
62
63
  というやり方になります。
63
64
 
64
65
  たとえば、質問に記載の「『REST リソース: v1.courses.courseWork』の『list』というメソッド」を使う場合は下記のようにします。

4

 

2022/04/29 03:51

投稿

退会済みユーザー
test CHANGED
@@ -1,5 +1,3 @@
1
- (※手元の環境ではClassroom APIが使えないため、下記は動作確認していません)
2
-
3
1
  素のREST APIを使用するよりも、Google Apps Scriptにもとから備わっている Classroom サービスを利用した方が確実かと思います。
4
2
  https://developers.google.com/apps-script/advanced/classroom
5
3
 
@@ -10,6 +8,44 @@
10
8
  次に、「Google Classroom API」を選択して、右下の「追加」ボタンをクリックします。
11
9
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-28/eb3e43b2-ae91-41f2-8de7-67ee10bcd751.png)
12
10
 
11
+ 次に、左側に並んでいる、歯車のアイコンをクリックし「appsscript.json」マニフェスト ファイルをエディタで表示する」にチェックを入れます。
12
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-29/6077a092-58c5-4ea2-acae-144457d906c5.png)
13
+  
14
+ 次に、エディタに戻り、appsscript.jsonファイルを開きます。
15
+
16
+ そして、appsscript.json に、下記**「oauthScopes」以降を追加**します。
17
+ ```json
18
+ {
19
+ "timeZone": "Asia/Tokyo",
20
+ "dependencies": {
21
+ "enabledAdvancedServices": [
22
+ {
23
+ "userSymbol": "Classroom",
24
+ "version": "v1",
25
+ "serviceId": "classroom"
26
+ }
27
+ ]
28
+ },
29
+ "exceptionLogging": "STACKDRIVER",
30
+ "runtimeVersion": "V8",
31
+ "webapp": {
32
+ "executeAs": "USER_DEPLOYING",
33
+ "access": "ANYONE_ANONYMOUS"
34
+ },
35
+ "oauthScopes": [
36
+ "https://www.googleapis.com/auth/classroom.courses",
37
+ "https://www.googleapis.com/auth/classroom.coursework.me.readonly",
38
+ "https://www.googleapis.com/auth/classroom.profile.emails",
39
+ "https://www.googleapis.com/auth/classroom.profile.photos",
40
+ "https://www.googleapis.com/auth/classroom.rosters",
41
+ "https://www.googleapis.com/auth/classroom.coursework.me",
42
+ "https://www.googleapis.com/auth/classroom.coursework.me.readonly",
43
+ "https://www.googleapis.com/auth/classroom.coursework.students",
44
+ "https://www.googleapis.com/auth/classroom.coursework.students.readonly"
45
+ ]
46
+ }
47
+ ```
48
+  
13
49
  ---
14
50
 
15
51
  コードの書き方について:
@@ -53,6 +89,19 @@
53
89
  const response = Classroom.Courses.CourseWork.list('コースID', options);
54
90
  }
55
91
  ```
92
+  
93
+ ---
94
+ 注)自分がアクセス可能なコース名およびコースIDは、下記のようにして取得できます。
95
+ ```js
96
+ function getCourseInfo() {
97
+ const courses = Classroom.Courses.list().courses;
98
+ courses.forEach(course => {
99
+ console.log(`コース名:${course.name}, ID:${course.id}`)
100
+ });
101
+ }
102
+ ```
103
+ ---
104
+
56
105
  これで、正常にデータが取得できていれば、response にデータ一式が格納されます。
57
106
  どのようなデータが入っているかに関しては、ドキュメントの「レスポンス本文」の項目に書いてあります。
58
107
 
@@ -82,7 +131,7 @@
82
131
  const response = Classroom.Courses.CourseWork.list('コースID', options);
83
132
  const courseWork = response.courseWork;
84
133
  if (!courseWork || courseWork.length === 0) {
85
- console.log('コースワークがないか、有効なコースIDではありません');
134
+ console.log('teratail_1vughhd1dfeus0:コースワークがないか、有効なコースIDではありません');
86
135
  return;
87
136
  }
88
137
  courseWork.forEach(work => {
@@ -95,3 +144,7 @@
95
144
  ---
96
145
 
97
146
  基本的に全部公式ドキュメントに書かれていますので、ドキュメントをきちんと読みさえすれば、質問者さんのやりたいことはできると思います。
147
+
148
+ ---
149
+
150
+ もしコース一覧が表示できなかったり、権限がない等のエラーが表示された場合は、先生や業者によって、GASからはアクセスできないように制限されている可能性が有ります。そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、権限を付与してもらう等してください。

3

 

2022/04/28 11:16

投稿

退会済みユーザー
test CHANGED
@@ -36,14 +36,15 @@
36
36
  ・クエリパラメータとして、courseWorkStates[]、orderBy、pageSize、pageToken の4つがあることが分かります。
37
37
   
38
38
   
39
- たとえば下記のような要件を想定しま
39
+ 質問者さんの書き方だと、やりいこが漠然としているので、たとえば下記のような具体的な要件を想定してみしょう
40
- ```
41
- 要件:
42
- 更新時刻降順にコースワークを取得し、それぞれのタイトルと説明文を表示する。
43
- ```
44
40
 
41
+ > 要件:
45
- 更新時刻降順にコースワークを取得」という処理はドキュメンに書いてあるクエリパラメータのうち、orderBy 使用することで実現できます
42
+ > 更新時刻降順にコースワークを取得それぞれのタイルと説明文表示する。
46
43
 
44
+
45
+ 「更新時刻降順にコースワークを取得」という処理は、ドキュメントに書いてあるクエリパラメータのうち、orderBy を使用することで実現できそうです。
46
+ (下の図は https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list#query-parameters より引用)
47
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-28/1971730c-86dc-446d-a63d-b69882a70b83.png)
47
48
  したがって、第一段階のGASのコードは下記のようになります。
48
49
  (※下記コードのうち、「コースID」の部分は、実在するアクセス可能なコースIDに置き換えてください)
49
50
  ```js

2

 

2022/04/28 11:06

投稿

退会済みユーザー
test CHANGED
@@ -55,7 +55,7 @@
55
55
  これで、正常にデータが取得できていれば、response にデータ一式が格納されます。
56
56
  どのようなデータが入っているかに関しては、ドキュメントの「レスポンス本文」の項目に書いてあります。
57
57
 
58
- 先のページによると、レスポンス本文として
58
+ [先のページのこの部分](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list#response-body)によると、レスポンス本文として
59
59
  ```json
60
60
  {
61
61
  "courseWork": [

1

 

2022/04/28 11:05

投稿

退会済みユーザー
test CHANGED
@@ -18,7 +18,7 @@
18
18
  Classroomサービスの各関数は、APIとほぼ1対1対応していますので
19
19
  基本的に **[APIのヘルプ](https://developers.google.com/classroom/reference/rest)を参照し、それをClassroomサービスの各関数の呼び出しに置き換えて実行していく**というステップになります。
20
20
 
21
- API と サービスの記述の変換方法については、[こ](https://developers.google.com/apps-script/guides/services/advanced#how_method_signatures_are_determined)に書かれているとおりです。
21
+ API と サービスの記述の変換方法については、[このドキュメント](https://developers.google.com/apps-script/guides/services/advanced#how_method_signatures_are_determined)に書かれているとおりです。
22
22
 
23
23
  要約すると
24
24
  ・パスパラメータは、各関数の引数として指定(エディタで自動的に候補表示される)
@@ -27,17 +27,24 @@
27
27
 
28
28
  たとえば、質問に記載の「『REST リソース: v1.courses.courseWork』の『list』というメソッド」を使う場合は下記のようにします。
29
29
 
30
- まず、ブラウザで、APIドキュメントの左側ガイド一覧より、[course.CourseWork -> list](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list)を開きます。
30
+ まず、ブラウザで、**APIドキュメント**の左側ガイド一覧より、[course.CourseWork -> list](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list)を開きます。
31
31
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-28/ff4953fc-d859-49eb-8fc5-d59ab3ca8a29.png)
32
32
   
33
33
   
34
- ドキュメントを見ると
34
+ **ドキュメントを見ると**
35
35
  ・パスパラメータとして、「courseId」
36
36
  ・クエリパラメータとして、courseWorkStates[]、orderBy、pageSize、pageToken の4つがあることが分かります。
37
37
   
38
38
   
39
+ たとえば、下記のような要件を想定します。
40
+ ```
41
+ 要件:
39
- たとえば要件として、クエリパラメータのうち、orderBy を使用して更新時刻降順にコースワークを取得し、それぞれのタイトルと説明文を表示したいと仮定します。
42
+ 更新時刻降順にコースワークを取得し、それぞれのタイトルと説明文を表示す
43
+ ```
44
+
45
+ 「更新時刻降順にコースワークを取得」という処理は、ドキュメントに書いてあるクエリパラメータのうち、orderBy を使用することで実現できます。
46
+
40
- 場合、GASのコード(第一段階)は下記のようになります。
47
+ したがって、第一段階のGASのコードは下記のようになります。
41
48
  (※下記コードのうち、「コースID」の部分は、実在するアクセス可能なコースIDに置き換えてください)
42
49
  ```js
43
50
  function main() {
@@ -84,3 +91,6 @@
84
91
  }
85
92
  ```
86
93
 
94
+ ---
95
+
96
+ 基本的に全部公式ドキュメントに書かれていますので、ドキュメントをきちんと読みさえすれば、質問者さんのやりたいことはできると思います。