1 目的
Google Classroomは、一般にはあまり馴染みがないかもしれませんが、学校でよく使われているGoogleアプリケーションです。全校のclassroom、たくさんのclassroomに同じ連絡事項を投稿したいことがあるかもしれません。同じ投稿を手作業で何個もするのは面倒くさいですよね。そこで、Google apps Scriptで、複数のclassroomに同じ連絡事項を投稿するものを作ってみました。スプレッドシートのデータを元に連絡事項を投稿するコンテナバインドのスクリプトです。
2 データのスプレッドシート
データのシートが2つあります。
シートmyclasslist2に、クラス名と クラスルームID(courseId)が入っています。これは、【GAS】Google ClassroomのcourseId等一覧を取得するで作成したシートを元に作ると良いと思います。(例示しているcourseIdはランダムな数字で実在のものとは関係ありません。)
シートannounceに、メッセージとリンクURLを入力します。メッセージはセルB2、リンクはセルB3に入力します。リンクを添付しない場合はB3は空欄として下さい。メッセージ本文中にURLを書けばクラスのストリームでの表示はハイパーリンクとなります。
3 スクリプト
function postAnnounce() {
//シートからclassroomのデータを読み取る
const myspreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const mysheet1 = myspreadsheet.getSheetByName('myclasslist2');
const mydata1 = mysheet1.getRange(2, 1, mysheet1.getLastRow() - 1, 2).getValues();
//シートからメッセージとURLのデータを読み取る
const mysheet2 = myspreadsheet.getSheetByName('announce');
const mymessage = mysheet2.getRange('B2').getValue();
const myurl = mysheet2.getRange('B3').getValue();
//各クラスに対して連絡事項を投稿
for (let i = 0; i < mydata1.length; i++) {
let className = mydata1[i][0];
let courseId = String(mydata1[i][1]);
try {
//連絡事項を作成
let myannouncement = {
text: mymessage
}
if (myurl !== '') {
myannouncement.materials = [{ link: { url: myurl } }];
}
//連絡事項を投稿
Classroom.Courses.Announcements.create(myannouncement, courseId);
Logger.log('連絡事項がクラス "' + className + '" に投稿されました。');
} catch (error) {
Logger.log('クラス "' + className + '" への投稿中にエラーが発生しました: ' + error.message);
}
}
}
クラスルームのID(courseId)は数字なので、スプレッドシートに入ったcourseIdは特に設定しなければ数値型になってしまうのですが、courseIdは文字列型として使いたいので、String()で文字列型にしています。最初そのことを忘れていて数値型で扱ったのですが、このスクリプトは問題なく動きました。courseIdは数値型でもいけるのか?と思い、他の、ユーザーをclassroomに招待するスクリプトで試してみたらそちらはエラーになりました。courseIdは文字列型で使用することにしておいた方が無難なようです。