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

GASSlackスプレッドシート
スプレッドシート連携のSlackボットをGASで作成のサムネイル

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

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


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

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

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


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

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

  1. Google スプレッドシートを作成し、URLを控えておきます。
  2. Google Apps Scriptで新規プロジェクトを作成し、スプレッドシートIDをコードに埋め込みます。
  3. Slack APIでBotトークンを取得し、Slack側の権限に「chat:write」や「commands」など必要なものを設定。
  4. GASプロジェクトにSlack Botトークンをプロパティサービスに保存しておきましょう。
  5. GASでは「スプレッドシートの編集」「外部サービスへの接続」権限を求められます。初回実行時に認証してください。
  6. インストール可能なトリガーを設定して、定期的に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おじラボで500ツール使い放題 →