“
中級者向け実践: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を活用してみてください。
“