slackctl について
slackctl は Slack 操作を自動化するコマンドラインツールで、メッセージ、チャンネル、ファイル、検索、Canvas、ユーザーのコマンドを備え、JSON を出力します。ローカルアプリからの認証情報インポートと複数ワークスペースの選択に対応します。
主な機能
- 01メッセージの取得、送信、編集、リアクション
- 02チャンネルとメンバーの管理
- 03ファイルのアップロード、ダウンロード、確認
- 04メッセージとファイルの検索
- 05ローカルアプリからの認証情報インポート
- 06JSON 出力とワークスペース選択
活用シーン
- 01メッセージとスレッドの取得
- 02未読または後で見るメッセージの確認
- 03チャンネルへの投稿やダイレクトメッセージの送信
- 04Slack ファイルの検索と Canvas コンテンツの出力
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ cluas/ slackctl --skill slackctlインストール後、Claude Code で/slackctlを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/commands.mdoutput.mdtargets.md詳細
slackctl による Slack の自動化
slackctl は $PATH 上にある単一バイナリの CLI です。直接実行します(例:slackctl user get @alice)。
インストール
slackctl は実行時の依存関係がない静的バイナリで、macOS、Linux、Windows(amd64 + arm64)で利用できます。
slackctl が $PATH 上に見つからない場合は、現在の OS 用にインストールします。
- macOS / Linux(推奨)— Homebrew:
brew tap cluas/tap
brew install slackctl
- Windows(推奨)— Scoop:
scoop bucket add cluas https://github.com/cluas/scoop-bucket
scoop install slackctl
- Go がインストールされているすべての OS:
go install github.com/cluas/slackctl/cmd/slackctl@latest
- 手動(すべての OS):リリースページからお使いの OS/アーキテクチャ用のアーカイブをダウンロードし、展開して、
slackctl(Windows ではslackctl.exe)をPATHに配置します。
重要:Bash コマンドの書式ルール
Claude Code の権限チェッカーには、手動承認を求めるセキュリティヒューリスティックがあります。コマンドを自動許可するには、次のパターンを避けてください。
- コマンド文字列のどこにも
#を含めないでください。 チャンネル名は#generalではなくgeneralのように指定します。 ''(連続する単一引用符)や""(連続する二重引用符)を使わないでください。 「難読化の可能性あり」チェックが作動します。- フィルタリングには
| jqのみを使ってください。 python3 など、ほかのコマンドは使わないでください。単一引用符のみを使った式(内部に"がないもの)でjqを使うのは安全です。- 正しい例:
slackctl search messages "query" | jq '.messages[] | .ts'
- 正しい例:
||や&&による連結は使わないでください。 複数の slackctl コマンドは、それぞれ別の Bash ツール呼び出しとして実行します。- ファイルへのリダイレクト(
>、>>)は使わないでください。 JSON 出力はファイルに書き込まず、直接処理します。
クイックスタート(認証)
認証の自動検出は macOS、Linux、Windows で動作します。ブラウザーの自動操作は行わず、ローカルアプリから認証情報を直接読み取り、まず Slack Desktop、次に Chrome、最後に Firefox を試します。Cookie の復号はプラットフォームごとに処理されます:macOS Keychain、Linux Secret Service(secret-tool)、Windows DPAPI。
ソースごとのプラットフォーム対応状況:
ソース(auth import-*) | macOS | Linux | Windows |
|---|---|---|---|
import-desktop(Slack Desktop) | ✅ | ✅ | ✅ |
import-chrome | ✅ | ✅ | ✅ |
import-brave | ✅ | ✅ | ✅ |
import-firefox | ✅ | ✅ | ✅ |
注:Linux では、Chrome/Brave/Slack の Cookie の復号に、secret-tool を介してデスクトップのキーリングからキーを読み取ります(libsecret-tools/libsecret をインストールしてください)。キーリングが設定されていない場合は、デフォルトのパスワード peanuts を使用します。Firefox の cookies.sqlite は、すべてのプラットフォームで平文です。
認証情報を利用できない場合は、次のいずれかを実行します。
- Slack Desktop からインポート(macOS/Linux/Windows):
slackctl auth import-desktop
slackctl auth test
- Firefox を使用(macOS/Linux/Windows):
slackctl auth import-firefox
slackctl auth test
- Chrome を使用(macOS/Linux/Windows):
slackctl auth import-chrome
slackctl auth test
- または環境変数を設定します:
export SLACK_TOKEN="xoxc-..."
export SLACK_COOKIE_D="xoxd-..."
export SLACK_WORKSPACE_URL="https://myteam.slack.com"
slackctl auth test
- または手動で追加します:
slackctl auth add --workspace-url https://myteam.slack.com --xoxc xoxc-... --xoxd xoxd-...
slackctl auth test
設定済みのワークスペースを確認します。
slackctl auth whoami
標準的なワークフロー(Slack メッセージの URL がある場合)
- メッセージを1件取得します。
slackctl message get "https://workspace.slack.com/archives/C123/p1700000000000000"
- スレッド全体が必要な場合:
slackctl message list "https://workspace.slack.com/archives/C123/p1700000000000000" --thread-ts 1700000000.000000
チャンネルの最近のメッセージを閲覧する
slackctl message list "general" --limit 20
slackctl message list "C0123ABC" --limit 10
slackctl --attachments message list "general" --limit 20
--attachments はデフォルトで無効です。メッセージ本文が text ではなく添付ファイルに含まれている場合は、指定してください。
未読メッセージを取得する
未読メッセージがあるチャンネルをすべて一覧表示します。
slackctl message unread --limit 20
未読メッセージの実際の内容も取得します。
slackctl message unread --fetch --max-per-channel 5
注:Enterprise Grid では、未読件数を取得する際にエンタープライズ URL を --workspace に指定します。
slackctl message unread --workspace longbridge-group --fetch
後で見るために保存したメッセージを取得する(Later)
ユーザーが保存したメッセージ(Slack の「Later」リスト)を一覧表示します。
slackctl message saved --limit 20
保存したメッセージの実際の内容も取得します。
slackctl message saved --fetch
状態で絞り込みます(saved = 対応中、completed、archived。デフォルトはすべて):
slackctl message saved --filter saved --fetch
Enterprise Grid では、必要に応じてエンタープライズのワークスペースが自動的に使用されます。
送信、編集、削除、リアクション
slackctl message send "general" "here is the report"
slackctl message send U01AAAA "hello via DM"
slackctl message send "general" "threaded reply" --thread-ts 1700000000.000000
slackctl message edit "general" 1700000000.000000 "updated text"
slackctl message delete "general" 1700000000.000000
slackctl message react add "general" 1700000000.000000 "eyes"
slackctl message react remove "general" 1700000000.000000 "eyes"
ユーザー ID を指定して送信すると、DM が自動的に開きます。
チャンネルの一覧表示と作成/招待
slackctl channel list
slackctl channel list --limit 50
slackctl channel new "incident-war-room"
slackctl channel new "incident-leads" --private
slackctl channel invite "incident-war-room" "U01AAAA,U02BBBB"
ファイル(アップロード、ダウンロード、一覧表示、情報取得、削除)
チャンネルまたはスレッドにファイルをアップロードします。
slackctl file upload ./report.pdf "general" --title "Weekly Report" --message "Here is this week's report"
slackctl file upload ./screenshot.png "general" --thread-ts 1700000000.000000
slackctl file upload ./photo.jpg U01AAAA --message "Check this out"
標準入力からアップロードします(パイプ)。
cat output.log | slackctl file upload - "general" --filename "build.log" --title "Build Log"
ファイルをダウンロードします。
slackctl file download F0123ABCDEF --output ./downloaded.png
slackctl file download F0123ABCDEF --url-only
ファイルの一覧表示、確認、削除を行います。
slackctl file list --channel "general" --limit 10
slackctl file list --types images --limit 20
slackctl file info F0123ABCDEF
slackctl file delete F0123ABCDEF
検索(メッセージとファイル)
slackctl search messages "deploy failed" --limit 10
slackctl search files "report" --limit 5
既読にする
slackctl channel mark "general" 1700000000.000000
Canvas
Slack の Canvas を取得して Markdown に変換します:
slackctl canvas get "https://workspace.slack.com/docs/T123/F456"
slackctl canvas get F0123ABCDEF
ユーザー
slackctl user list --limit 100
slackctl user get "@alice"
slackctl user get U01AAAA
複数のワークスペース
複数のワークスペースがある場合は、--workspace を渡して対象を明確にします:
slackctl message list "general" --workspace "myteam" --limit 10
slackctl auth set-default https://myteam.slack.com
すべての出力は JSON です
すべてのコマンドは JSON を標準出力に出力します。フィルタリングには | jq を使用します:
slackctl user get U01AAAA | jq '.email'
slackctl message list "general" --limit 5 | jq '.[].text'
参考資料
- references/commands.md:コマンドの全一覧とすべてのフラグ
- references/targets.md:URL とチャンネルの対象指定ルール
- references/output.md:JSON 出力の形式