スプレッドシート連携の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で無理なく自動化する相談ができます。