📖

有志開発のCLIを用いてSlackからDiscordにメッセージを移行した(WindowsPC上)

2022/08/27に公開

はじめに

家庭でSlackを利用してきましたが、この度のSlackのサービス内容変更で90日以内のメッセージしか閲覧できなくなるのが困り移行先を検討した結果、Discordにしようということになりました。
移行はMSDというツールを使って行っていきましたが、Windowsではいくつか注意点があったので記していきます。

ちなみにWSL2を使います。また、申し訳ないですが開発者以外にはこの記事は難しい内容かと思いますので、すみませんがよろしくお願いします。

なお、MSD開発者の記事はこちらです。誠に開発ありがとうございます。
https://zenn.dev/yogarasu/articles/10637328b9739c

環境

  • Windows 10 Home ビルド 19044

注意点

上記の開発記事から遷移できるGithubのリポジトリのページ内の手順で概ね差し支えないですが、以下のような点を踏まえる必要がありました。
ツールのコマンドを実行するまでに目を通しておいてください。

初回設定のための環境構築

初回設定の中でdirenv等のツールをインストール/利用しますが、私のPCにはそれらが入っておらず、仮に入っていたとしてもLinux環境のほうがつまづきにくく、WSLのほうがWindows本体の環境を汚さずに済むことからWSLを利用して実行していくことにしました。

WSL2のインストール

MS公式のドキュメントを参考に進めます。WSLは1と2がありますが、WSL2にします。
インストールするLinuxは既定のUbuntuとしておきます。
https://docs.microsoft.com/ja-jp/windows/wsl/install

ツールのビルド&インストール環境整備

初回設定で必要になるツールをインストールするのに必要なツールをインストールします。

  • Make
  • Golang開発環境

Make

以下でインストールしてください。
参考: https://qiita.com/KentoNaka/items/531f8af8872bfec2d82a#makeコマンドのインストール

sudo apt install make

Go lang 開発環境

こちらのサイトを参考に進めます。
goのURLなどは公式を参考に読み替えてください。

また、このままではsudoでgoコマンドのパスが通っておらずsudoでgoコマンドを利用できないため、以下の手順を実施してください。

  1. sudoの設定を開く
    sudo visudo
  2. Defaults secure_path = で始まる行を探す
  3. パスの値の後ろに :/usr/local/go/bin を足す

参考: https://stackoverflow.com/questions/71899341/go-command-not-found-error-when-using-sudo

これらが済んだ後、mds-cliをWSL上にgit cloneします。

WSL上のファイルにアクセスしたい

上記で紹介したGoの環境のセットアップ手順にも記載があるのですが、 explorer.exe . でWindowsのエクスプローラが開けます。ファイルの書き込みもできます。とても便利ですね!

Slackからエクスポートしたデータの解凍

SlackからエクスポートしたZIPファイルを解凍し中のフォルダを .src フォルダに改名して配置する手順がありますが、Windows標準のZIP解凍機能だと文字コードの問題で文字化けしてしまいます。
これを避けるため、7-zipなどを用いてください。解凍してファイル/フォルダ名が文字化けしないなら何でも差し支えありません。
https://sevenzip.osdn.jp/

なぜか空文字列になっていたdisplay_name

自分のSlackワークスペースでは、エクスポートされたファイルの users.json 内にあるオブジェクト全ての display_name が何故か空文字列になっており、これが原因でツールの一部コマンドの実行が中断し終了されます。
この問題を避けるため、cloneしてきたスクリプトのコードを修正します。

修正箇所は、
libs > user.mts > UserClientクラス > migrateUserメソッドの
return文の

name: user.is_bot ? user.profile.real_name : user.profile.display_name,

name: user.profile.real_name,

と変更します。変更後はそのまま保存します。

まとめ

実際にツールを実行してみると、発言内容がすんなりとDiscordに移行されて問題が解決しました。
WSLの勉強にもなり、やってみてよかったです。

Discussion