どうもエンジニア2年目を迎える元教員です。
10月に実施される「情報処理技術者検定」を受検する予定なのですが、
学習時間がちゃんと確保できてへん!!
基本は夜寝る前に勉強をしていました。
しかし最近はタスク優先になってしまったり寝てしまったり・・・
そこで
- 強制的に朝やろう
- 皆にやっているアピールをしよう(人の目がないとサボる)
結果、
指定した「応用技術者試験ドットコム」の問題URLをGASで取得し、Slackへ通知するbotを作成する
にしました。
非エンジニア、初学者にも優しい内容となっております。
ぜひお試しあれ。。。
完成形はこちら
毎朝5時に問題のURLが通知されます。
スプレッドシートの記入
slackへ通知する日付をA列に、載せたいURLをB列に書きます。
こちらのURLについては自動でスクレイピングする方法があります。
しかし現時点では手入力をしています。
SlackのIncoming WebHooksの登録
まずは通知をするslackチャンネルでIncoing WebHooksの設定をする必要があります。
var postUrl = 'https://hooks.slack.com/services/**********';
var username = 'morningStudybot'; // 通知時に表示されるユーザー名
var icon = ':hatching_chick:'; // 通知時に表示されるアイコン
ここまでが基本設定となります。
slackに投函するまで
スプレッドシートから情報取得
Function myFunction() {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // スプレッドシート
const sheet = spreadsheet.getActiveSheet(); // シート
const activeCell = sheet.getActiveCell(); // セル
var date = new Date();
let now = Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy/MM/dd');
let URL = '';
for(var i=3; i<10000000; i++){
let Notificationdate = Utilities.formatDate(sheet.getRange(i,1).getValue(), 'Asia/Tokyo', 'yyyy/MM/dd');
if(datee == now){
URL = sheet.getRange(i,2).getValue();
break;
}
}
// 投稿内容
var message = "\本日の朝活問題だよ〜\n"
+ "問題URL:" + URL + "\n"
+ "1日最低5問よ〜" + "\n"
"---------------------------------------------------------------------------------------------------------------------------------\n";
処理内容は簡単です。
やっていることとしては
1.今日の日付を取得
2.A列が今日の日付ならB列からURLを取得
3.URL取得後、messageに表示内容を格納
JSONに変換後Slackで投稿
var jsonData =
{
"username" : username,
"icon_emoji": icon,
"text" : message
};
var payload = JSON.stringify(jsonData);
var options =
{
"method" : "post",
"contentType" : "application/json",
"payload" : payload
};
UrlFetchApp.fetch(postUrl, options);
}
JSON形式に変換し、UrlFetchApp.fetch()メソッドを使って、Slackに投稿します。
指定時間でSlackに投稿するには
GASのトリガー設定では「時間主導型」という設定ができます。しかしこちらは1時間単位でしかできません。
具体的にいうと「午前5時〜午前6時」に設定してしまうと5時何分に実行されるかわからないという問題点が生じます。
今回はピッタリ5時に設定できる方法を紹介します。
やることは以下の2ステップです。
- 5:00に実行するトリガー登録をするスクリプトを毎日午前4~5時に実行
- 5:00になったら処理したいスクリプトが実行
それでは以下の方法で実装していきましょう。
myFunctionメソッドを5時に実行するトリガー
5時に実行するトリガーを以下のように実装しました。
function setTrigger(){
//Dateオブジェクトで実行した時間を取得
let time = new Date();
//setHours,setMinutesでトリガー登録したい時間を設定
time.setHours(05);
time.setMinutes(00);
//newTriggerメソッドで特定日時でトリガー登録
ScriptApp.newTrigger('myFunction').timeBased().at(time).create();
}
これで5時にmyFunctionメソッドが実行されます。
「時間主導型」で以下のようにトリガーを設定
これで今回設定したsetTriggerメソッドが4時〜5時の間に実行されます。
GASは初学者にも優しくDX化の入り口
今回はSlack通知にしましたが、LINEなどのSNSに同様の方法で通知することも可能です。英検など他のテスト対策や情報を通知できます。
また教員時代に連絡ツールとしてClassroomを使っていました。こちらにも類似の方法で通知が可能となります。
特定の時間に通知したいものがあっても
「あ、忘れてた!!」
ってことありませんか?
そういったことの予防策にもなるため、一度自動化に取り組んでみたらいかがでしょうか??
お読みいただき、感謝!!!