🙆

slack-go/slack ライブラリを利用したアプリで Slack の files.upload API 廃止に対応する

2024/05/05に公開

はじめに

2025年3月で Slack の files.upload API が廃止になるそうです。
https://x.com/seratch_ja/status/1786196263085670423

詳しい情報はこちらにあります: https://zenn.dev/slack/articles/7ce5065cc4daa7

が、上記には

の情報はあるのですが、Go 関連の情報はないようだったので、slack-go/slack で古い API を利用していたのを対応したメモを残します。

利用箇所

kagome-bot という形態素解析結果を slack のメッセージとして返す bot で、解析結果のグラフのイメージを Slack にアップロードするために古い slack-go の API を利用していました。

解析結果

対応

slack-go には Slack の file.upload v2 API に対応した API が既に存在するので、こちらに置き換えていきます。

以下は実際に kagome-bot でファイルアップロードをおこなっていた部分のコードです。画像は、直接ファイルにあるものをアップロードするのではなく、メモリ上に構築したものを io.Reader を経由してアップロードしています。

Before

https://github.com/ikawaha/kagome-bot/blob/83a8a83754d899684218953641832c41fb85f401/client/handler.go#L100-L110

After

https://github.com/ikawaha/kagome-bot/blob/9600053d1f745e58eb17edb803c76a4cdb1a2e7a/client/handler.go#L101-L117

v2 では、メモリ上の画像のサイズを渡すように変更されました。あとはおおむね同じ感じです。

パラメータに File という文字列のフィールドがあるのですが(←上では使われてない)、上記のようにメモリ上の画像をアップロードするのではなく、実際にファイルをアップロードする場合は、こちらにパスを指定するようです。ややこしいですが、Filename というフィールドの方は、アップロード後の Slack 上でのファイル名になります(Slack からダウンロードしたときのファイル名です)。

おわりに

slack-go/slack を利用して Slack にファイルをアップロードしている場合には、そんなに大きな変更にならずに置き換えられました。

これから置き換えようかなと思っている方の参考になれば幸いです。

Happy hacking!

Discussion