私が担任する 3300 クラスの Slack 運用の話を聞いて、5 年生も有志で Slack 運用を開始した。 すると、早速うちの卒研生が週番を表示するアプリを作成した。 さすが若い学生は頭が柔らかい。 面白い取り組みなので、やり方を教わって自分でも作ってみた。 学生の作ったコードは、少し面倒なやり方をしていたので、私なりにアレンジしてみた。 ちなみに、作成した学生に私の修正部分をフィードバックしたら、早速取り入れてバージョンアップしていた。さすがだね。
週番は1週間ごとに3人を割り当てている。 これまでは月曜日にその週の週番の番号を Slack の学級日誌チャンネルに投稿していた。 今回作成したアプリは、これを自動的に投稿するように作成する。 テストのために、以下のコマンドを追加で作成する。
以下、アプリ作成手順を示す。
curl -X POST -H 'Content-type: application/json' --data '{"text":"Hello, World!"}' 「URL」
function postSlack(text){
var url = "Slack の Post URL";//WebhookURL
var options = {
"method" : "POST",
"headers": {"Content-type": "application/json"},
"payload" : '{"text":"' + text + '"}'
};
UrlFetchApp.fetch(url, options);
}
function doPost(e) {
var command = e.parameter.text;
if (/next/i.test(command)) {
nextShuuban();
} else if (/prev/i.test(command)) {
prevShuuban();
} else if (/gomi/i.test(command)) {
postSlack("ゴミが溜まっています。処理をお願いします");
} else if (/stop/i.test(command)) {
stopAuto();
} else if (/start/i.test(command)) {
startAuto();
} else if (/help/i.test(command)) {
var message = ["/shuuban next: 強制的に次の週番に変更します。",
"/shuuban prev: 強制的に前の週番に変更します。",
"/shuuban gomi: ゴミが溜まっていることを週番に報告します。",
"/shuuban start: 週番の自動更新を開始します。",
"/shuuban stop: 週番の自動更新を終了します(長期休業中など)。"
].join("\n");
return ContentService.createTextOutput(JSON.stringify({text: message})).setMimeType(ContentService.MimeType.JSON);
} else{
nowShuuban();
}
return ContentService.createTextOutput("");
}
function getSheet() {
return SpreadsheetApp.getActiveSheet();
}
function getMembers(text) {
var sheet = getSheet();
var values = sheet.getSheetValues(2, 1, 3, 2);
postSlack(text + "\n" + (values.map(function( value ) {
return value.join(' ');
}).join("\n")));
}
function nowShuuban() {
getMembers("現在の週番を表示します。");
}
function nextShuuban() {
var sheet = getSheet();
var lastrow = sheet.getLastRow();
sheet.getRange("A2:B4").moveTo(sheet.getRange("A"+(lastrow+1)));
sheet.deleteRows(2, 3);
getMembers("週番を交代します。");
}
function prevShuuban() {
var sheet = getSheet();
var lastrow = sheet.getLastRow();
sheet.insertRowsAfter(1, 3);
sheet.getRange("A"+(lastrow+1)+":B"+(lastrow+3)).moveTo(sheet.getRange("A2"));
getMembers("週番を元に戻します。");
}
function changeAuto(newValue) {
var sheet = getSheet();
var cell = sheet.getRange("B1");
var autoFlag = cell.getValue();
if (autoFlag == newValue) {
postSlack(["すでに児童更新は止まっています。", "すでに自動更新は動いています。"][autoFlag]);
} else {
cell.setValue(newValue);
postSlack(["自動更新を止めます。", "自動更新を開始します。"][newValue]);
}
}
function startAuto() {
return changeAuto(1);
}
function stopAuto() {
return changeAuto(0);
}
function autoNextShuuban() {
var sheet = getSheet();
var autoFlag = sheet.getRange("B1").getValue();
if (autoFlag == 1) {
nextShuuban();
}
}
このままでは週番の交代はテストスペースに常に表示されてしまう。このため、学級日誌のページにこれらを表示するように変更する必要がある。以下の手順でポストさきを変更した。
これらの作業により、週番の更新が自動化された。 後は長期休業前に「/shuuban stop」、後期が始まったら「/shuuban start」するだけでよい。 また、週番がゴミ捨てをしていないようだったら、「/shuuban gomi」とするようになっている。 ただ、学級日誌を Slack にしてから、清掃報告はかなりちゃんと行われていて、このコマンドを使わなければならない時がほとんどないようだ。
Google Spreadsheet と Slack の連携はかなり面白そうだ。もっと面白いものが作れないか学生と相談してみよう。