Discordで過去のチャットログを保存する方法【macOS】

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/bcebc84a-586d-8168-5d14-79181f69af62.png)


# 概要
[Discord](https://discord.com/)で過去のチャットログを保存する方法を紹介します。

一般的にDiscordのチャットログ収集・保存方法は、大きく２種類あります。本投稿ではツールを使った方法を紹介します。
- `①一つ一つコピペする`
- `②ツールを利用する` ← この記事

ツールを利用する方法のうち、現在最もポピュラーなツールは「[DiscordChatExporter](https://github.com/Tyrrrz/DiscordChatExporter)」です。
本投稿では、`DiscordChatExporter`というツールを使った自動ログ収集方法を解説します。

## DiscordChatExporter とは
`DiscordChatExporter`はDiscordのチャットログを収集してくれるソフトウェアです。フリーソフトウェアで提供されており、`無料`で`誰でも`利用できます。

逆にDiscord公式は、ログ履歴をエクスポートする機能を提供しておらず、ユーザーがコピペなどで地道に汲み上げる必要があり非常に手間でした。`DiscordChatExporter`はこの問題を解決するツールです。

`DiscordChatExporter`は便利なことに[GUI画面](https://wa3.i-3-i.info/word1371.html)が提供されています。
しかし惜しいことにGUI版は`Windows版`限定で、`macOS版`では[CLI版](https://wa3.i-3-i.info/word16524.html)のみの提供となります。そうしたことから、これまでmacユーザーにとって若干のとっつきにくさがありました。
本投稿では、`DiscordChatExporter`のmacOS向けの利用方法について解説を行います。

macOSから利用するためには、上記に加えて`.NET（C#の実行環境）`の環境構築が必要ですが、今回紹介する方法では、.NETの環境構築を`スキップ`する利用方法を紹介します。

具体的には、`Docker`を利用した方法を紹介します。
`Docker版`を使うメリットは、`①.NETの環境構築がスキップできる点` `②PCの内部設定を汚さずに利用できる点` `③すでにDocker導入済みユーザーにとって最速に利用できる点` などがあります。
ツールの使い方に関しては一度やり方さえを覚えてしまえば二回目以降は利用は非常にスムーズですので、今後のためにもぜひ覚えておくと便利でしょう。

（※なお、.NETを利用する方法についてもご興味のある方は、 [こちらの記事](https://qiita.com/nanbuwks/items/3f7ddf369bd0ddbd5cc5) が参考になります。）


## 流れ
以下が全体の流れになります。
1. 前準備
1. [`DiscordChatExporter（Docker版）`](https://github.com/Tyrrrz/DiscordChatExporter/blob/master/.docs/Docker.md)のインストール
1. Discordのトークンを確認
1. ログ収集開始
1. 収集したログファイルを確認

最終的に、`ログファイル`が`HTMLファイル形式`として取得できます。
ログはチャンネル毎に取得できます。収集範囲はチャンネルの最初のメッセージから最後のメッセージまでとなります。

以下、順に解説します。


## 前準備
1. `Docker`がインストール済みであること
1. `git`がインストール済みであること

もし上記2点が終わっていない方は、必ず済ませてから次に進んでください。
準備には次の記事が参考になります。
・[Docker/Docker-Desktop](https://www.docker.com/products/docker-desktop/)のインストール →  【動作確認】まで
・[Gitのinstallのやり方 for Mac | インストールから確認方法まで](https://k-sasaking.net/programing/git-install-for-mac)  → 全部


## DiscordChatExporter（Docker版）のインストール
ターミナルで下記を実行します。

```bash
mkdir discord-logs && cd $_

docker pull tyrrrz/discordchatexporter:stable
```
## 動作確認
ここまでの設定が成功しているか確認するため、一度、動作確認を行います。
次のコマンドを実行します。実行結果から設定の成否が判別できます。
```shell
docker run --rm tyrrrz/discordchatexporter:stable
```
> 実行の様子
> もし、`赤文字`が出ていたり、`ERROR`などの文字が表示される場合はなにかの設定が抜けている可能性があります。エラー文をコピペ → Google検索、などして原因を調査しましょう。
> おおよそ下図のように文字出力されれば`成功`です。
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/24174593-ca4b-7d72-bbb0-ffbea34201d0.png)



## Discordのトークンを確認
次にDiscordサーバーの情報を取得します。
実際にログ収集を行うためには、次の2つの情報が必須です。
1. `ユーザートークン`
1. `チャンネルID`

ユーザートークンは自分のものを、チャンネルIDは収集対象のチャンネルのものを取得します。
以下で取得方法を紹介します。

## ユーザートークン
`ユーザートークン`および`チャンネルID`の取得方法は[こちらの記事](https://qiita.com/nanbuwks/items/3f7ddf369bd0ddbd5cc5#%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AE%E5%8F%96%E5%BE%97)の「トークンの取得」の章を参考に取得してください。

また、`チャンネルID`は[開発者モードを有効にする](https://qiita.com/ymzkjpx/items/8f42733d0fb67d454e27)ことでも取得できます。
個人的にはこちらの方が直感的で好みです。
- [Discordの開発者モードを有効にする方法](https://qiita.com/ymzkjpx/items/8f42733d0fb67d454e27)

> 開発者モードを有効にし、チャンネルIDを取得している様子
> チャンネルの上で右クリックするだけで簡単に取得できてしまう。
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/e3179ee4-e13f-3e7c-7779-e32932545bc8.png)


最終的に、次のような値が取得できます。値の例です。
| ユーザートークン | 値の例 |
| -- | -- |
| ユーザートークン | `XgVKAWsQKrqR*HzK3^j6X.G-drCi.riXABcDEfGHiJKMrqjLiiyGbrLVF0KS8` |
| チャンネルID | `93848874438859342977995432` |

準備が整ったので、次はいよいよログ収集を行います。

## ログ収集開始
次のコマンドでログ収集を開始します。
`{ユーザートークン}` `{チャンネルID}` は各自の環境に合わせて置換してください。
```shell
# テンプレート
docker run --rm -v $PWD:/out tyrrrz/discordchatexporter:stable export -t {ユーザートークン} -c {チャンネルID}

# 例
docker run --rm -v $PWD:/out tyrrrz/discordchatexporter:stable export -t XgVKAWsQKrqR*HzK3^j6X.G-drCi.riXABcDEfGHiJKMrqjLiiyGbrLVF0KS8 -c 93848874438859342977995432
```

> 実際にログ収集している様子。
> 放送部サーバーの雑談チャンネルのチャットログを収集しています。
> 「`放送部 - 機材 - 雑談チャンネル - [93848874438859342977995432].html`」というファイルに保存されました。
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/4e140ab0-4bd0-075c-1992-0f798b649518.png)


実行後はFinderを開いて確認します。
Finderは次のコマンドで開くことができます。ドットの手前に半角スペースが必要なので注意してください。
```shell
open .
```
今回の例では、「`放送部 - 機材 - 雑談チャンネル - [93848874438859342977995432].html`」というファイル名で保存されています。
ログファイルはブラウザにドラッグ・アンド・ドロップすると開けます。

お疲れさまです。解説は以上となります:like:

## 続けて他チャンネルもログ収集
「他のチャンネルのログも収集したい」といった方のために、その場合についても簡単に記載しておきます。

とはいえ、2回目以降はすごく簡単です。
`{チャンネルID}`のところだけ書き換えて再実行するだけです。
２回目以降の実行は非常にスムーズに取得できます。

## まとめ:star: 
以上、`DiscordChatExporter`のDocker版の利用方法を解説しました。
なお、別のチャンネルのチャットログを収集する際は、チャンネルIDだけを書き換えてあげるだけで収集できます。
一つ一つのチャットログをスクショを撮ったりコピペしたりするのはすごく手間だったのですが、このツールを使うことであっという間に全件取得でき非常に便利です。ぜひ試してみてください。
最後に、素晴らしいツールを開発してくれた`Tyrrrzさん`に感謝したいと思います。皆さんももしよかったら[`DiscordChatExporter`のGitHub](https://github.com/Tyrrrz/DiscordChatExporter)に[`Star`](https://ja.stackoverflow.com/questions/57251/github%E3%81%AE%E3%82%B9%E3%82%BF%E3%83%BC%E3%81%AF%E3%81%A9%E3%81%86%E3%81%84%E3%81%86%E6%99%82%E3%81%AB%E9%80%81%E3%82%8B%E3%81%8B)をお願いします :thumbsup: :star: 


## 参考資料
- Tyrrrz/DiscordChatExporter: Exports Discord chat logs to a file https://github.com/Tyrrrz/DiscordChatExporter
- DiscordChatExporter/Token-and-IDs.md at master · Tyrrrz/DiscordChatExporter · GitHub https://github.com/Tyrrrz/DiscordChatExporter/blob/master/.docs/Token-and-IDs.md