Slack から Mattermost へデータ移行

Mattermost のロゴ画像
  • URLをコピーしました!

この記事で解説すること:

Amazon Lightsail の Ubuntu に立ち上げた Mattermost に、Slack のデータを移行させます。

Mattermost を操作する mmctl コマンドについては、別の記事にまとめます。

Ubuntu への Mattermost のインストール方法は、以下の記事をご覧ください。

あわせて読みたい
【Ubuntu】Mattermost をインストール この記事で解説すること: Amazon Lightsail で Ubuntu のインスタンスを立ち上げ、そこに Mattermost をインストールします。構成は、Nginx + MySQL です。 また、独自...
目次

インポートの準備

それでは、インポートの準備を進めていきます。
※ 事前に、インポート先となる Mattermost のチームを作成しておいてください。

少し順番が前後しますが、公式の手順に沿って行っていきます。

作業用ディレクトリの作成

SSH でサーバー(Amazon Lightsail インスタンスの Ubuntu) に入り、今回の作業用ディレクトリを作成しておきます。

$ mkdir tmp

必要ファイルのダウンロード

Slack データをインポートするには「mmetl」と「slack-advanced-exporter」を使用します。

それらをインストールするため、先ほど作成した tmp/ ディレクトリに必要なファイルをダウンロードします。

$ cd tmp
$ wget https://github.com/mattermost/mmetl/releases/download/0.0.1/mmetl.linux-amd64.tar.gz
$ wget https://github.com/grundleborg/slack-advanced-exporter/releases/download/v0.4.0/slack-advanced-exporter.linux-amd64.tar.gz

もし、Ubuntu 以外で使用する場合は、OS ごとにダウンロードするファイルを選択します。

必要ファイルの解凍

先ほどダウンロードした圧縮ファイルを解凍します。

$ tar -zxvf slack-advanced-exporter.linux-amd64.tar.gz
$ tar -zxvf mmetl.linux-amd64.tar.gz

インポート元データの準備

次は サーバー操作から一旦離れて、Slack の公式の手順通りにデータをエクスポートします。

Slack でアーカイブしたチャンネルは、Mattermost にインポートするとアーカイブが解除された状態になります。インポート後に再びアーカイブする手間が発生するため、不要なアーカイブチャンネルは削除した方がいいかもしれません。

エクスポートした ZIPファイルを FTPソフトでサーバーに転送します。

今回は FileZilla を利用し、先ほど作成した tmp/ ディレクトリに転送します。
接続方法は以下の記事を参照させていただきました。

Slack API OAuth Token の発行

Mattermost の公式の解説「Migration guide」の「Next, follow these steps to create a bot token:」の 1 〜 9 のステップを実行し、Slack API OAuth Token を発行してください。

エクスポートしたデータにメールアドレス情報を紐付け

Slack のエクスポートデータには添付ファイルとメールアドレスは含まれていないため、それらを紐付けます。
まずはメールアドレスを紐付けます。

$ ./slack-advanced-exporter --input-archive {Slackからエクスポートしたファイル} --output-archive export-with-emails.zip fetch-emails --api-token {発行したslack API トークン}

「export-with-emails.zip」というファイルが作成されます。

エクスポートしたデータにファイルの情報を紐づけ

次に、添付ファイルを紐付けます。

$ ./slack-advanced-exporter --input-archive export-with-emails.zip --output-archive export-with-emails-and-attachments.zip fetch-attachments

「export-with-emails-and-attachments.zip」というファイルが作成されます。

以上で、インポートするファイルの用意ができました。

Mattermost 用にファイル変換 & 圧縮

次は、これらのファイルを Mattermost 用に変換していきます。

この後の作業で Mattermost を操作するためのコマンドである mmctl を使用しますが、まだパスを通していないので、公式のように

$ mmctl import upload hogehoge.zip

と入力しても、実行されません。

そのため、事前にパスを通すか、毎回パスを指定して実行するか を行うよう注意してください。

パスを指定して実行するなら、今回の場合は以下のようになります。

$ /opt/mattermost/bin/mmctl import upload hogehoge.zip

それでは、インポートするファイルを Mattermost 用に変換していきましょう。

インポートするファイルを変換

$ ./mmetl transform slack --team {チーム名} --file export-with-emails-and-attachments.zip --output slack-export.jsonl

「slack-export.jsonl」というファイルと、「bulk-export-attachments」というフォルダが作成されます。

{チーム名} には、事前に Mattermost で作成したチーム名を入力します。

もし分からない場合は、以下のコマンドでチーム名の一覧を確認できます。

$ mmctl team list

上述したように、mmctl コマンド実行時はパスに注意してください。

bulk-export-attachments/ フォルダを data に移動

$ mkdir data
$ mv bulk-export-attachments data

zip コマンドをインストール (まだインストールされていない場合のみ)

$ sudo apt update
$ sudo apt install zip

それらを圧縮

$ zip -r slack-export.zip data slack-export.jsonl

「slack-export.zip」という圧縮ファイルが作成されます。

以上で、Mattermost 用にインポートファイルを変換・圧縮が完了しました。

Mattermost にインポート

それでは最後に、Mattermost にインポートしていきます。

ログイン

$ mmctl auth login http://localhost:8065

//「Connection name」:適当な文字列
//「Username」:Mattermost で作成した管理者ユーザー名
// 「Password」:Mattermost で作成した管理者ユーザーのパスワード

Mattermostのチームの最大ユーザー数を増やす

$ mmctl config set TeamSettings.MaxUsersPerTeam {増やしたい人数}

{増やしたい人数} には、Mattermost の最大ユーザー数を指定します (500 など)。

最大ユーザー数を増やしておかないと、後でインポートした際に以下のようにエラーになります

$ mmctl import job show {Import process job IDの値}

// Status: error
// Data: BulkImport: Unable to import team membership because no more members are allowed in that team, limit exceeded …

インポートについては後述します。

インポートファイルのアップロード

$ mmctl import upload slack-export.zip
Upload session successfully created, ID: gobrahsndinuubja6ax1pbjnrh // ID が生成される
Import file successfully uploaded, name: ru5u8cyqt3na3xmqyha67jjp5w

ファイルサイズが大きすぎると、「Error: failed to create upload session: : Unable to upload file. File is too large.」といったエラーが表示されるようです。

この場合は、以下のコマンドで Mattermost の最大ファイルサイズを変更してください。

$ mmctl config set FileSettings.MaxFileSize {増やしたいサイズ}

{増やしたいサイズ} には、アップロードするサイズよりも大きい値を選択します。

これを実行してもエラーが出る場合は、サーバー側でファイルサイズオーバーが起きている可能性がありますので、サーバー側 (Nginx) の設定を変更します。

アップロードしたファイル名を確認

$ mmctl import list available

今回は、以下のファイル名でアップロードされました。

gobrahsndinuubja6ax1pbjnrh_slack-export.zip

アップロード時に発行された ID と同じ値が使われています。

インポート

$ mmctl import process {先ほど確認したアップロードファイル名}
Import process job successfully created, ID: pqnw1q6aw3riikdhbof3xx84ey // ID が生成される

{先ほど確認したアップロードファイル名} は、「mmctl import list available」コマンドで確認した ZIP ファイルです。

インポート状況の確認

$ mmctl import job show {先ほどの Import process job IDの値}

実行後、「Status: in_progress」と表示されれば成功です。

インポートされているか確認

Mattermost を起動し、Slack のチャンネルがインポートされているか確認します。

最初はサイドバーに表示されていないので、チャンネル名を検索して探します。
インポートされていない場合は、一旦 Mattermost を再起動すると表示されるはずです。

また、以下のコマンドでもチャンネルの一覧を確認できます。

$ mmctl channel list {チーム名}

以上で Slack から Mattermost へのデータ移行が完了しました。

チャンネル名がランダムな英数字に変換される件について

Slack でのチャンネル名が日本語だと、Mattermost に移行した際に チャンネル名だけランダムな文字列になってしまうようです。

色々と試してみましたが、対処法としては

  • Mattermost への移行後に、一つずつ手作業でチャンネル名を修正する
  • Slack からデータをエクスポートする前に、Slack で半角英数字のみのチャンネル名に変更する

のどちらかしか解決策がなさそうです…💦

試したこと:

  • Slack データの差分追加は可能
    • 例:8/31 までの Slack データA を入れた後、9/1 からの Slack データB をインポートすると、データA でインポートした Mattermost 上のチャンネルの続きに、データB のメッセージのやり取りが追加されます
  • 差分データをインポートする前に Mattermost のチャンネルでメッセージを送っても、そのメッセージも含めて時系列順に差分インポートされる
    • つまり、Slack と Mattermost の同時運用も可能
  • 途中で Slack のチャンネル名を変更しても、Slack データの差分追加が可能
  • でも、 Mattermost に追加されたチャンネル名を変更すると、Slack データの差分追加はされない
    • 例:データA でインポートした Mattermost 上のチャンネル (チャンネル名変更済み) の他に、データB のチャンネル (Mattermost で変更する前と同じチャンネル名) が新たに生成される
      • 新たに生成されるチャンネルは、データB でエクスポートしたメッセージ期間のみの内容
  • Mattermost 上のチャンネル名だけ変えて URL は変更しなかったとしても、差分インポートするとチャンネル名が元に戻って (ランダムな文字列に戻って) しまう
    • Mattermost のチャンネルの URL は「https://{example.com}/{チーム名}/{チャンネル名}/」となる

以上です。お疲れ様でした。

別の記事では、

・Ubuntu に Mattermost をインストール (今回の記事の一つ前の記事)
・Mattermost を操作する mmctl コマンドについて (チャンネルの削除方法など)

を解説しますので、よろしければご覧ください。

あわせて読みたい
【Ubuntu】Mattermost をインストール この記事で解説すること: Amazon Lightsail で Ubuntu のインスタンスを立ち上げ、そこに Mattermost をインストールします。構成は、Nginx + MySQL です。 また、独自...

この記事を書いた人

コメント

コメントする

目次