Slack データのエクスポート ハマりポイント
こんにちは。趣味でSlackをやっている者です。
Slackのデータエクスポートでハマったポイントがあったので備忘録です。
Slackの管理者やデータ活用をされている方と情報交換できたら嬉しいです。
今回やりたかったこと
特定のユーザーが、特定の期間に、パブリックチャンネルとプライベートチャンネルで(DMは除く)、いつ投稿したか、その情報を取得したい。
なお、これは、私の関係する組織で不正や犯罪があったということではないので、妙な邪推はしないでくださいね。
特定個人の行動を追跡することにもなるので、情報の取り扱いについては、人事や法務ともよく相談しましょう。
ワークスペースのデータをエクスポートする
前述のやりたかったことに対して、まずはエクスポートを試みました。
公式の説明
画面操作イメージ
条件を指定し、データエクスポートを開始すると、データ生成中としてローディングマークが出現します。データ量により、ダウンロードできるまでの時間は異なります。数分〜数十分待つことになります。
エクスポートで注意する点
前述の操作により、JSONやtxtが入手できます。しかし、ここでいくつか注意点があります。(2025/04/24時点)
-
ワークスペースに所属していないユーザーのチャンネル会話はエクスポートできない(仕様)
たとえば、解除されたメンバー(どのワークスペースにも所属していないメンバー)は所属チャンネルがないため、チャンネルの情報を取得できない。なお、DM情報はエクスポートできる。 -
ユーザーをワークスペースに追加しても、チャンネルに参加していなければそのチャンネルのデータはエクスポートされない。
たとえば、解除されたメンバーをワークスペースに所属させ直しても、その時点で参加しているチャンネルの情報しかエクスポートできない。過去に所属していたチャンネルの情報はエクスポートされない。 -
アーカイブされたチャンネルはエクスポートの対象に含まれる。
やりたかったことを実現するには
最終的にはAPIでデータ取得しました。
雑に説明すると、非同期処理でPythonでいい感じにして、1ヶ月ごととかユーザーごととか期間区切って、中間データ溜めつつ、JSONとCSVを吐き出します。レートリミットもあるので、対象件数が多いと数時間かかるため、夜間に処理走らせておいて翌朝出来てるかな、みたいな感じにもなります。トークンを分けて処理を複数ぶん回す荒技もあります。この辺、私よりも詳しい人がたくさんいらっしゃると思いますので、そういった方々にご教授いただきたいです。
コードはAIでも簡単に生成できると思うので割愛します。
利用したAPI
APIは以下のあたりです。カッコ内はレートリミットです。
conversations.list (Tier 2 / 20+ per minute)
conversations.history (Tier 3 / 50+ per minute)
処理時間
特にhistoryの処理が重めです。仮に対象がユーザー1名、チャンネル数1,500、2年間の情報を取得しようとした時、以下のような大雑把な計算になります。
1500チャンネルに対して:
- チャンネルリストの取得
- 1回のリクエストで約100チャンネル取得するとすると、15回のリクエストが必要
- レート制限(20+ リクエスト/分)を考慮すると、最低でも約1分
- 各チャンネルの履歴取得
- conversations.historyのレート制限:50+ リクエスト/分
- 理想的な条件では1分あたり50チャンネル処理できる
- 単純計算:1500 ÷ 50 = 30分
ただし、上記はあくまで楽観・単純計算に過ぎず、次のような考慮事項もあります。
考慮事項
- 各チャンネルのメッセージ量によってはページネーションが必要(複数リクエスト)
- エラー処理と再試行の時間
- 2年分のデータとなると各チャンネルで複数リクエストが必要
- ネットワーク状況やSlackサーバーの応答性
- メッセージ量が非常に多いチャンネルの存在
というわけで、現実的には数時間かかるとみておいた方がいいでしょう。
Pythonを実行するときには、仮想環境を作っておくと良いでしょう。クラウドで処理しても良さそうですが、そんなに頻繁にやることでもないので、ローカルでいいかなという気持ち。GASでやるのはしんどいと思います。
最適化された実装と安定したネットワーク環境により、より高速に処理できるかと思いますが、この辺りは詳しい人にぜひぜひご教授いただきたいです🙏
そして、こういうことをモリモリ推進したり、社内システムをスクラッチで作ったりできるパーソンをへーしゃは求めています。ご興味ある方、カジュアル面談いかがでしょうか?
CIO は 7032さんです。
#Slack #SlackEnterpriseGrid #データエクスポート #エクスポート #JSON #CSV #監査ログ
雑記はnoteにして、技術っぽいことはZennに書いていこうかなあ、どうしようかなあ、そんな今日この頃です。
Discussion