ADVERTISEMENT

【Googleドキュメント】Apps ScriptでエラーをSlackに通知!障害検知の自動化

【Googleドキュメント】Apps ScriptでエラーをSlackに通知!障害検知の自動化
🛡️ 超解決

Googleドキュメントで業務自動化を進めていると、スクリプトのエラーに気づかずに処理が止まってしまうことがあります。せっかく自動化しても、障害を放置すれば重大なトラブルにつながりかねません。この記事では、Apps ScriptのエラーをリアルタイムでSlackに通知する方法を解説します。これにより、障害を即座に検知して迅速に対応できる仕組みを構築できます。

【要点】Apps ScriptのエラーをSlackに通知する自動化の流れ

  • SlackのIncoming Webhook URLを取得: SlackのワークスペースでWebhookを作成し、通知先チャンネルを指定します。
  • Apps Scriptでエラーキャッチと通知処理を記述: try…catch文でエラーを捕捉し、UrlFetchAppでWebhookにPOSTリクエストを送信します。
  • トリガーでスクリプトを定期実行: 時間主導型トリガーを設定し、定期的に監視処理を実行して障害を検知します。

ADVERTISEMENT

Apps ScriptとSlack連携の仕組み

Apps ScriptはGoogleのサービスを自動化するためのスクリプト環境です。エラーが発生したときに自動的にSlackへメッセージを送る仕組みを実装できます。この仕組みでは、SlackのIncoming Webhookを利用します。Webhookは外部サービスからメッセージを受け取るためのURLで、Apps ScriptのUrlFetchAppクラスを使ってHTTP POSTリクエストを送信します。エラーをキャッチするには、try…catch構文を使用します。catchブロック内でWebhookに通知を送ることで、障害をリアルタイムに把握できます。

Slack通知を設定する具体的な手順

ここでは、エラー通知を設定するための3つのステップを順に説明します。事前にSlackのワークスペース管理者権限があることを確認してください。また、GoogleドキュメントのApps Scriptエディタを開ける状態にしておきます。

1. SlackでIncoming Webhookを作成する

  1. SlackのWebhook管理画面にアクセスする
    SlackのWebhook管理画面(https://api.slack.com/apps)にアクセスし、新しいアプリを作成します。「Create New App」をクリックし、「From scratch」を選択してアプリ名とワークスペースを指定します。
  2. Incoming Webhook機能を有効にする
    作成したアプリの設定画面で「Incoming Webhooks」を選択し、機能をオンにします。「Add New Webhook to Workspace」をクリックし、通知を送信するチャンネルを選んで許可します。
  3. Webhook URLをコピーする
    作成されたWebhook URLをコピーしてメモ帳などに保存します。このURLは後でApps Scriptのコード内で使用します。

2. Apps Scriptでエラー通知コードを記述する

  1. スクリプトエディタを開く
    Googleドキュメントを開き、メニューの「拡張機能」から「Apps Script」を選択します。スクリプトエディタが新しいタブで開きます。
  2. メイン関数とエラー通知関数を作成する
    以下のコードをエディタに貼り付けます。Webhook URLは先ほどコピーしたものに置き換えてください。
    function sendErrorToSlack(errorMessage) {
    var webhookUrl = 'https://hooks.slack.com/services/...'; // ここにURLを入力
    var payload = {
    'text': 'エラーが発生しました: ' + errorMessage
    };
    var options = {
    'method': 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(payload)
    };
    UrlFetchApp.fetch(webhookUrl, options);
    }

    function main() {
    try {
    // ここに監視したい処理を記述
    // 例: ドキュメントの内容をチェックする
    var doc = DocumentApp.openById('ドキュメントID');
    var text = doc.getBody().getText();
    if (text.indexOf('エラー') !== -1) {
    throw new Error('ドキュメントにエラー文字列が見つかりました');
    }
    } catch (e) {
    sendErrorToSlack(e.message);
    }
    }

  3. プロジェクトを保存してテスト実行する
    スクリプトエディタの「保存」アイコンをクリックし、プロジェクト名を適当に付けます。次に、main関数を選択し「実行」ボタンをクリックします。初回は権限の承認画面が表示されるので、許可します。テストとして、意図的にエラーを発生させるコードを入れて実行し、Slackに通知が届くことを確認します。

3. トリガーを設定して定期的に実行する

  1. トリガー設定画面を開く
    スクリプトエディタの左側のメニューから「トリガー」(時計アイコン)をクリックします。「トリガーを追加」ボタンをクリックします。
  2. 実行する関数と時間間隔を指定する
    「実行する関数」で「main」を選択します。「イベントのソース」で「時間主導型」を選択し、「時間ベースのトリガーのタイプ」で「時間ベース」を選択します。「時間の間隔」を希望の頻度(例:1時間おき)に設定します。「保存」をクリックします。
  3. トリガーが正しく動作するか確認する
    トリガー一覧に追加されたことを確認します。必要に応じて、すぐにテスト実行したい場合は、トリガーを一時的に「1分おき」に設定して動作を確認し、その後元の間隔に戻します。

エラー通知設定の注意点

エラー通知の設定にはいくつかの注意点があります。これらを理解しておくことで、安定した運用が可能になります。

Webhook URLが間違っていると通知が届かない

Webhook URLにはスペースや改行が入らないように注意してください。コピーする際に余分な文字が入らないようにし、コード内ではシングルクォートまたはダブルクォートで正しく囲みます。また、URLの末尾にスラッシュが含まれている場合もありますが、そのまま使用して問題ありません。

エラーが多発するとSlackがスパムになる

監視対象の処理で頻繁にエラーが発生する場合、Slackチャンネルが大量の通知で埋まってしまいます。対策として、一定時間内の通知回数を制限するロジックを追加することをおすすめします。例えば、フラグ変数を使って一度通知したら次のトリガー実行まで通知を抑制する方法があります。

トリガーの実行時間制限に注意

Apps Scriptのトリガーには1回あたりの実行時間制限があります(コンシューマアカウントでは6分、Google Workspaceアカウントでは30分)。監視処理が長引く場合は、処理を分割するか、実行間隔を短くして負荷を分散する必要があります。

スクリプトの権限設定が必要

スクリプトがGoogleドキュメントにアクセスするための権限が必要です。初回実行時に承認画面が表示されるので、内容を確認して許可してください。また、スクリプトを別のユーザーと共有する場合、そのユーザーも同様に承認が必要です。

ADVERTISEMENT

通知方法の比較:WebhookとSlack API

方法 概要 設定難易度 カスタマイズ性
Incoming Webhook POSTリクエスト1つでメッセージ送信が完了する
Slack API (chat.postMessage) OAuth認証が必要だが、ボタンや画像などリッチなメッセージが送信できる

まとめ

この記事では、Apps ScriptのエラーをSlackに通知する自動化の手順を解説しました。Webhook URLの取得からコードの記述、トリガー設定までを実践することで、障害を即座に検知できる体制が整います。また、エラー内容をSlackで共有すれば、チーム全体で迅速に対応できます。初めての方でも、ステップに沿って進めれば数十分で設定が完了します。ぜひ、自身のGoogleドキュメントの自動化プロジェクトに組み込んでみてください。


ADVERTISEMENT

📄
Googleドキュメントトラブル完全解決データベースこの記事以外にも、書式・共有・Apps Script・引用など様々な困りごとへの解決策をまとめています。逆引きに活用してください。
この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。