LoginSignup
10
8

More than 5 years have passed since last update.

Slackのファイルを一括で保存・削除するやつを作った

Last updated at Posted at 2017-12-26

こんにちは hashibiroko です。

Slackにアップロードされたファイルを保存し、Slack上に残しておく必要がなければ削除するプログラムをGolangで作りました。

私が参加しているあるSlackでは、私を含めて約40人の学生が無料枠で活動しています。そんななか、いたるチャンネルで無差別にファイルのアップロードが行われ、知らないうちにストレージが無料枠の5GBを超えてしまいました。ストレージ容量がなくなると新しいファイルがアップロードできなくなります。

そこで今回は、ファイルをどこかに保存しSlack上から削除してしまうことで、もう一度容量を確保することにしました。

TL;DR

作ったものはこちらです ☞ hashibiroko/slack-filesave

このプログラムを実行すると、ファイルのダウンロードを並行に行います。
また、削除の指定を行うとダウンロードが完了したものから削除を行います。
削除は、1秒に1回ずつ行うため、ダウンロードが早く終わった場合は削除を待つ必要があります。

⬇以下のようにして使用します。

$ go get github.com/hashibiroko/slack-filesave
$ slack-filesave -token=xxxxxx-xxxxxxxxx

実行には、SlackのTokenを指定してください。
その他に、以下のようなオプションを指定できます。

指定できるオプション

名前 説明 初期値
type ファイルのタイプ all
private プライベートファイルを含める
delete 保存後に削除を行う

例:$ slack-filesave -token=xxxxxx-xxxxxxxxx -file=image -private -delete

その後

このプログラムの実行によってパブリックなファイルが全て削除され、3GB近くの容量を確保できました。とりあえずはこれで、ファイルのアップロードが出来ないという問題は解決されました。しかし、今後はファイルの管理方法自体を考えていかないと、またすぐ同じ状況になりかねないため、何か解決策を考えたいです。

作ってみた感想

やはり私も学生ということで、このプログラムを作ってみたあとの学びを感想という形で残したいと思います。今回、このプログラムはGolangで作ってみたのですが、以前からGolangを使って個人的なCLI等の作成をしていたため、導入で躓くことはとくになかったかなという感じです。ただ、ゴルーチンやチャネルは今まで一度も使ったことがなかったため、それぞれのゴルーチンの同期を考えたりするのが結構大変でした。正直なところ、まだどんな設計が良かったのかわかっていないのと、今回の設計がこれで大丈夫なのかという不安もあったりします。パッケージの分け方とか、ファイル分割の単位とかも良くわかりません!ということで、今後はGolangで書かれたオープンソースなコードを読んで勉強していきたいです。

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8