公開日
なぜ作ったか:Slack の DM から手元の Claude Code を動かす
手元の PC で動いている Claude Code のセッションに、Slack から話しかけるための MCP channel サーバーを作った。最初の実装からチャンネル対応、ホームタブ、複数セッションまでの 4 日間と、自分の困りごとから生まれた経緯を書く。
はじめに
claude-slack-channel は、Slack のメッセージを手元の PC で動いている Claude Code のセッションに中継する小さなサーバー。Claude の返信も、ファイル書き込みなどの実行許可への回答も、Slack の中で済む。Windows 専用で、MIT ライセンスで公開している。
このシリーズは、このリポジトリを題材に、設計で迷ったことや泥臭い問題解決を書いていく。初回は、なぜ作ったかと、最初の 4 日間で何をしたかをまとめる。
開発は AI(Claude Code)と壁打ちしながら進めている。コードの多くは AI が書いたが、何を作るか、どこまで許すかは自分で決めている。
困りごと
Claude Code に長めの作業を頼むと、途中で実行許可の確認が出て止まる。席に戻るまで、その先が進まない。確認に答えるためだけに PC の前にいるのは流石に無駄すぎる。
スマートフォンから手元のセッションに話しかけ、確認にも答えられれば、この待ち時間は消える。普段から使っている Slack を入口にすれば、新しいアプリを入れずに済む。
ちょうど Claude Code に experimental の channels 機能があった。MCP サーバーがセッションにメッセージを流し込める仕組みで、実行許可の確認も channel 経由で受けられる。これを使えば作れるんじゃないか。
最初の実装(9 月 28 日)
初日に DM 専用の版を動かした。構成は次のとおり。
- Slack 側は Socket Mode。サーバー側から WebSocket を張るので、ポート開放やトンネルは要らない
- 受信したメッセージは、ワークスペース ID とユーザー ID の許可リストで絞ってから Claude に渡す
- Claude は
reply/react/edit_messageの 3 つのツールで Slack に返す - 実行許可は、ボタン付きのメッセージか
yes xxxxx/no xxxxxの返信で答える - 二重起動を防ぐロック、トークンを伏せるログ、deny を優先する権限設定
最初から決めていたのは、Slack からの指示に普段の緩い許可を効かせないこと。Slack のセッションは専用の設定ファイルで起動し、ユーザー設定は読まない。この話は次回に書く。
同じ日に、起動時にプロジェクトを選べるようにし、この PC 固有の設定をリポジトリの外へ出した。公開を前提にしたのは、他の人が clone してそのまま使える形にしておかないと、自分でも環境を作り直せなくなるから。
チャンネル、ホームタブ、複数セッション(9 月 30 日)
2 日目はレビューと修正に充てた。期限切れの実行許可を自動で deny する、どの DM にも配信できなければ deny する、終了時に保留中の確認をすべて deny するなど、安全側に倒す修正が中心。
3 日目に機能を足した。
- チャンネル対応。許可したチャンネルで、ボットへのメンションと、ボットが関わるスレッドへの返信にだけ反応する。最初はチャンネルにいるだけで許可ユーザーの発言すべてに反応していたので、流石にすぐ絞った
- ターミナル側の選択画面を Slack から解除する
!screen。Slack に中継されない画面で止まると、手元に行くしかなかったんだよな - 「今後も許可」ボタン。同じ種類の操作を次回から確認なしで通す。ルールは確認の中身から機械的に作り、自由入力は受け付けない
- アプリのホームタブ。稼働中か、どのフォルダーで動いているかを出す
- 複数セッション。状態ディレクトリと設定ファイルを分けて、プロジェクトごとに別の Slack アプリで並べて起動できる
複数セッションは、2 つ目のアプリを動かしてみて初めて必要になった。起動スクリプトの一時ファイルの置き場が共通で、2 つ目が 1 つ目を上書き。同じ Slack アプリで接続を 2 本張るとイベントが片方にしか届かないのも、このとき知った。
今日まで(10 月 1 日)
今日は hook で Claude Code 側の出来事を Slack に知らせる仕組みと、!status / !restart / !compact を入れた。使用量の上限に達したことや、ターミナル側で入力待ちになっていることに、Slack から気付けるようにするため。
4 日間でコミットは 70 超え。急いで作った分、形だけのテストや、AI の説明を確かめずに書いた README が残っている。直していく過程も、このシリーズで書く。
次回は、実行許可を Slack のボタンで返す設計と、迷ったら deny に倒すという方針について書く。