目次
はじめに
GASによるコーディングをする際、spreadsheetやgmail、drive等は基本サービスであるGoogle Workspaceサービス内に含まれているため、書籍も含めて情報が比較的豊富に存在している。その一方でClassroomはAdvanced Googleサービスに含まれるため情報が乏しく、公式マニュアルも現在は使えないメソッドがそのまま書かれていたりと整備が追いついていない状況も見受けられる。ここではそのような状況に鑑み、ClassroomをGASで扱うために必要な基本的な知識を整理していく。
筆者のGAS開発歴は3ヶ月にも満たないため、表現や説明も適切ではない部分が多々あるだろうがご容赦願いたい。
サービスの追加
GASでClassroomに関するものを扱うためには、スクリプトエディタで「Google Classroom API」サービスを追加する必要がある。最新のIDEでは「サービス」→「Google Classroom API」を選択→「追加」で設定可能。
Classroomの一覧を取得
バインドされていないスプレッドシートをGAS内で指定して扱う際にはシートIDを指定する必要があり、IDはそのスプレッドシートを示すURLで確認できる。
残念ながらClassroomでは同じ方法で各コースのIDを知ることができないため、既存のコースに修正を加えるためには、まずコース一覧を取得してコースIDを調べる必要がある。そのための構文は以下の通り。
Classroom.Courses.list()
実際には各コースが多くの情報を含んでいるため、以下のコードでは全てのコースをログで表示できない場合が起こり得る。
function myFunction() {
Logger.log(Classroom.Courses.list());
}
公式ページ(Manage Courses)にある以下のコードを用いれば"コース名(コースID)"の形式で出力されるので活用すると良い。optionalArgsで指定できる項目はMethod: courses.listを参照のこと。
/**
* Lists all course names and ids.
*/
function listCourses() {
let courses = [];
let pageToken = null;
let optionalArgs = {
pageToken: pageToken,
pageSize: 100
};
while (true) {
let response = Classroom.Courses.list(optionalArgs);
courses = response.courses;
if (!pageToken) {
break;
}
}
if (courses.length === 0) {
Logger.log("No courses found.");
} else {
Logger.log("Courses:");
for (course in courses) {
Logger.log('%s (%s)', courses[course].name, courses[course].id);
}
}
}