こんにちは 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で書かれたオープンソースなコードを読んで勉強していきたいです。