2018年3月29日
【GAS】Slackのファイルを一括削除したい。
こんにちは。
Slackって便利ですけど、無料プランだと容量制限あるし余計なファイルは削除したいですよね。
なので逐一ファイルを削除するわけなのですが、これが大変です。
選択して削除ができないので、ファイルの横の「・・・」をクリックして削除するを押して確認ポップアップが出てきてクリックしてという流れを繰り返すわけです。
課金して容量増やしてくださいということなんですけど、
そこまででもないのでSlackのAPIを使用してプログラムで簡単に一括削除してみようと思います。
AWSとかHerokuは以前の記事で触ってみたので今回はGoogle Apps Script(GAS)を使用します。
Googleカレンダーやスプレッドシート等と相性がいいようです。
外部システムと連携可でおまけに自分のGoogleアカウントさえ持っていればすぐに始められそうだったのでこちらを。
<手順1>
Slackのアクセストークンを取得します。
認証はこれだけあれば十分みたいです。
こちらから取得します。
https://api.slack.com/web
直接このページには飛びませんが、
Legacy Tokenを探してみると見つかります。
<手順2>
Google Apps Scriptを開いて適当にプロジェクトを作成します。
作成したら環境変数をプロジェクトのプロパティに登録します。
今回は先ほど取得したトークンに加えて、削除する対象のチャンネルまで登録します。
呼び出しは下記のように行います。
var SLACK_ACCESS_TOKEN = PropertiesService.getScriptProperties().getProperty("SLACK_ACCESS_TOKEN");
<手順3>
あとはGAS上でコードを書いていくだけです。
下準備があっという間ですね。
おおまかな処理の流れは下記になります。
1. 環境変数に登録したチャンネル名からチャンネルIDを取得する。
2. チャンネルIDからチャンネルに投稿されているファイルIDを取得(日付指定で対象を特定します)。
3. ファイルを削除
実際のコードは割愛しますが、簡単な解説はしていきます。
1. GASはUrlFetchAppメソッドでHTTPリクエストを送信できます。
送信先はSlackのchannels.listメソッドを参照してください。
引数オプションでアクセストークンを当ててチャンネルIDを指定します。
2. チャンネルIDからファイルIDのリストを取得します。
ファイルを取得するSlackのメソッドはfiles.listになります。
引数オプションで日付指定をする際はGASの仕様上、UnixTimeに変換するようにしてください。
3. 取得したファイルIDを削除します。
files.deleteメソッドを使用します。
これらのメソッドを組み合わせると、
上記のようにアップされた画像でも、
簡単に削除できます。
これだけではわかりづらいので、ログも吐き出してみました。
あとはトリガーで時間指定して定期的に削除すれば容量制限は怖くないですね。
いかがでしたでしょうか。
トリガー使わなくてもチャンネル指定してあげればワンクリックで削除できるので、活用していきたいと思います。