| name | slack |
| description | Slack のメッセージを取得・検索する |
| user_invocable | true |
Slack スキル
概要
Chrome の既存セッションを利用して Slack のメッセージを DOM スクレイピングで取得します。
OAuth 設定は不要です。ワークスペースURLはハードコードせず、ブラウザの現在のURLから自動検出します。
使い方
チャンネル一覧取得
cd .claude/skills/slack/scripts && npx tsx src/index.ts channels -p "プロファイル名"
メッセージ取得
cd .claude/skills/slack/scripts && npx tsx src/index.ts messages -p "プロファイル名" --channel "チャンネル名"
メッセージ検索
cd .claude/skills/slack/scripts && npx tsx src/index.ts search -p "プロファイル名" -q "検索クエリ"
オプション
--limit <n>: 取得件数上限(デフォルト50)
--format json|text: 出力形式(デフォルト: text)
--no-launch: 既存Chromeに接続
--port <number>: デバッグポート(デフォルト: 9222)
検索の実装詳細
Slack はSPA(シングルページアプリケーション)であるため、検索はURL遷移ではなくDOM操作で行います。
検索フロー
- まずチャンネルページに遷移する(クリーンな状態が必要)
button[data-qa="top_nav_search"] をクリックして検索ダイアログを開く
- 既存テキストを
document.execCommand("selectAll") + Backspace でクリアする
page.keyboard.type() でクエリを入力する
- Enter を押して検索を実行する
/search URLへの遷移を待つ
[data-qa="search_result"] セレクタで結果を取得する
重要なポイント
page.goto() で検索URLに直接遷移しても、SPAのためチャンネルにリダイレクトされる。必ずDOM操作で検索すること
- ワークスペースURLはハードコードしない。ブラウザの現在のページURLからチームIDを自動検出する
- Slack検索は日付フィルタをサポート:
after:YYYY-MM-DD before:YYYY-MM-DD
検索結果のセレクタ
- 検索結果コンテナ:
[data-qa="search_result"]
- 送信者名:
[data-qa="message_sender_name"]
- チャンネル名:
[data-qa="search_result_channel_name"]
- メッセージ本文:
[data-qa="message-text"]
パフォーマンスと安定性
- 長時間実行する複数検索スクリプトでは、ページを使い回さず
browser.newPage() で新しいページを作成する(ProtocolTimeout防止)
- 接続時に
protocolTimeout: 180000 を設定する
- サイドバー関連のセレクタ:
.p-client_workspace, button[data-qa="top_nav_search"]
注意事項
- Slack にログイン済みの Chrome プロファイルが必要
- DOM セレクタは Slack の更新で変わる可能性があります