Slack に積もる小さな繰り返し
定型の問い合わせに手作業で返信する、デプロイ結果を毎回チャンネルに貼り付ける——チームの Slack には、こうした小さな繰り返しが積み重なっています。自作の Bot を一つ置くだけで、その多くを肩代わりさせられます。
AI IDE の Antigravity を使うと、Slack API の仕様調査からコード生成、デバッグまでを対話の流れの中で進められます。環境構築から MCP 連携まで、実際に動く Bot を組み上げる道のりを順を追ってたどっていきます。
この記事で学べること:
- Slack App の作成と Bolt.js のセットアップ
- スラッシュコマンドとイベント API の実装
- Antigravity エージェントを使った高速コード生成
- MCP 連携による高度な AI 応答機能の追加
- よくあるエラーと対処法
対象読者は Node.js の基礎を理解していて、Slack Bot を初めて作る方です。
環境準備 — Slack App の作成
Slack App を作成する
まず Slack API ポータル(api.slack.com/apps) にアクセスし、新しい App を作成します。
- 「Create New App」 をクリック
- 「From scratch」 を選択
- App 名(例:
my-antigravity-bot)とワークスペースを入力して作成
作成後、左メニューの 「OAuth & Permissions」 を開き、以下の Bot Token Scopes を追加します。
chat:write— メッセージ送信commands— スラッシュコマンドapp_mentions:read— メンション読み取り
スコープ追加後、「Install to Workspace」 でインストールし、Bot User OAuth Token(xoxb-... 形式)をメモします。
プロジェクトのセットアップ
# プロジェクトディレクトリ作成
mkdir my-slack-bot && cd my-slack-bot
# npm 初期化と Bolt.js インストール
npm init -y
npm install @slack/bolt dotenv.env ファイルを作成して認証情報を設定します。
# .env(Gitignoreに必ず追加)
SLACK_BOT_TOKEN=xoxb-YOUR_BOT_TOKEN_HERE
SLACK_SIGNING_SECRET=YOUR_SIGNING_SECRET_HERE
SLACK_APP_TOKEN=xapp-YOUR_APP_TOKEN_HERE
PORT=3000Signing Secret は「Basic Information」ページで確認できます。 コードに直接トークンを書き込まないよう必ず
.envと.gitignoreを活用してください。
Antigravity でコードを生成する
ここからが Antigravity の真価が発揮される場面です。プロジェクトを Antigravity で開き、チャットパネルに次のプロンプトを入力します。
Bolt.jsを使ったSlack Botの基本構成を作ってください。
以下の機能を含めてください:
- /hello スラッシュコマンド(チャンネルに挨拶メッセージを返す)
- @メンション対応(メンションに自動返答する)
- Socket Modeを使ったローカル開発対応
.envから認証情報を読み込む構成にしてください。
Antigravity が生成したコードをベースに、以下のような app.js が完成します。
// app.js — Slack Bot エントリポイント
const { App } = require('@slack/bolt');
require('dotenv').config();
const app = new App({
token: process.env.SLACK_BOT_TOKEN,
signingSecret: process.env.SLACK_SIGNING_SECRET,
socketMode: true,
appToken: process.env.SLACK_APP_TOKEN,
port: process.env.PORT || 3000,
});
// ── スラッシュコマンド: /hello ──
app.command('/hello', async ({ command, ack, say }) => {
// コマンドを受け取ったことを Slack に通知(3秒以内に必須)
await ack();
await say({
text: `こんにちは、<@${command.user_id}>さん!Antigravity Bot が起動中です 🚀`,
blocks: [
{
type: 'section',
text: {
type: 'mrkdwn',
text: `こんにちは、<@${command.user_id}>さん!\n*Antigravity Bot* が起動中です 🚀`,
},
},
],
});
});
// ── メンション対応 ──
app.event('app_mention', async ({ event, say }) => {
await say({
text: `<@${event.user}> ご用件をどうぞ!`,
});
});
// ── Bot 起動 ──
(async () => {
await app.start();
console.log(`⚡ Slack Bot 起動完了 (port ${process.env.PORT || 3000})`);
})();Socket Mode を使うことでローカル開発時もトンネルツール不要で動作確認できます。Socket Mode 用のトークンは Slack API ポータルの 「Socket Mode」 メニューから発行できます。
スラッシュコマンドとイベント処理を拡張する
基本構成ができたら、より実用的な機能を追加しましょう。Antigravity のエージェントに「天気情報を返すコマンドを追加して」と指示するだけで、API 呼び出しを含むコードが素早く生成されます。
リアクション絵文字コマンドの追加例
// /remind コマンド — シンプルなリマインダー設定
app.command('/remind', async ({ command, ack, client }) => {
await ack();
// モーダルでリマインダー内容を入力させる
await client.views.open({
trigger_id: command.trigger_id,
view: {
type: 'modal',
callback_id: 'reminder_modal',
title: { type: 'plain_text', text: 'リマインダー設定' },
submit: { type: 'plain_text', text: '設定する' },
blocks: [
{
type: 'input',
block_id: 'reminder_text',
element: {
type: 'plain_text_input',
action_id: 'text_input',
placeholder: { type: 'plain_text', text: '例: MTG資料を準備する' },
},
label: { type: 'plain_text', text: 'リマインド内容' },
},
],
},
});
});
// モーダル送信時の処理
app.view('reminder_modal', async ({ ack, body, view, client }) => {
await ack();
const reminderText = view.state.values.reminder_text.text_input.value;
const userId = body.user.id;
// ユーザーに DM でリマインダー確認を送信
await client.chat.postMessage({
channel: userId,
text: `✅ リマインダーを設定しました: *${reminderText}*`,
});
});このように Antigravity にモーダル構成を任せると、Slack Block Kit の複雑な JSON 構造も自動生成してくれるため開発効率が大幅に向上します。
MCP 連携で AI 応答機能を追加する
Antigravity の MCP 機能を活用すると、Bot に高度な AI 応答能力を持たせることができます。たとえば、ユーザーのメッセージを解析してコンテキストを把握し、適切な情報を返す「AIアシスタントBot」を構築できます。
// MCP サーバーと連携した AI 応答の例(概念コード)
const { Client } = require('@modelcontextprotocol/sdk/client/index.js');
const { StdioClientTransport } = require('@modelcontextprotocol/sdk/client/stdio.js');
// MCP クライアントの初期化
const mcpClient = new Client({ name: 'slack-bot-mcp', version: '1.0.0' }, { capabilities: {} });
app.event('app_mention', async ({ event, say }) => {
const userMessage = event.text.replace(/<@[A-Z0-9]+>/g, '').trim();
try {
// MCP 経由でツールを呼び出す(例: 社内 FAQ データベースを検索)
const result = await mcpClient.callTool({
name: 'search_faq',
arguments: { query: userMessage },
});
await say({
text: result.content[0].text,
thread_ts: event.ts, // スレッドで返答
});
} catch (error) {
await say({ text: `申し訳ありません、処理中にエラーが発生しました。` });
console.error('MCP ツール呼び出しエラー:', error);
}
});カスタム MCP サーバーの詳細な構築手順については、Antigravity × カスタムMCPサーバー構築ガイド で詳しく解説しています。社内データベースや外部 API と Slack Bot を連携させたい方にとって特に参考になる内容です。
よくあるエラーと対処法
エラー1: Missing required field: trigger_id
モーダルを開く処理でこのエラーが出る場合、ack() の呼び出し前にモーダルを開こうとしています。必ず await ack() の後に client.views.open() を呼んでください。
// ❌ 誤り
app.command('/test', async ({ command, client }) => {
await client.views.open({ trigger_id: command.trigger_id, ... }); // ack前はNG
await ack();
});
// ✅ 正しい
app.command('/test', async ({ command, ack, client }) => {
await ack(); // 必ず最初に
await client.views.open({ trigger_id: command.trigger_id, ... });
});エラー2: invalid_auth / not_authed
トークンが正しく読み込まれていないサインです。以下を確認してください。
.envファイルがdotenvより後ではなく前に読み込まれているか- 環境変数名のスペルミス(
SLACK_BOT_TOKENがSLACK_BOT_TOKNEになっていないか) - ワークスペースへの再インストールが必要な場合がある
エラー3: タイムアウト(dispatch_failed)
Slack はコマンドに 3秒以内 の応答を要求します。重い処理(API 呼び出し、DB クエリ)は ack() の後に非同期で行い、respond() または say() で遅延返答する設計にしましょう。
応用 — 本番環境へのデプロイ
ローカル開発が完了したら、本番環境へデプロイします。Slack Bot の本番運用には以下のオプションが一般的です。
- Railway / Render: 環境変数の設定が GUI で簡単、無料枠あり
- Cloudflare Workers: エッジ実行でレイテンシ最小化(HTTP モード推奨)
- Google Cloud Run: コンテナベースで自動スケール
Socket Mode はローカル開発専用です。本番環境では HTTP モードに切り替え、Request URL にエンドポイントを設定してください。
Antigravity に「Cloud Run 向けの Dockerfile と cloudbuild.yaml を生成して」と依頼するだけで、デプロイに必要なファイル一式を自動生成できます。
まとめ
ここではAntigravity を活用した Slack Bot 開発の流れを解説しました。
- Slack App の作成と Bolt.js のセットアップ
- スラッシュコマンド・イベント処理の実装
- Antigravity エージェントによるコード自動生成の活用
- MCP 連携で AI 応答機能を付与する方法
- よくあるエラーとその対処法
Antigravity のエージェントは Slack API の複雑な Block Kit 構造やモーダル設計も自動生成してくれるため、従来より大幅に短い時間でボット開発が完成します。ぜひ自分のチームに合った Slack Bot を作り上げてみてください。
Slack Bot を MCP でさらに高度に拡張したい方には、「Antigravity × カスタムMCPサーバー構築ガイド」 がおすすめです。社内データや外部 API とシームレスに連携するプロダクション品質の実装方法を学べます。
Slack Bot 開発の理解