🚀 ターミナルで動作するSlackチャットクライアント(スレッド対応・メンション補完機能付き)
- 💬 ターミナル上でインタラクティブなスレッドチャット
- 🏷️ @メンション・グループメンション自動補完(Tab/矢印キーで選択)
- 🔍 チャンネル検索・補完(#で起動)
- 📜 今日の会話履歴からクイックアクセス(/rコマンド、Ctrl+R)
- 🗑️ 履歴削除機能(/deleteコマンド)
- 🌐 ブラウザで開く(/wコマンド、Ctrl+W)
- ⚡
/r実行後は/なしで番号入力可能(例:/r→1で移動) - ⏸️
/r実行中はポーリング停止(履歴選択に集中) - ⚡ 超高速起動(約0.3秒で即座に操作可能)
- 📝 2つの入力モード:Readline(デフォルト)& Editor(vim/nano)
- 🔄 リアルタイムメッセージ更新(10秒ごとにポーリング)
- ✅ 自動既読マーク機能
- 🎨 絵文字表示対応(
:smile:→ 😄) - 🎨 Slackマークダウン表示(太字、斜体、
取り消し線、コード) - 📎 添付ファイルURL表示
- 🗑️ キャッシュクリア機能(
slack clear-cache) - ⚡ 自分の投稿も即座に反映
- 🌏 完全な日本語対応
- 💾 ユーザー・チャンネル情報キャッシュによる高速化
- 📅 デフォルトで今日の履歴のみ表示(/prev, /nextで日付移動)
- 📊 履歴に日付・時刻表示(いつのスレッドか一目で把握)
- 📝 長いテキストプレビュー(100文字まで表示)
- 🤖 自動応答モード(/autoコマンド、OpenAI API連携)
# 1. GitHub Personal Access Token (classic) を作成
# https://github.com/settings/tokens で以下のスコープを選択:
# - read:packages
# 2. npmにGitHub Packagesの認証を設定
echo "@ryota-nakano:registry=https://npm.pkg.github.com" >> ~/.npmrc
echo "//npm.pkg.github.com/:_authToken=YOUR_GITHUB_TOKEN" >> ~/.npmrc
# 3. パッケージをグローバルインストール
npm install -g @ryota-nakano/slack-cli
# 4. 初期設定(対話的にSlackトークンを設定)
slack setup# リポジトリをクローン
git clone https://github.com/ryota-nakano/slack-cli.git
cd slack-cli
# 依存関係をインストール
npm install
# 環境設定
cp .env.example .env
# .envを編集してSlackトークンを追加slack setupこのコマンドで対話的に設定できます。設定は ~/.config/slack-cli/config に保存されます。
-
新しいアプリを作成するか既存のアプリを選択
-
"OAuth & Permissions" に移動
-
必要なスコープを追加:
必須スコープ:
channels:history- チャンネルの履歴を読むchannels:read- チャンネル一覧を読むchat:write- メッセージを送信users:read- ユーザー情報を読むgroups:history- プライベートチャンネルの履歴を読むgroups:read- プライベートチャンネル一覧を読むim:history- DM(ダイレクトメッセージ)の履歴を読むim:read- DM一覧を読むmpim:history- グループDMの履歴を読むmpim:read- グループDM一覧を読むsearch:read- メッセージ検索(/refreshコマンド用)
オプションスコープ:
usergroups:read- ユーザーグループ(@developers等)の名前を表示channels:write- 既読マーク機能(チャンネル用)groups:write- 既読マーク機能(プライベートチャンネル用)im:write- 既読マーク機能(DM用)mpim:write- 既読マーク機能(グループDM用)reactions:read- リアクションしたメッセージの一覧取得(/rコマンドで表示)reactions:write- リアクションの削除(/delete コマンドでリアクション削除)
-
ワークスペースにインストールしてトークンを取得
推奨: 自分の名前で投稿するにはUser Token(xoxp-で始まる)を使用してください
Note:
usergroups:readスコープがない場合、グループメンションは@<GROUP_ID>形式で表示されますchannels:write/groups:write/im:write/mpim:writeスコープがない場合、既読マーク機能は動作しませんが、他の機能は正常に使えますreactions:readスコープがない場合、リアクションしたメッセージは履歴に表示されませんreactions:writeスコープがない場合、リアクションの削除はできませんim:history/im:readスコープがない場合、DMは表示できませんmpim:history/mpim:readスコープがない場合、グループDMは表示できません
- グローバルインストール:
~/.config/slack-cli/config - ローカル開発: プロジェクトルートの
.env
設定を確認:
slack config.envファイルまたは~/.config/slack-cli/configで以下の設定が可能です:
# 表示設定
INITIAL_MESSAGE_COUNT=30 # 初期表示メッセージ数(デフォルト: 30)
MESSAGE_INCREMENT=30 # メッセージ追加表示数(デフォルト: 30)
TEXT_PREVIEW_LENGTH=100 # テキストプレビュー最大長(デフォルト: 100)
HISTORY_LIMIT=20 # 履歴保持数(デフォルト: 20)
# API/キャッシュ設定
CACHE_TTL=3600000 # キャッシュ有効期限(ミリ秒、デフォルト: 3600000 = 1時間)
SEARCH_RESULT_LIMIT=20 # 検索結果表示数(デフォルト: 20)
MENTION_SEARCH_LIMIT=10 # メンション検索結果表示数(デフォルト: 10)
REACTION_FETCH_LIMIT=20 # リアクション取得数(デフォルト: 20)
USER_BATCH_LIMIT=50 # ユーザー一括取得の最大数(デフォルト: 50)
# エディタ設定
EDITOR=vim # 使用するエディタ(デフォルト: vim)# デフォルトでチャンネル選択画面が起動
slack
# 初期設定
slack setup
# 設定確認
slack config
# キャッシュをクリア
slack clear-cache
# チャンネル一覧を表示
slack channels
# ヘルプを表示
slack --helpnpm start
# または
node src/index.jsnpm run channels
# または
node src/index.js channelsnode src/index.js thread <channel_id> <thread_ts>例:
node src/index.js thread C03BMM307B5 1762907616.178439| キー | 動作 |
|---|---|
# + 入力 + Tab |
チャンネル検索・補完 |
Tab / ↑↓ |
チャンネル候補選択 |
/ + 番号 |
今日の会話履歴から直接チャンネル/スレッドに移動(例: /3) |
/r |
今日の会話履歴を表示 |
/delete <番号> |
履歴から削除(例: /delete 1 3 5) |
| キー | 動作 |
|---|---|
Ctrl+Enter |
メッセージ送信 |
Ctrl+J |
改行挿入(複数行メッセージ) |
Ctrl+N |
次のスレッド番号を入力(/1 → /2 → /3) |
Ctrl+P |
前のスレッド番号を入力(/3 → /2 → /1) |
@ + 入力 + Tab |
メンション・グループメンション補完 |
# + 入力 + Tab |
チャンネル検索・補完 |
Tab / ↑↓ |
候補選択 |
Ctrl+E |
外部エディタ起動(vim/nano) |
Ctrl+R |
今日の会話履歴の表示/非表示をトグル |
Ctrl+W |
ブラウザで開く(/wと同じ) |
/ + 番号 |
スレッドに移動(例: /5) |
/prev or /p |
前日の履歴を表示 |
/next or /n |
次の日の履歴を表示 |
/today |
今日の履歴に戻る |
/history or /h |
過去の履歴を表示(デフォルト20件) |
/more or /m |
スレッドでさらに30件の過去メッセージを表示 |
/back or /b |
スレッドからチャンネルに戻る |
/r or /recent |
今日の会話履歴の表示/非表示をトグル(実行後は/なしで番号入力可能) |
/delete <番号> or /del <番号> |
/recentモード中に履歴削除(例: /delete 1 3 5) |
/cancel or /c |
履歴選択モードを解除(/rと同じ) |
/refresh or /sync |
今日の投稿を検索して履歴に追加 |
/reload or /rl |
メッセージを再取得(最新の状態に更新) |
/clear |
履歴キャッシュをクリア |
/w |
ブラウザで現在のチャンネル/スレッドを開く |
/link [番号] |
メッセージリンクを表示(例: /link 5) |
/edit <番号> |
メッセージを編集(例: /edit 5) |
/rm <番号> |
メッセージ削除(例: /rm 5、複数指定可: /rm 1 3 5) |
/auto |
自動応答モードの切り替え(OpenAI API連携、文体自動学習) |
/autoall |
全メッセージ返信モードの切り替え |
/style |
学習済みの文体スタイルを表示 |
/styleclear |
文体スタイルをクリア |
/help |
チャット中のヘルプ表示 |
Ctrl+C |
終了 |
Backspace |
文字削除 |
←→ |
カーソル移動 |
- シンプルな1行入力
- 短いメッセージに最適
- Enterで即座に送信
- Ctrl+Jで改行挿入(複数行メッセージ作成可能)
- @メンション補完機能
/edit <番号>でメッセージ編集/rm <番号>でメッセージ削除
- vim/nano等のお好みのエディタを起動
- 長文メッセージに最適
- 複数行編集可能
- 保存して終了で送信、保存せず終了でキャンセル
/+ 番号 - 指定した番号のスレッドに移動(例:/5)/prevor/p- 前日の履歴を表示(チャンネルのみ)/nextor/n- 次の日の履歴を表示(チャンネルのみ)/today- 今日の履歴に戻る(チャンネルのみ)/historyor/h- 過去の履歴を表示(デフォルト20件)/backor/b- スレッドからチャンネルに戻る/ror/recent- 今日の会話履歴を表示(番号でチャンネル/スレッドに移動可能)/delete <番号>or/del <番号>- /recentモード中に履歴削除(例: /delete 1 3 5)/refreshor/sync- 今日の投稿を検索して履歴に追加/link [番号]- メッセージリンクを表示(例:/link 5)/edit <番号>- 指定した番号のメッセージを編集(例:/edit 5)/rm <番号>- 指定した番号のメッセージを削除(例:/rm 5、複数指定可:/rm 1 3 5)/auto- 自動応答モードの切り替え(メンションに自動返信、文体自動学習)/autoall- 全メッセージ返信モードの切り替え/style- 学習済みの文体スタイルを表示/styleclear- 文体スタイルをクリア/help- チャット中のヘルプ表示Ctrl+E- エディタモードに切り替えCtrl+R- 今日の会話履歴の表示/非表示をトグルCtrl+W- ブラウザで開くCtrl+Enter- メッセージ送信Ctrl+C- 終了
エディタの設定:export EDITOR=nano または .env に追加
slack-cli/
├── src/
│ ├── index.js # エントリーポイント
│ ├── ai/
│ │ └── auto-reply.js # 自動応答モジュール(OpenAI連携)
│ ├── api/
│ │ └── slack-client.js # Slack APIクライアント
│ ├── commands/
│ │ ├── channels.js # チャンネル一覧コマンド
│ │ └── thread.js # スレッドチャットコマンド
│ ├── ui/
│ │ ├── readline-input.js # Readline入力モード
│ │ ├── editor-input.js # Editor入力モード
│ │ └── thread-display.js # スレッドメッセージ表示
│ └── utils/
│ └── help.js # ヘルプコマンド
├── .env.example # 環境変数テンプレート
├── package.json # Node.js設定
└── README.md # このファイル
| 変数 | 説明 | 必須 |
|---|---|---|
SLACK_USER_TOKEN |
ユーザートークン(推奨) | はい* |
SLACK_BOT_TOKEN |
Botトークン | はい* |
EDITOR |
外部エディタ(デフォルト:vim) | いいえ |
OPENAI_API_KEY |
OpenAI APIキー(自動応答機能用) | いいえ |
OPENAI_MODEL |
OpenAIモデル(デフォルト:gpt-4o-mini) | いいえ |
*User TokenまたはBot Tokenのどちらかが必須です
ISC
IssueやPull Requestはお気軽にどうぞ!