前回、LINE Bot 経由で Claude Code を操作する環境を作った話を書いた。スマホから AI に指示を出せるようになって満足していたら、翌日にボットが無反応になった。
前回のおさらい
前回の記事では、LINE Messaging API と Claude Code を繋いで、スマホのトーク画面からサーバー上の AI に指示を出せる環境を作った。外出先でも「ログ見て」「この設定どうなってる?」と話しかければ返答が届く仕組みで、体験としてはかなり快適だった。
今回はその続き——というか、トラブルの話だ。
ボットが黙り込んだ
環境を作った翌日、LINE に話しかけたら返事が来なくなった。前日まで動いていたのに突然の無反応。
最初はサーバー側のプロセスが落ちたと思った。ログを確認すると、Webhook の受信記録はある。Claude Code の呼び出し記録もある。なのに LINE には何も返っていない。
サーバーのログをちゃんと取っておいてよかった。ログがなければ「LINE に届いているのか、サーバーで落ちているのか、返信が失敗しているのか」の切り分けができなかった。
しばらく調べて気づいた。LINE の Messaging API には無料枠の制限があり、月200通を超えると Push Message が送信できなくなる。環境のテストで試し打ちを繰り返していたら、一日で使い切っていた。
LINE 無料枠の壁
LINE の Messaging API 無料プランでは、Push Message が月200通まで。Reply Message はカウント対象外だが、30秒のタイムアウトがあるため Claude Code の返答には使いにくく、Push Message を使っていた。
有料プランは月5,000円(3,000通)から。個人の自宅サーバー用途にしては高いので、継続は断念した。
LINE vs Slack:何が違うか
代替を探す前に、両者の違いを整理した。
| LINE Messaging API | Slack | |
|---|---|---|
| 無料枠のメッセージ数 | Push Message 月200通 | 制限なし |
| 返信のタイムアウト | Reply Token が30秒 | なし(非同期で送れる) |
| Bot の作成 | LINE Developers でチャネル作成 | api.slack.com/apps でアプリ作成 |
| 署名検証 | HMAC-SHA256(必須) | HMAC-SHA256(必須) |
| 個人利用のしやすさ | スマホに入っている分手軽 | アプリ追加が必要だが無料枠が広い |
タイムアウトがない点が特に大きい。Claude Code の応答は数秒〜数十秒かかることがあり、LINE の Reply Token 30秒制限は実運用で何度か引っかかっていた。
Slack に乗り換えた
Slack 自体は使ったことがなかったが、Claude Code に実装方法を聞きながら進めたら、LINE のときとほぼ同じ難度で完成した。
1. Slack App を作成する
api.slack.com/apps から「Create New App」→「From scratch」でアプリを作成。Bot Token Scopes に chat:write と channels:history(またはメッセージ購読に必要なスコープ)を追加して、ワークスペースにインストールする。
控えておく値は2つ。
- Bot User OAuth Token(
xoxb-...):メッセージ送信に使う - Signing Secret:Webhook の署名検証に使う
2. Events API を有効にする
「Event Subscriptions」を ON にして Request URL にサーバーの Webhook エンドポイントを登録。Subscribe to bot events で message.channels を追加する。
3. サーバー側(Node.js)の実装
const express = require('express');
const crypto = require('crypto');
const { execSync } = require('child_process');
const app = express();
app.use(express.json());
// 署名検証(LINE と同じく HMAC-SHA256)
function verifySlackSignature(req) {
const timestamp = req.headers['x-slack-request-timestamp'];
const sig = req.headers['x-slack-signature'];
const base = ;
const expected = 'v0=' + crypto
.createHmac('sha256', process.env.SLACK_SIGNING_SECRET)
.update(base)
.digest('hex');
return crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected));
}
app.post('/slack/events', (req, res) => {
// Slack の URL 検証チャレンジ
if (req.body.type === 'url_verification') {
return res.json({ challenge: req.body.challenge });
}
if (!verifySlackSignature(req)) return res.sendStatus(403);
const event = req.body.event;
if (!event || event.type !== 'message' || event.bot_id) return res.sendStatus(200);
res.sendStatus(200); // Slack には即 200 を返す
// Claude Code を呼び出して結果を返信
try {
const result = execSync(
,
{ cwd: '/path/to/repo', timeout: 120000 }
).toString();
fetch('https://slack.com/api/chat.postMessage', {
method: 'POST',
headers: {
Authorization: ,
'Content-Type': 'application/json',
},
body: JSON.stringify({ channel: event.channel, text: result }),
});
} catch (e) {
console.error(e);
}
});
app.listen(3001);
LINE との大きな違いは res.sendStatus(200) を先に返してから Claude Code を呼び出せる点。Slack はタイムアウトを気にしなくていいので、処理が長引いても問題ない。
この記事は Slack ボット経由で書いた
実は、この記事の下書きそのものが Slack ボットで作成している。流れはこうだ。
Slack でメッセージ送信
│
▼
自宅サーバー(Node.js Webhook)
│
▼
Claude Code CLI(リポジトリ内で実行)
│ scripts/post-draft-slack-article.js を作成
▼
WordPress REST API へ下書き投稿
│
▼
Slack に「下書き作成完了: id=XXXX」と返信
Slack に「Slack 乗り換え記事の下書きを書いてWordPressに投稿して」と送っただけで、Claude Code がスクリプトを書き、WordPress に下書きを投稿し、「完了しました」と Slack に返してきた。乗り換えたその場で乗り換え記事を書くという、少しメタな体験だった。
Slackで記事のメンテをするイメージ

まとめ
- LINE Bot の無料枠(Push Message)は月200通。テストを込みで使うと一日で枯渇する
- ログをちゃんと取っておくとデバッグが格段に楽になる
- Slack は無料枠のメッセージ制限がなく、タイムアウトも気にしなくていいので Claude Code との相性がいい
- Slack への乗り換えは、やってみると LINE と大差ない難度だった
- 乗り換えたその場でこの記事を Slack ボット経由で書いた——ちゃんと使い物になっている