Slack CLI で Slack API を効率的に操作する実践テクニック
Slack CLI に slack api コマンドが追加され、任意の Slack API メソッドをターミナルから直接呼び出せるようになりました[1]。
本記事では、API を CLI から呼べることを活かした実用的なユースケースをご紹介します。
なお、slack api を使うまでのセットアップはこちらの記事をご参照ください。
JSON ファイルを引数として渡す
Block Kit の blocks を含むペイロードは長いので、扱いやすくするためにファイルに切り出したい場面があります。シェルのコマンド置換でファイルの内容を渡してみましょう。
$ cat message.json
{
"channel": "C0123456789",
"text": "Hello",
"blocks": [
{ "type": "section", "text": { "type": "mrkdwn", "text": "*Hello*" } }
]
}
$ slack api chat.postMessage --json "$(cat message.json)"

jq とシェルのループで繰り返し実行する
出力が JSON 形式なので、そのまま jq に渡せます。以下はチャンネル一覧から ID と名前だけを抜き出す例です。
$ slack api conversations.list --app A0123456789 team_id=T0123456789 \
| jq -r '.channels[] | "\(.id)\t\(.name)"'
C0123456789 general
C0123456780 random
さらに、同じコマンドを複数パターンで確認したい場合、シェルのループでまとめて実行できます。
for text in "plain text" "*bold*" "<@U0123456789>" "<https://example.com|link>"; do
slack api chat.postMessage --app A0123456789 channel=C0123456789 text="$text" \
| jq -r '.ok'
done

メソッドを差し替えて呼び出す
slack api はメソッド名を位置引数として受け取るので、シェルの変数で差し替えられます。例として、アプリに付与済みのスコープで何が呼べるか確認してみます。
for method in auth.test conversations.list users.list team.info; do
printf '%s\t' "$method"
slack api "$method" --app A0123456789 team_id=T0123456789 \
| jq -r 'if .ok then "ok" else "\(.error)\t\(.needed // "-")" end'
done
auth.test ok
conversations.list ok
users.list missing_scope users:read
team.info missing_scope team:read
このように、マニフェストに追加すべきスコープをまとめて確認できます。
curl で同じことをすると、メソッド名を URL に組み込む必要があります。変数展開で書けなくはありませんが、ヘッダーとトークンの指定も毎回付いて回るため、ここまで簡単にはなりません。
プロジェクトを移動するとトークンが切り替わる
トークンはプロジェクト内のアプリから解決されるため、別のアプリで試したいときはディレクトリを移動するだけで済みます。
curl の場合は環境変数のトークンを入れ替えることになります。入れ替えを忘れて別のワークスペースへ投稿してしまう、という間違いが起きません。
まとめ
出力を扱う部分は両者でほぼ同じで、差が出るのはリクエストの組み立てにかかる手間の部分です。
1 回だけ実行するのであれば大きな差はありませんが、プロジェクトやパラメータを変えて何度も呼びたい場合、手順の複雑さが変わってきます。
Slack API の挙動を確認する機会が多い方は、ぜひ一度試してみてください。
Slack CLI v4.1.0 のリリースノート。https://docs.slack.dev/changelog/2026/05/19/slack-cli/ ↩︎




