Slackのfiles.upload APIを使ってファイルを簡単に連携する


AWS等のクラウドサービスでサーバ内で作業をしていて、ファイルをローカルに落としたい、なんてことありませんか?
セキュアなファイルを取り扱うなら考えることは多くなるかと思いますが、雑に扱っていいものは手軽に操作したいですよね。

ということで、slackを使って簡単にファイルを連携する方法を自分のために書き残します。

準備するもの

  • Slackのワークスペースおよび投稿先のチャンネル
  • 適当なサーバ(curlコマンドが使えるもの)
  • 「楽をしたいんだ」という強い気持ち

Slackのアプリ作成

先ずは、Slackでアプリを作成します。

つぎ、 https://api.slack.com/ にアクセスします。

「Start Building」を押下します。


「Create a Slack App」のダイアログが出るので、アプリ名とワークスペースを指定します。
設定出来たら「Create App」を押下します。


アプリが出来上がったら、「Permissions」を押下します。

「OAuth & Permissions」の画面に遷移するので、下の方にある「Scopes」に移動します。

「Add an OAuth Scope」を押下し「files:write」を選択します。


Scopeの追加が出来たら上のほうに移動し、「Install App to Workspace」を押下します。


確認を求められるので内容を確認して許可してください。

許可が完了したら「OAuth & Permissions」の画面に戻ってきます。

「Bot User OAuth Access Token」が表示されていると思うので、これを控えておきます。

Slack API側の設定はこれで終わりです。

Slackにファイルアップロードしてみる

APIの使い方は以下のURLを参考にしてください。
https://api.slack.com/methods/files.upload

curl -F [email protected] -F "initial_comment=Shakes the cat" -F channels=C024BE91L,D032AC32T -H "Authorization: Bearer xoxa-xxxxxxxxx-xxxx" https://slack.com/api/files.upload

公式のサンプルはこのように書かれています。

こちら、必要な情報は最低限は以下の3つです。

  • file : アップロードするファイル
  • channels : アップロード先のチャンネル(チャンネル名でもIDでもいい)
  • Authorization : 先ほど取得したトークン(xoxb-… のアレ)

この3つです。

curl -F file=@./現場猫.jpg -F channels=#ファイル置き場 -H "Authorization: Bearer xoxb-xxxxxxxxxxxx-xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx" https://slack.com/api/files.upload

このようにcurlのパラメータを指定してみました。
結果は以下の通り。


アップロードできました。

これで、共有したいファイルはコマンド叩けばいつでも共有できますね。

私からは、以上です。