スプレッドシート連携のSlackボットをGASで作成

スプレッドシート連携のSlackボットをGASで作成

記事
IT・テクノロジー
スプレッドシート連携のSlackボットをGASで作成

中小企業の経営者やフリーランスの皆さん、こんにちは。GASおじです。今日はGoogle Apps Script(以下GAS)を使って、スプレッドシートとSlackを連携させるボットの作り方をお伝えします。無駄なSaaS課金を減らしたいあなたにピッタリの内容ですぜ。


■ なぜSlackボットとスプレッドシート連携が便利なのか?

Slackはコミュニケーションツールとして広く使われていますが、データ管理や集計はスプレッドシートがやっぱり頼りになりますよね。今回紹介するボットは、Slackに送ったメッセージをスプレッドシートに記録し、必要な時にまとめて確認できるようにします。しかも、既存データを消すことなく、新規シートに追加保存する設計なので、安心安全。誤ってデータを消すリスクの心配もありません。

なお、GASはGoogleアカウントの利用枠内で動き、追加の専用SaaS料金は発生しません。ただし、Apps Scriptのquotaや実行上限がありますので、その点はご注意を。


■ 初期設定と必要な権限について

まずはGASプロジェクトを作成し、Slack Appを用意しましょう。

・Google スプレッドシートを作成し、URLを控えておきます。
・Google Apps Scriptで新規プロジェクトを作成し、スプレッドシートIDをコードに埋め込みます。
・Slack APIでBotトークンを取得し、Slack側の権限に「chat:write」や「commands」など必要なものを設定。
・GASプロジェクトにSlack Botトークンをプロパティサービスに保存しておきましょう。
・GASでは「スプレッドシートの編集」「外部サービスへの接続」権限を求められます。初回実行時に認証してください。
・インストール可能なトリガーを設定して、定期的にSlackイベントをポーリングするか、Slackのイベントサブスクリプションを活用します。
個人情報を扱う場合は、保存・送信時に暗号化やアクセス制御を徹底し、不要なデータは保存しない運用が重要です。


■ 入力検証とバックアップを組み込んだSlackボットのコード例

以下はSlackのメッセージを受け取り、スプレッドシートの新しい日時付きシートに一括書き込み(バッチ書き込み)するサンプルです。既存のシートは消さず、新しいシートを作って保存するのでデータの保全もバッチリ。

const SPREADSHEET_ID = 'あなたのスプレッドシートIDをここに';
const SCRIPT_PROPERTIES = PropertiesService.getScriptProperties();

function doPost(e) {
try {
// SlackからのPOSTリクエストをJSONとしてパース
const params = JSON.parse(e.postData.contents);

// 入力検証:テキスト必須、長さ制限を設ける
if (!params.text || params.text.length > 300) {
return ContentService.createTextOutput(JSON.stringify({ text: 'メッセージが不正です。300文字以内で入力してください。' })).setMimeType(ContentService.MimeType.JSON);
}

// 現在日時で新しいシート名を作成
const timestamp = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss');
const sheetName = `SlackLog_${timestamp}`;

const ss = SpreadsheetApp.openById(SPREADSHEET_ID);
const newSheet = ss.insertSheet(sheetName);

// ヘッダー行を設定
newSheet.appendRow(['受信日時', 'ユーザー名', 'メッセージ']);

// バッチ書き込み用の2次元配列を作成
const data = [];
data.push([timestamp, params.user_name || '不明', params.text]);

// 2行目にデータをセット
newSheet.getRange(2, 1, data.length, data[0].length).setValues(data);

// 成功レスポンス
return ContentService.createTextOutput(JSON.stringify({ text: 'メッセージを記録しました!' })).setMimeType(ContentService.MimeType.JSON);

} catch (error) {
// エラー時のレスポンス
return ContentService.createTextOutput(JSON.stringify({ text: 'エラーが発生しました。' })).setMimeType(ContentService.MimeType.JSON);
}
}


■ バックアップ・ロールバックの考え方

このコードは既存シートを消さずに新規シートにデータを書き込みます。これにより、誤ってデータを上書き・削除するリスクがなく、過去のログをいつでも遡れる状態を作れます。

万が一操作ミスがあっても、Googleスプレッドシートのバージョン履歴機能があるので、シート単位での完全な復元も可能です。GASおじはこの機能も推奨しています。


■ コスト削減試算例(仮定)

たとえば、専用のSaaSで同様のSlack連携機能が月額5,000円かかるとします。GASを使えば追加料金なし(Googleアカウントの利用枠内で動作)なので、年間で

5,000円 × 12ヶ月 = 60,000円(年間)

のコスト削減になります。ただし、Apps Scriptの実行上限やAPIリクエスト制限はあるので、大量処理の際は注意してください。


□ まとめ

・Slackのメッセージをスプレッドシートに記録するボットをGASで簡単に作成可能
・既存データは消さず、新規作成シートに保存する設計で安全
・入力検証、バッチ処理、バックアップを備えて運用に安心感
・Googleアカウントの利用枠内で動作し、追加のSaaS料金は不要
・初期設定や権限の取り扱いに注意し、個人情報保護も忘れずに
GASを活用して業務効率化とコスト削減を進めてみてくださいね。

■ GASの相談や導入サポートを見たい方へ

この記事と近い作業をGoogleシートやGASで整えたい方は、Gasおじのココナラ出品一覧もご覧ください。

■ 関連サービス

GASおじのココナラ出品一覧
日々の記録、確認、通知、投稿準備などを、GoogleスプレッドシートとGASで無理なく自動化する相談ができます。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す