slackdumpの出力ファイルをSlackLogViewerで読ませたいときの注意点。

Slackのメッセージをエクスポートしたい時、最も一般的な方法は公式が用意しているエクスポート機能である。これはGUI上で簡単にエクスポートできること、フリープランであってもパブリックチャンネルであれば過去全てのメッセージをエクスポートできる点で優れている。しかし、ワークスペースのオーナーまたは管理者でないとエクスポート出来ないことに加え、やはりプライベートチャンネルやダイレクトメッセージをエクスポートできないのは辛い。

フリープランでこれらを行う方法の一つが、slackdumpである。

github.com

こちらはメッセージ上限に引っかからない範囲でしか出力できないので、2022年9月1日以降は90日毎にエクスポートしなければならないと思われるが、それでもプライベートチャンネルやダイレクトメッセージのバックアップ方法として十分に意義がある。slackdumpの使い方は以下の記事にとても詳しくまとめられている。

note.com

ただし、SlackLogViewerでこのエクスポートファイルを読む場合、現行の1.1.Beta-5では少し問題があるので、その話をまとめておく。

-downloadオプションは使うべきでない

上記解説ページでは、slackdumpをcommandから実行する際に-downloadというオプションを付けるよう指示されている。これはSlackにアップロードされたファイルを纏めてダウンロードするもので、バックアップ用には便利な機能だ。ただ、SlackLogViewerは-downloadオプション付きで出力されたzipファイルを読ませると、ファイルを開くことが出来ない。ので、SlackLogViewer用に出力するときは-downloadオプションは使わないこと。

内部的には、SlackLogViewerはjsonファイルのurl_private_downloadに書かれているURLからファイルのダウンロードを試みるものの、slackdumpはこれをローカルのパスに書き換えてしまうのだ。これがSlack公式のエクスポート機能と同等の振る舞いなのかどうか私には分からないが、SlackLogViewer現行版はこれには対応していないのである。

添付ファイルをダウンロードできない。

slackdumpの出力したファイルをそのままSlackLogViewerに読ませると、(-downloadオプションを使ったかどうかに関わらず)メッセージに添付されたファイルをダウンロードできないことがわかった。Slackのワークスペースはユーザー名やパスワードがなければ入ることは出来ないので、当然ファイルのダウンロードにもそのような認証情報が必要になる。なぜ公式のエクスポートファイルでそれらのファイルにアクセスできるのかといえば、それらのURLに認証のためのトークンが付与されているからである。
ただslackdumpが出力するファイルの中のURLには、これらのトークンがない。多分取得できないのだろう。

現状ではslackdumpのエクスポートを読むとき添付ファイルにアクセスする方法はない。これに関してはslackdumpの開発者と議論中で、将来的に解消される可能性はある。
-export-type mattermost -export-token xoxe-??????2種類のオプションを与えることで一応回避可能である1export-typeのmattermostとstandardの違いはよく分からないが、どちらもSlackLogViewerで表示可能だ。export-tokenは先述のURLに指定したトークンを付与する機能で、これを予め与えておけばファイルのダウンロードが可能になる。とはいえいちいちトークンを指定しなければファイルを見られないのはちょっと厄介ではある。

この問題に関してはslackdumpの開発者と相談中なので、将来的にもう少し簡易化される可能性はある。

チャンネル名に全角カタカナ文字が含まれる場合、フォルダ名が狂う。

この不具合は2022/10/09のv2.2.1のリリースに伴い修正された。私の方でも確認済みである。

Slackのエクスポートデータは、各チャンネルと同じ名前が付けられたフォルダの中に、日付ごとにメッセージをまとめたjsonファイルが格納されている。しかし、日本語特有の問題だろうと思うが、チャンネル名に全角カタカナが含まれている場合、zipファイル内のフォルダ名が半角カタカナに変換されてしまうようである。channel.json内のチャンネル名は全角カタカナなのにフォルダ名が半角カタカナになってしまうことで、SlackLogViewerではそのチャンネルを表示できなくなる。

これに関しては手作業でフォルダ名を正しいチャンネル名に修正してもらうしかないが、もしPython導入済みの環境であれば、私の友人が半角フォルダ名のファイルを全角フォルダに自動でコピーしてくれるスクリプトを用意してくれたので、これを実行するのが楽だ。詳細は以下のページを参照してほしい。ただしmojimojiというモジュールのインストールが必要なので注意。

phst.hateblo.jp

この問題はslackdump開発者に報告済みであるが、あちらは間違いなくカタカナの扱いに不慣れなので、対処してもらえるかは何とも言えない。大変ありがたいことに対処してくれたようだ。日本人ユーザーは額を地面にこすりつけて感謝すべし。

Windows上でslackdumpを実行した場合、そのzipファイルは展開してから読む。

これはどちらかというとSlackLogViewerの隠れたバグと言うべきなのだが、Windows上でslackdumpを実行して出力されたzipファイルは、SlackLogViewerで開くことが出来ない。Slack公式のエクスポート機能で作られたzipファイルと、slackdumpをWindows上で実行して作られたzipファイルには微妙な違いがあるのだ。具体的には、フォルダの区切り文字が異なる。Slack公式の方では/で区切られているのに、Windows上でslackdumpを使った場合はWindowsのフォルダ区切り文字である\になっている。

これはまあ、zipを展開してから読んでもらうのが手っ取り早い。

この問題は別に単なる仕様でしかないので私は特にslackdump開発者への報告等はしていなかったのだが、他所で報告があったらしくv2.2.2のmilestoneに追加されていた。私の方でもSlackLogViewer側での対応を予定しているので、どちらかが更新をリリースすれば解消されるだろう。v2.2.2のリリースに伴い解消されたようだ。SlackLogViewerの方でもv1.2.Alpha-0で修正したので、どちらか少なくとも一方で当該バージョン以降のものを導入すればよい。


  1. ??????の部分はSlackのトークンの文字列。正規の手段で取得しても良いが、公式のエクスポートファイルの中のURLには自動生成されたトークンが付与されており、これを与えても表示できた。横着な方法ではあるけれども。