slack-gas-simple-bot は、Google Apps Script (GAS) を使用して構築されたシンプルなSlackボットです。Slack Events APIと連携し、メンション(@bot_name)に反応して基本的なコマンドを処理します。
サーバーレスで動作し、Googleのインフラストラクチャ上でホストされるため、独自のサーバーを管理する必要がありません。
- 🚀 サーバーレス: Google Apps Scriptで動作するため、サーバー管理不要
- 💬 メンション対応: Slackワークスペース内でボットにメンションすると反応
- 🎯 シンプルなコマンド: hello, help, timeなどの基本コマンドをサポート
- 🔄 オウム返し機能: キーワード以外のメッセージをそのまま返す
- 🔐 セキュアな設定: スクリプトプロパティを使用したトークン管理
- ⚡ 簡単デプロイ: GASのWebアプリとして簡単にデプロイ可能
| 技術 | 用途 |
|---|---|
| Google Apps Script | バックエンドロジック |
| Slack Events API | Slackとの連携 |
| Slack Bot Token | API認証 |
- Google Apps Script にアクセス
- 「新しいプロジェクト」をクリック
- プロジェクト名を
slack-gas-simple-botに設定
code.gsファイルにこのリポジトリのcode.gsの内容をコピーappsscript.jsonの設定を確認・適用
- Slack API にアクセス
- 「Create New App」→「From scratch」を選択
- App名とワークスペースを指定して作成
「OAuth & Permissions」ページで以下のスコープを追加:
app_mentions:read- メンションを読み取るchat:write- メッセージを送信する
- 「OAuth & Permissions」ページで「Install to Workspace」をクリック
- 承認後、
Bot User OAuth Token(xoxb-で始まる)をコピー
- GASエディタで「デプロイ」→「新しいデプロイ」を選択
- 「種類の選択」で「ウェブアプリ」を選択
- 以下の設定を行う:
- 説明: 任意の説明(例: "v1.0")
- 実行ユーザー: 自分
- アクセスできるユーザー: 全員
- 「デプロイ」をクリックし、ウェブアプリのURLをコピー
- GASエディタで「プロジェクトの設定」(⚙アイコン)をクリック
- 「スクリプト プロパティ」タブで以下を追加:
| プロパティ名 | 値 |
|---|---|
SLACK_BOT_TOKEN |
xoxb- で始まるBot User OAuth Token |
WEBHOOK_SECRET |
(任意)署名検証用のSigning Secret |
- Slack Appの設定ページで「Event Subscriptions」を開く
- 「Enable Events」をオンにする
- Request URLにGASのウェブアプリURLを入力
- URL検証が成功したら、「Subscribe to bot events」で以下を追加:
app_mention- ボットがメンションされたとき
- 「Save Changes」をクリック
変更を保存した後、必要に応じてSlack Appをワークスペースに再インストールします。
Slackワークスペース内で、ボットをメンションして以下のようにメッセージを送信します:
@bot_name hello
@bot_name help
@bot_name time
実際のSlackでの動作例:
| コマンド | 説明 | 例 |
|---|---|---|
hello / hi |
挨拶を返す | @bot_name hello → Hello! |
help |
利用可能なコマンド一覧を表示 | @bot_name help |
time |
現在時刻を返す | @bot_name time → Current time is: ... |
| その他 | キーワード以外のメッセージはオウム返し | @bot_name こんにちは → こんにちは |
以下のスクリプトプロパティをGASで設定してください:
SLACK_BOT_TOKEN: xoxb-xxxxxxxxxxxx-xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx
WEBHOOK_SECRET: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (任意)
⚠️ 注意: トークンやシークレットは絶対にGitリポジトリにコミットしないでください。
- トークン管理: Slack Bot TokenはGASのスクリプトプロパティで安全に管理
- 署名検証:
WEBHOOK_SECRETを使用してリクエストの署名検証を実装可能(現在はコメントアウト) - アクセス制御: GASのデプロイ設定で適切なアクセス権限を設定
commands オブジェクトに新しいキーワードと関数を追加することで、簡単に新しいコマンドを追加できます:
// コマンドをオブジェクトとして定義
const commands = {
'hello': () => 'Hello!',
'hi': () => 'Hello!',
'help': () => 'Available commands: hello, help, time, weather',
'time': () => 'Current time is: ' + new Date(),
'weather': () => 'Today is sunny!', // 新しいコマンドの例
};
function processMessage(text) {
// 1. 最初にメンションを除去
const cleanText = text.replace(/<@[A-Z0-9]+>/g, '').trim();
const lowerText = cleanText.toLowerCase();
// 2. コマンドオブジェクトをループしてキーワードをチェック
for (const keyword of Object.keys(commands)) {
if (lowerText.includes(keyword)) {
return commands[keyword]();
}
}
// 3. 一致するコマンドがなければ、クリーンなテキストをオウム返し
return cleanText;
}この設計により、以下の利点があります:
- メンション部分を除去してからキーワード判定するため、誤認識を防ぎます
- コマンドの定義が一箇所にまとまり、追加や修正が容易です
プルリクエストや issue の作成を歓迎します!改善提案やバグ報告があれば、お気軽にお知らせください。
このプロジェクトはMITライセンスの下で公開されています。
Made with ❤️ using Google Apps Script