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

# はじめに（対処した問題）
Slackの新しいワークスペースを作成するに伴い，現在使用しているワークスペースから絵文字を一括でエクスポート＆インポートしようと企てていました．
参考サイトを基にエクスポートしようとしたら，Slackのトークン作成のところで躓きました．

参考にさせていただいたサイト↓
[Slackの絵文字(emoji)を一括エクスポート＆インポートする](https://qiita.com/ne-peer/items/cbdef4f02b1bb6103e51)

というのも，今まで紹介されているエクスポート方法ではSlackのレガシートークンが使われているものが主でした．
しかし，2020/5/5にレガシーテストトークンが作れなくなりました．（すでに作成されているレガシートークンは使用＆再生成できますが，新規作成ができないようになっています．）
[The creation of legacy test tokens is deprecated](https://api.slack.com/changelog/2020-02-legacy-test-token-creation-to-retire)
> 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 トークンの生成と再生成](https://slack.com/intl/ja-jp/help/articles/215770388-API-%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AE%E7%94%9F%E6%88%90%E3%81%A8%E5%86%8D%E7%94%9F%E6%88%90)

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

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

# 手順（一括でエクスポートする）

基本的にはレガシートークンを使用してエクスポートする手順と同様のため，先程も紹介させて頂いた記事（[Slackの絵文字(emoji)を一括エクスポート＆インポートする](https://qiita.com/ne-peer/items/cbdef4f02b1bb6103e51)）に沿って進めていきます．

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

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

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

```terminal:ターミナル

> node -v

```

インストールされていればバージョンが表示されます（筆者はv12.16.3）．
インストールされてない場合は以下のような記事を参考にインストールしてください．
[windows10にNode.jsをインストールする](https://qiita.com/Masayuki-M/items/840a997a824e18f576d8)
[MacにNode.jsをインストール](https://qiita.com/kyosuke5_20/items/c5f68fc9d89b84c0df09)

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

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

```terminal:ターミナル

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

```

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

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

[Slack API](https://api.slack.com/)にアクセスし，右上の「Your Apps」をクリックする．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175966/c96ca014-999a-e545-14e7-f0f1599535dc.png)


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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175966/6e634fea-f02b-fffe-e412-4f2add0e4a8f.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175966/d2da9e67-3990-e2d9-d73f-61c8e2c95ba4.png)

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

作成を許可するとトークンが発行されるのでこちらを次の作業のためにコピーして用意しておく．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175966/7fa74c1f-2d04-36e3-0362-2321e336a0d3.png)

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


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

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

参考にさせて頂いたサイト
[Slackのカスタム絵文字を全てダウンロードする](https://qiita.com/kure/items/7938d92532bb7577d8b8)
[Slackの絵文字(emoji)を一括エクスポート＆インポートする](https://qiita.com/ne-peer/items/cbdef4f02b1bb6103e51)

ファイル名は自分が認識できれば何でもOKです．（下記のファイル名は例）

```js: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](https://chrome.google.com/webstore/detail/neutral-face-emoji-tools/anchoacphlfbdomdlomnbbfhcmcdmjej)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175966/f30747cd-8c49-24e7-9ce9-c55da52ed420.png)


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

# おわりに

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

# 参考サイト一覧
[Slackの絵文字(emoji)を一括エクスポート＆インポートする](https://qiita.com/ne-peer/items/cbdef4f02b1bb6103e51)
[The creation of legacy test tokens is deprecated](https://api.slack.com/changelog/2020-02-legacy-test-token-creation-to-retire)
[windows10にNode.jsをインストールする](https://qiita.com/Masayuki-M/items/840a997a824e18f576d8)
[MacにNode.jsをインストール](https://qiita.com/kyosuke5_20/items/c5f68fc9d89b84c0df09)
[Slack API](https://api.slack.com/)
[Slackのカスタム絵文字を全てダウンロードする](https://qiita.com/kure/items/7938d92532bb7577d8b8)


# おすすめの記事

[【note】ひとりSlackを２週間運用してみて](https://note.com/wmkisaragi/n/n50da213515c4)