バイブコーディングでSlack bot作り方を試した話

バイブコーディングでSlack bot作り方を試した話

バイブコーディングでSlack bot作り方を調べると、「Bolt」「Socket Mode」「トークン」と知らない言葉が次々に出てきて、手が止まっていませんか。

結論から言うと、「毎朝決まったメッセージを投稿したい」くらいの用途なら、最初はbotらしい会話機能を作らず、Incoming Webhookで1件投稿するだけのスクリプトから始めるのが一番の近道でした。この記事では、Claude Codeに作らせたスクリプトと、そのまま貼れるプロンプトを紹介します。

先に正直にお伝えしておくと、今回実際に試せたのは「スクリプトの作成」と「Slackにつながない模擬サーバーでの動作確認」までです。実際のSlackワークスペースへの投稿と、毎朝の定期実行はまだ試せていません。その部分は調査ベースで書いています。

結論:バイブコーディングでのSlack bot作り方は「1件投稿」から始める

一言で言えば、最初は「話しかけると返事をするbot」ではなく、決まった文を1回投稿できるだけの小さなプログラムを作ります。Slack botには大きく2種類の作り方があるからです。

作り方 できること 難しさ
Incoming Webhook 決まったチャンネルにメッセージを送る(一方通行) 低い。URLを1つ発行するだけ
Bolt for Python など メンションへの返信、ボタン操作など双方向のやりとり 高め。管理する秘密情報や設定が増える

「毎日同じメッセージを送るのをやめたい」という目的なら、一方通行で十分です。

双方向のbotは公式のBolt for Pythonドキュメントが入口ですが、今回は扱いません。

プログラムを書く前に:Slackの標準機能で足りないか確認する

実はSlackには、コードを書かずに定期メッセージを送れる仕組みもあります。

  • **リマインダー機能**:「毎週金曜16時に◯◯」のような繰り返し通知を設定できる
  • **ワークフロービルダー**:日時をトリガーにメッセージを送るワークフローを作れる

ただし、ワークフロービルダーで使える機能や条件は、Slackのプランや管理者の設定によって変わる可能性があります。利用前にSlackヘルプセンターのワークフロービルダーガイドで、ご自身の環境で使えるかを確認してください(2026年10月時点の調査ベース)。

標準機能で足りるなら、それが一番手軽です。私がスクリプトを選んだのは、将来「スプレッドシートの内容を読んで投稿する」といった拡張をしたかったからです。

Slack側の下準備(ここは人がやる手続き)

Incoming Webhookを使う場合、Slack側の操作は次の流れです(2026年10月時点のSlack公式ドキュメントより)。ここはClaude Codeには代行できません。

1. Slack APIで新しいアプリを作成する

2. アプリ設定の「Incoming Webhooks」を開き、有効化する

3. 「Add New Webhook to Workspace」から投稿先チャンネルを選ぶ

4. 発行された `https://hooks.slack.com/services/…` 形式のURLを控える

会社のワークスペースでは、アプリの追加に管理者の承認が必要な場合があります。勝手に進めず、まず管理者に確認しましょう。

そして一番大事な注意点です。このWebhook URLは、知っている人なら誰でも投稿できる「秘密の鍵」です。 公式ドキュメントにも、公開リポジトリなどに載せないこと、漏れたURLはSlackが検出して無効化することが書かれています。コードに直接書かず、環境変数で渡すのが基本です。`.env` ファイルをGitに含めない設定は「.gitignoreの自動生成記事」でも解説しています。

Claude Codeに貼るプロンプト

Slack側の準備ができたら、ターミナルで作業用フォルダを作って移動し、Claude Codeを起動します(フォルダ名は一例です)。


mkdir slackbot-test
cd slackbot-test
claude

起動したら、次のプロンプトを貼ります。


Slackの指定チャンネルに、決まったメッセージを1件投稿するPythonスクリプトを作りたいです。

目的: 毎朝手作業で送っている定型メッセージを、コマンド1つで送れるようにする
対象範囲: 今いるフォルダの中に post_message.py を新規作成する。既存ファイルには触らない
条件:
- SlackのIncoming Webhookを使う
- Webhook URLはコードに直接書かず、環境変数 SLACK_WEBHOOK_URL から読み込む
- 環境変数が未設定のときは、わかりやすいエラーを出して終了する
- 実際には送信せず内容だけ表示する --dry-run オプションを付ける
- 可能なら追加ライブラリなし(標準ライブラリのみ)で作る
- 本物のSlackに送らずに動作確認できる方法も提案する
- ライブラリのインストールが必要になった場合は、sudoを使わず、実行前にコマンドを提示して私の確認を待つ

進め方:
- いきなり実装せず、まず作成するファイル一覧と処理の流れを提示してください。私が確認してから実装してください
- ファイルの上書き・削除をする場合は、実行前に対象ファイル一覧と差分を表示して、私の確認を待ってください
- 不明点は推測せず、確認事項として列挙してください
- テストできていない部分があれば、正直に教えてください

ポイントは「本物のSlackに送らずに確認する方法」を頼んでいることです。本番チャンネルに試し打ちすると、同僚に謎のメッセージが届いてしまいます。

実際に試してわかったこと

この記事のために、上と同じ条件でClaude Codeにスクリプトを作ってもらいました(macOS、Python 3.14の環境。Python 3が入っていない場合は、まずインストール方法をClaude Codeに聞いてください)。できあがったのは30行ほどのファイルで、標準ライブラリだけで動くものでした。

動作確認は次の3パターンで行いました。

1. 環境変数を設定せずに実行 → 「SLACK_WEBHOOK_URL が未設定です」と表示されて終了

2. `–dry-run` で実行 → 送信予定のメッセージだけが表示された

3. 自分のパソコン内に立てた模擬サーバーに向けて実行 → 「status=200 body=ok」が返った

3番目は、Slackの代わりに「受け取ったら ok と返すだけ」の小さなサーバーを手元で動かす方法です(Slack公式のPython SDKドキュメントでも、成功時は `ok` が返る例になっています)。

実行コマンドはこんな形です(URLはダミーです)。


export SLACK_WEBHOOK_URL="https://hooks.slack.com/services/XXXX/XXXX/XXXX"
python3 post_message.py --dry-run

`–dry-run` を外して実行すると、Webhook URLを発行したときに選んだチャンネルへ実際に投稿されます。初回は必ず、自分しかいないテスト用チャンネルのURLで試してください。

なお、上の `export` はmacOS/Linuxの書き方です。Windowsでは設定方法が異なるので、「Windowsでの環境変数の設定方法も教えて」とClaude Codeに聞いてみてください。

まだ試せていないこと・つまずきそうな点

正直に書くと、次の2つはまだ試せていません。

1. 本物のワークスペースへの投稿

公式ドキュメントによると、アーカイブ済みチャンネルなどでは投稿が拒否されるケースがあります。私もまずはテスト用チャンネルで試す予定です。

2. 毎朝の自動実行

「毎朝9時に自動で送る」には、macOSならcronやlaunchdといった定期実行の仕組みが必要です。ただ、パソコンがスリープしていると動かないなど、ローカル実行ならではの制約があります。常時動かすならクラウドで実行する方法もあるようですが、まだ調べている段階です。

つまり今の状態は「コマンド1つで送れる」半自動化までで、完全自動化ではありません。定期実行まで進んだら、この記事に追記するつもりです。

まとめ

  • バイブコーディングでのSlack bot作り方は、まず「1件投稿するだけ」から始めると挫折しにくい
  • 定型メッセージならIncoming Webhookで十分。双方向が必要になったらBoltを検討する
  • コードを書く前に、Slackのリマインダーやワークフロービルダーで足りないか確認する
  • Webhook URLは秘密情報。環境変数で渡し、Gitに含めない
  • 本番チャンネルに送る前に、`–dry-run` や模擬サーバーで確認する

毎日の繰り返し作業は、バイブコーディングの一番いい題材です。LINEで試した話は「バイブコーディングでLINE bot作り方を試した話」、短時間でアプリの原型を作った話は「バイブコーディングで1時間でアプリの原型を作った」にまとめています。

Claude Codeでの実践を、手を動かしながら学べるWebアプリも公開準備中です(app.maahsachi.com 予定)。公開したらこのブログでお知らせします。

maah

この記事を書いた人

maah

非エンジニア。日々の業務にClaudeを取り入れた実体験を、初心者の目線で発信しています。