“中級者向け実践:IT企業でのGAS API連携によるリアルタイムデータ収集とSlack通知(チーム利用)”

中級者向け実践:IT企業でのGAS API連携によるリアルタイムデータ収集とSlack通知(チーム利用)

本記事では、IT企業におけるチーム利用を想定し、Google Apps Script(GAS)を用いて外部APIからリアルタイムデータを収集し、Slackに通知するシステム構築について、中級者向けに解説します。特に、API連携、リアルタイム処理、チームでの利用を考慮した設計に焦点を当てます。

導入

IT企業では、様々な外部サービスからデータを収集し、分析や業務効率化に役立てることが重要です。GASを用いることで、API連携を比較的容易に実現し、リアルタイムに近い形でデータを収集できます。また、収集したデータをSlackに通知することで、チーム内での情報共有をスムーズに行うことができます。

システム概要

本システムは、以下の要素で構成されます。

  • API連携:外部APIからデータを取得します。
  • データ処理:取得したデータを必要な形式に変換します。
  • Slack通知:処理後のデータをSlackに送信します。
  • トリガー設定:定期的にスクリプトを実行するためのトリガーを設定します。

チーム利用を考慮し、設定情報をスプレッドシートで管理することで、複数メンバーでの運用を容易にします。

詳細な説明

API連携

まずは、連携するAPIを選定します。ここでは例として、JSONPlaceholderという無料のAPIを使用します。このAPIは、ダミーデータを提供しており、テストに最適です。

GASでAPIを呼び出すには、UrlFetchApp.fetch()メソッドを使用します。このメソッドは、指定されたURLからデータを取得し、HTTPレスポンスを返します。

function fetchDataFromAPI() {
const url = \"https://jsonplaceholder.typicode.com/todos/1\";
const response = UrlFetchApp.fetch(url);
const json = response.getContentText();
const data = JSON.parse(json);
return data;
}

データ処理

取得したデータはJSON形式であるため、JSON.parse()メソッドでJavaScriptオブジェクトに変換します。必要に応じて、データのフィルタリングや変換を行います。例えば、特定の条件を満たすデータのみを抽出したり、データの形式をSlackへの通知に適した形に変換したりします。

function processData(data) {
// 例:完了していないタスクのみを抽出する
if (data.completed === false) {
return data.title;
} else {
return null;
}
}

Slack通知

Slackへの通知には、Incoming Webhooksを使用します。まず、SlackワークスペースでIncoming Webhookを設定し、Webhook URLを取得します。次に、GASからUrlFetchApp.fetch()メソッドを使用して、Webhook URLにデータをPOSTします。

function sendToSlack(message) {
// スプレッドシートからWebhook URLを取得
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName(\"設定\");
const webhookUrl = sheet.getRange(\"B1\").getValue();

const payload = {
\"text\": message
};
const options = {
\"method\": \"post\",
\"contentType\": \"application/json\",
\"payload\": JSON.stringify(payload)
};
UrlFetchApp.fetch(webhookUrl, options);
}

トリガー設定

GASのトリガーを設定することで、スクリプトを定期的に実行できます。トリガーは、GASエディタの「トリガー」メニューから設定できます。例えば、1時間ごとにスクリプトを実行するように設定したり、特定の日時に実行するように設定したりできます。

//時間ベースのトリガーで実行される関数
function main() {
const data = fetchDataFromAPI();
const message = processData(data);
if (message) {
sendToSlack(message);
}
}

実用的なコード例

以下は、上記の内容をまとめた、より実用的なコード例です。このコードは、JSONPlaceholder APIからデータを取得し、完了していないタスクがある場合にSlackに通知します。

function fetchDataFromAPI() {
const url = \"https://jsonplaceholder.typicode.com/todos/1\";
try {
const response = UrlFetchApp.fetch(url);
const json = response.getContentText();
const data = JSON.parse(json);
return data;
} catch (e) {
console.error(\"APIリクエストエラー: \" + e);
return null;
}
}

function processData(data) {
if (!data) return null;
if (data.completed === false) {
return `未完了タスク: ${data.title}`;
} else {
return null;
}
}

function sendToSlack(message) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName(\"設定\");
const webhookUrl = sheet.getRange(\"B1\").getValue();

if (!webhookUrl) {
console.error(\"Webhook URLが設定されていません\");
return;
}

const payload = {
\"text\": message
};
const options = {
\"method\": \"post\",
\"contentType\": \"application/json\",
\"payload\": JSON.stringify(payload)
};
try {
UrlFetchApp.fetch(webhookUrl, options);
} catch (e) {
console.error(\"Slack送信エラー: \" + e);
}
}

function main() {
const data = fetchDataFromAPI();
if (data) {
const message = processData(data);
if (message) {
sendToSlack(message);
}
}
}

設定シートの準備:

スプレッドシートに「設定」という名前のシートを作成し、B1セルにSlackのIncoming Webhook URLを入力してください。

応用例や活用シーン

  • リアルタイム株価通知:株価APIと連携して、特定の株価に達した場合にSlackに通知する。
  • サーバー監視:サーバーの稼働状況を監視し、異常が発生した場合にSlackに通知する。
  • エラーログ監視:エラーログを監視し、特定のエラーが発生した場合にSlackに通知する。

チーム利用のための設計

チームで利用する場合、以下の点を考慮すると、より効率的な運用が可能です。

  • 設定情報の共有:APIキーやWebhook URLなどの設定情報をスプレッドシートで管理し、チームメンバー間で共有する。
  • エラーハンドリング:エラーが発生した場合に、エラー内容をSlackに通知するようにする。
  • ログ記録:スクリプトの実行ログをスプレッドシートに記録し、問題発生時の原因究明に役立てる。
  • バージョン管理:GASのバージョン管理機能を利用して、スクリプトの変更履歴を管理する。

まとめ

GASとAPI連携を組み合わせることで、様々なリアルタイムデータ収集とSlack通知システムを構築できます。チームでの利用を考慮した設計を行うことで、情報共有をスムーズにし、業務効率化に貢献できます。本記事で紹介した内容を参考に、ぜひGASを活用してみてください。