Slack のエクスポートについて種類や仕様やフォーマットについて簡単にまとめてみた

エクスポートは二種類ある。

Standard Export と Corporate Export。

Standard Export

「ワークスペース管理者 or オーナー」が「すべてのパブリックチャンネル」について「指定期間に」投稿されたメッセージすべてを json 形式でエクスポートする機能。

期間について以下選択肢がある。

  • 直近1日以内
  • 直近1週間以内
  • 直近1月(30日)以内
  • 全期間
  • 指定期間(startとendをカレンダーで指定)

エクスポートを実行すると Slack 側にリクエストが送信され、ダウンロード準備が整うと案内がメールや通知が来る。案内に従って URL を開くと、エクスポート画面が開いて、ダウンロード可能なリンクが載っている。

ディレクトリ構造

$ cd
D:\download\(ユーザー名) Slack export (期間名)

$ tree /f
│  channels.json
│  integration_logs.json
│  users.json
│  
├─public_channel_01
├─public_channel_02
│      2018-10-24.json
│      
├─public_channel_03
├─public_channel_04
│      2018-10-23.json
│      2018-10-24.json
│      
...

channels.json

各パブリックチャンネルの設定情報。ユーザー名は ID で記述されている。

[
    {
        "id": "XXXXXXXXX",
        "name": "public_channel_01",
        "created": "XXXXXXXXXX",
        "creator": "U4499TRLM",
        "is_archived": false,
        "is_general": false,
        "members": [
            "U4499TRLM"
        ],
        "topic": {
            "value": "",
            "creator": "",
            "last_set": "0"
        },
        "purpose": {
            "value": "",
            "creator": "",
            "last_set": "0"
        }
    },
    ...
]

integration_logs.json

Slack の連携機能を使っている場合は、その情報。

たとえば以下は Email 連携(Gmail で受信したメールを指定チャンネルにも流す等) を行っているので、その分の設定が書いてある。

[
    {
        "user_id": "U4499TRLM",
        "user_name": "stakiran",
        "date": "XXXXXXXXX",
        "change_type": "updated",
        "service_id": "XXXXXXXXXXXX",
        "service_type": "Email",
        "scope": "incoming-webhook",
        "channel": "C8RQL22SW"
    },
    ...
]

users.json

ワークスペースに参加するユーザー情報。

[
    {
        "id": "U4499TRLM",
        "team_id": "T44T06U8P",
        "name": "stakiran",
        "deleted": false,
        "color": "XXXXXX",
        "real_name": "XXXX XXXX",
        "tz": "Asia\/Tokyo",
        "tz_label": "Japan Standard Time",
        "tz_offset": 32400,
        "profile": {
            "title": "",
            "phone": "",
            "skype": "",
            ...
        },
        "is_admin": true,
        "is_owner": true,
        "is_primary_owner": true,
        "is_restricted": false,
        "is_ultra_restricted": false,
        "is_bot": false,
        "is_app_user": false,
        "updated": XXXXXXXXXX
    },
    ...
]

YYYY-MM-DD.json の中身

1メッセージ1オブジェクト、が配列で並んでいる感じ。

細かい中身はメッセージ内容によってだいぶ違う。下記は連携で Twitter の検索結果を流しているので、bot_message などと表記されている。これが普通のメッセージだと "text" 欄にデータが入っていたりする。

[
    {
        "username": "IFTTT",
        "icons": {
            ...
        },
        "attachments": [
            {
                "title": "XXXXXXXX",
                ...
            }
        ],
        ...
        "text": null,
        "type": "message",
        "subtype": "bot_message",
        "ts": "XXXXXXXXXX.XXXXXX"
    },
    ...
]

Corporate Export

プライベートチャンネルやダイレクトメッセージなど「関係者しか見れないプライベートなデータ」を「ワークスペースのオーナー」が「やむを得ない事情で取得したい」場合に使えるエクスポート機能。

やむを得ない事情とは何だと思うが、Slack のインポート/エクスポートの手段 – Slack から一部引用すると、

企業がハラスメントや企業秘密の盗難の報告を受け、職場での調査を行う必要がある場合。

特定の通信内容の一定期間における記録保管が規制により義務付けられている金融サービス企業。

訴訟や捜査により、裁判所命令で Slack の情報を開示しなければならない場合。

出番は限られそうである。

ちなみに Corporate Export エクスポート時に Slack 側への申請 が必要となる。無条件にエクスポートできるわけではない。

どちらを使うべき?

私はひとり Slack をしているので、

stakiran.hatenablog.com

Standard Export で十分。