ANTIGRAVITY LABEN
記事一覧/連携・プラグイン
連携・プラグイン/2026-04-02初級

Antigravity で Slack Bot を開発する入門ガイド — Bolt.js × MCP 連携まで

AntigravityでSlack Botを開発する方法をゼロから解説。Bolt.jsのセットアップ、スラッシュコマンド・イベント処理、MCP連携による高度なAI応答まで、実践的なコード例とともに丁寧に説明します。

slackslack-botbolt4integrations20mcp14nodejs3

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 を作成します。

  1. 「Create New App」 をクリック
  2. 「From scratch」 を選択
  3. App 名(例: my-antigravity-bot)とワークスペースを入力して作成

作成後、左メニューの 「OAuth & Permissions」 を開き、以下の Bot Token Scopes を追加します。

  • chat:write — メッセージ送信
  • commands — スラッシュコマンド
  • app_mentions:read — メンション読み取り

スコープ追加後、「Install to Workspace」 でインストールし、Bot User OAuth Tokenxoxb-... 形式)をメモします。

プロジェクトのセットアップ

# プロジェクトディレクトリ作成
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=3000

Signing 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_TOKENSLACK_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 開発の理解

シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

連携・プラグイン2026-05-06
Antigravity × Stripe カスタムMCPサーバー実装ガイド — AIエージェントが課金処理を自律実行する本番設計
Stripe課金処理をAntigravityのAIエージェントに委ねるカスタムMCPサーバーを実装する。サブスクリプション管理・Webhook・マルチテナント対応まで、TypeScriptで本番品質のMCPサーバーを構築する完全実装ガイド。
連携・プラグイン2026-04-10
Antigravity × MCP 統合ガイド — Arcade.dev 7,500+ツール・API 活用術
Antigravity と MCP(Model Context Protocol)を統合し、Arcade.dev のエコシステム(7,500+ツール・API)を AI エージェント開発に活かすための完全ガイド。
連携・プラグイン2026-04-07
Antigravity × MCP エコシステム 2026 完全活用ガイド — サーバー選定・統合・カスタム開発の実践
Model Context Protocol(MCP)エコシステムを Antigravity で活用するための完全ガイド。公式MCPサーバーの選定基準・複数MCPの組み合わせ・カスタムMCPサーバー開発・本番運用のセキュリティまでを網羅します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →