【Slack】レガシーテストトークンを使わずに絵文字を一括でエクスポートする


はじめに(対処した問題)

Slackの新しいワークスペースを作成するに伴い,現在使用しているワークスペースから絵文字を一括でエクスポート&インポートしようと企てていました.
参考サイトを基にエクスポートしようとしたら,Slackのトークン作成のところで躓きました.

参考にさせていただいたサイト↓
Slackの絵文字(emoji)を一括エクスポート&インポートする

というのも,今まで紹介されているエクスポート方法ではSlackのレガシートークンが使われているものが主でした.
しかし,2020/5/5にレガシーテストトークンが作れなくなりました.(すでに作成されているレガシートークンは使用&再生成できますが,新規作成ができないようになっています.)
The creation of legacy test tokens is deprecated

We're deprecating legacy test tokens and will disallow the creation of new test tokens beginning May 5th, 2020.

2020/5/13現在のSlackで新しいトークンを使用するにはSlackアプリを作成するようにと記述されています.
API トークンの生成と再生成

注意 :レガシーテストトークンを新しく作成することはできなくなりました。Slack API を操作するために新しいトークンが必要な場合は、代わりに Slack アプリを作成してください。

今回はレガシートークンで今まで絵文字をエクスポートしていたものを上記に紹介したSlackアプリで代替することで実現していきます.

手順(一括でエクスポートする)

基本的にはレガシートークンを使用してエクスポートする手順と同様のため,先程も紹介させて頂いた記事(Slackの絵文字(emoji)を一括エクスポート&インポートする)に沿って進めていきます.

  1. Node.jsをインストールする
  2. 必要なモジュールをインストールする
  3. エクスポート元のSlackチームのAPIトークンを取得する(←ここが変わる)
  4. スクリプトファイルを作成する
  5. スクリプトファイルを実行する

1. Node.jsをインストールする

ターミナルでnode -vを打つことで確認できます.

ターミナル

> node -v

インストールされていればバージョンが表示されます(筆者はv12.16.3).
インストールされてない場合は以下のような記事を参考にインストールしてください.
windows10にNode.jsをインストールする
MacにNode.jsをインストール

2. 必要なモジュールをインストールする

今回使用するモジュールをインストールします.

ターミナル

> npm install slack-node
> npm install request
> npm install fs

3. エクスポート元のSlackチームのAPIトークンを取得する(←ここが変わる)

ここまでは筆者も順調に進んでいましたが,参考記事にあるようなレガシートークンを発行できないところで詰みました.
そこで今回はSlackアプリを作成することで乗り越えます(他にも良い方法があるかもしれません.)

Slack APIにアクセスし,右上の「Your Apps」をクリックする.

「Create New App」をクリックして,「App Name」に適当なアプリ名(例:import-emoji)を入れて,「Development Slack Workspace」にエクスポートしたいワークスペースを選択する(ここでエクスポートしたいチャンネルが出ない場合はログインが必要).

作成したらページが遷移するので「Permission」をクリック.

「Scopes」の「User Token Scopes」の下にある「Add an OAuth Scope」をクリックし,「emoji:read」を選択する("emoji"と入力すると候補で上位に出てくる).
選択すると下図の状態になる.

ページの上部に進むと先程までグレーでクリックすることができなかった「Install App to Workspace」が緑色になり,インストール可能となっているため,クリックしてインストールする.
(※ここで無料のワークスペースの場合は10個アプリを連携しているとエラーになってしまうので注意)

作成を許可するとトークンが発行されるのでこちらを次の作業のためにコピーして用意しておく.

これでレガシートークンの代わりとなるトークン作成が終わりました.

4. スクリプトファイルを作成する

VSCodeなどのエディターツールで以下のコードをコピー&ペーストする.(ここは下記サイトにある@kureさんや@ne-peerさんの記事にあるコードを拝借致します.)

参考にさせて頂いたサイト
Slackのカスタム絵文字を全てダウンロードする
Slackの絵文字(emoji)を一括エクスポート&インポートする

ファイル名は自分が認識できれば何でもOKです.(下記のファイル名は例)

slack-emoji-export.js

var Slack = require('slack-node');
var request = require('request');
var fs = require('fs');

apiToken = "<apitoken>"; // ここにAPIトークンを貼り付ける。
slack = new Slack(apiToken);

slack.api("emoji.list", function (err, response) {
    for(key in response.emoji){
        url = response.emoji[key];
        //エイリアスは無視
        if(url.match(/alias/)){
            continue;
        }

        // 取得対象の拡張子
        extention = url.match(/\.[^\.]+$/);

        request
        .get(url)
        .on('response', function (res) {
        })
        .pipe(fs.createWriteStream('image/' + key + extention));
    }
});

上記コードにある// ここにAPIトークンを貼り付けるの行にある"<apitoken>"の部分に先程コピーして用意していたトークンを貼り付ける("xoxp-00000~"という形になればOK).

5. ディレクトリを作成し,スクリプトファイルを実行する

スクリプトファイルを作成&保存した階層と同階層にimageというディレクトリを作成する.(これをしないとエラー発生)

ディレクトリ作成後,以下のコマンドを入力することでエクスポートが完了する(imageディレクトリにすべての絵文字が保存されます).

【補足】一括インポート

筆者が確認時点(2020/5/13)では,一括インポートは従来どおりの方法で可能なことが確認できています.

従来どおりの方法

Chomeの拡張機能をインストール
Neutral Face Emoji Tools

上記ツールをインストール後,
Slackで「ワークスペースをカスタマイズ」の「絵文字」のタブに行くとドラック&ドロップで一括で絵文字をインポートできます.

筆者がインポートに使用しようとしたときには上の画像のように拡張ツールのインポート画面が出てこなくて非常に焦りましたが,適当なカスタム絵文字を1つ追加するだけで上記のような画面が出てきます

おわりに

これで今まで通りSlackのカスタム絵文字を簡単に移行させて使い倒していきましょう.

参考サイト一覧

Slackの絵文字(emoji)を一括エクスポート&インポートする
The creation of legacy test tokens is deprecated
windows10にNode.jsをインストールする
MacにNode.jsをインストール
Slack API
Slackのカスタム絵文字を全てダウンロードする

おすすめの記事

【note】ひとりSlackを2週間運用してみて