はじめに
1時間に1度サイトの監視行い、サイトがダウンしている場合にSlackに通知が来るGASを作成しました。
とても簡単に作成できて手順としては下記の3STEPです。
- サイトを監視するGASを作成
- トリガーを利用してGASを定期実行する
- 結果をSkackに通知する
順番に説明していきます。
1. サイトを監視するGASを作成
まず、GAS(Google App Script)を開きます。
手順は、「Google Drive」 → 「新規」 → 「その他」 → 「Google App Script」です。
GASが開けたら、下記コードをコピペします。
function main() {
var url = "監視したいサイトのURL";
var response = UrlFetchApp.fetch(url, {
muteHttpExceptions: true // 例外処理を除外している
});
var response_code = response.getResponseCode(); //サイトの返答コード。正常時は200。
if(response_code == 200) {
Logger.log('正常に動作しています');
} else {
Logger.log('サイトが落ちています。')
};
}
上部のタブから再生ボタンを押すとGASを実行することができます。
*実行する時に権限の許可を求められるので、流れに合わせて許可してください。
⌘command
+ Enter
を押すと実行結果のログをみることができます。
2. トリガーを利用してGASを定期実行する
次は、作成した関数を定期実行していきます。
定期実行にはトリガーを使います。
手順は、「時計マークを押す(再生ボタンの横)」 → 「右下のトリガーの追加」 でトリガーの設定ができます。
設定する際は、「実行する関数を選択」で、コードの関数の名前と同じになっていることを確認ください。(今回の場合はmain()になります。)
GASトップのマイトリガーをみて、今設定したトリガーがでてきてたら定期実行の設定完了です。
3. 結果をSkackに通知する
次にSlackとの連携を行います。
今回は「Incoming WebHooks」をいうアプリを使って実装していきます。
「Incoming WebHooks」の導入に関しては、こちらの記事がわかりやすく説明されていたので、こちらを参考にしてください。
GAS超入門⑤ - Slackに通知してみよう
コードの全体像は下記のようになります。
function main() {
var url = "サイトのURL";
var slack_url = "SlackでコピーしたURL";
var user_name = "サイト監視"; //Slackで通知する際の名前
var icon = ":scream"; // Slackで通知する際の絵文字
var message = ""; // 通知の文
var response = UrlFetchApp.fetch(url, {
muteHttpExceptions: true
});
var response_code = response.getResponseCode();
// サイトが落ちてる時だけ通知するように200以外がかえってきた時の処理のみにしています
if(response_code != 200) {
message = "<!channel> サイトが落ちています";
// Slackに通知するためにJSONにする
var jsonData = {
"username": user_name,
"icon_emoji": icon,
"text": message
};
var payload = JSON.stringify(jsonData);
// Slackに通知する際のオプションを指定
let options = {
"method": "post",
"conyentType": "application/json",
"payload": payload
};
// Slackに送る
UrlFetchApp.fetch(slack_url, options);
};
}
終わりに
最近、GASを使っているという声がちらほら上がっているので、少し触ってみたいと思い開発してみました。
触ってみた所感としてはJSのように簡単にかけて、学習コストは低いと感じました。
また、学習コストが低いにもかかわらず、幅広いことをできそうだと感じたので、これから少しずつ触ってみたいと思いました。
参照
サーバーを用意しなくてもプログラムを実行できる無料サービス
【初心者向け】GASを使ってSlackへ自動通知
GAS超入門⑤ - Slackに通知してみよう