はじめに
こんにちは、シルです。
今回は、SlackのWeb APIを利用してチャンネルにファイルを投稿してみます。
前提として、基本的なSlackの操作に関する知識やSlackのアカウントが必要です。
こちらで紹介している「files.upload」メソッドについては、2025年3月11日に廃止されます。
詳細は、「4. まとめ」を確認して下さい。
新たな方法についての紹介は後ほど実施いたします。
ファイル投稿の概要
「files.upload」というAPIメソッドを利用し、チャンネルにファイルを投稿してみます。
files.uploadについて
Slack公式の解説ページの内容を簡単にまとめます。
参考:Slack:よく使うWeb API一覧
Slack | files.upload method
エンドポイント
- POST https://slack.com/api/files.upload
スコープ
- Bot User OAuth Tokens:files:write
⇨今回はBot User OAuth Tokensを利用 - User OAuth Tokens :files:write, files:write:user
Content types
application/x-www-form-urlencodedmultipart/form-data
Rate Limites
| Feature/API | Limit | Notes |
|---|---|---|
| Web API Tier 2 | 20+ per minute | Most methods allow at least 20 requests per minute, while allowing for occasional bursts of more requests. |
Limit(制限)について
Web API Tier 2に該当します。
1分間に20以上のリクエスト制限があります。この制限を超えるリクエストを送信すると、SlackのAPIはエラーを返します。
Notes(注意事項)について
1分間に少なくとも20件のリクエストが許可されます。
通常、この制限内でのリクエストが可能ですが、多くのリクエストが必要な場合には、一時的にその制限を超えることができます。
ファイルを投稿する
アプリを作成する
今回は、アプリにScopeを追加するところから実施します。
詳細なアプリの作成手順は、「Slack | Web APIを使用してメッセージを投稿する」を参照して下さい。
① https://api.slack.com/apps/にアクセスし、アプリを選択します。

② 以下の画面が開いたら、左サイドメニューから「OAuth&Permissions」をクリックします。

③ 以下の画面が開いたら、少し下にスクロールします。

④ 「Scopes」内の「Bot Tokens Scopes」項目の「Add an OAuth Scope」ボタンをクリックします。
その後、必要なスコープを入力し、選択します。
今回は、「files:write」を選択します。

⑤ Scopeの追加が完了すると、アプリのreinstallを求められます。
黄色いエリア内の「reinstall your app」リンクをクリックします。

⑥ 以下の画面で内容を確認し、「許可する」ボタンをクリックします。

⑦ これでファイルのアップロードに必要なScopeの設定が完了しました。

チャンネルに作成したアプリを参加させる
詳細なアプリの作成手順は、「Slack | Web APIを使用してメッセージを投稿する」を参照して下さい。
以下の通り、投稿したいチャンネルにアプリを追加する必要があります。

ファイルを投稿する
それでは、メッセージを投稿していきます。
今回は、以下の方法で実行してみたいと思います。
- 「curl」コマンドで投稿
- 「JavaScript」で投稿
「curl」コマンドで投稿
① ターミナルを開きます。
② 以下のコマンドを実行します。
「channel」には、投稿したいチャンネルのチャンネルIDを入力してください。
「Authorization」には、Bot User OAuth Tokenを入力してください。
「file」には、投稿したいファイルのパスを入力して下さい。
「initial_comment」には、投稿したいファイル名など適当なテキストを入力して下さい。
curl -F file=@files.png -F "initial_comment=files.png" -F channels=CXXXXXXXXXX -H "Authorization: Bearer xoxb-xxxxxxxxx-xxxx" https://slack.com/api/files.upload
③ チャンネルを確認すると、メッセージが投稿されていることを確認できました。
「initial_comment」に設定したテキストも、表示されていることがわかります。

参考:Slack | files.upload method
「JavaScript」で投稿
① Node.jsでAxiosを使用する方法で紹介します。
「npm install axios」でパッケージをインストールし、実行コマンド「node xxxx.js」を実行します。
「uploadFileToSlack」には以下の値を設定して下さい。
・「channel」には、投稿したいチャンネルのチャンネルIDを入力してください。
・「filePath」には、投稿したいファイルのパスを入力して下さい。
・「initial_comment」には、投稿したいファイル名など適当なテキストを入力して下さい。
「Authorization」には、Bot User OAuth Tokenを入力してください。
const axios = require("axios");
const fs = require("fs");
const path = require("path");
// Slackのアクセストークンを設定します
const accessToken = "xoxb-your-access-token";
// Slackにファイルをアップロードする関数を定義します
async function uploadFileToSlack(channel, filePath, initialComment) {
try {
// ファイルの内容を読み込みます
const fileData = fs.readFileSync(filePath);
// ファイル名を取得します
const fileName = path.basename(filePath);
// Blob オブジェクトにファイルデータを変換します
const blob = new Blob([fileData], { type: "application/octet-stream" });
// Slackに送信するデータを作成します
const formData = new FormData();
formData.append("file", blob, fileName); // ファイルデータを直接追加します
formData.append("channels", channel);
formData.append("initial_comment", initialComment);
// Slackのfiles.uploadメソッドを使用してファイルをアップロードします
const response = await axios.post(
"https://slack.com/api/files.upload",
formData,
{
headers: {
Authorization: `Bearer ${accessToken}`,
},
}
);
console.log("File uploaded successfully:", response.data);
} catch (error) {
// エラーハンドリングを修正します
if (error.response) {
// サーバーからのレスポンスがある場合
console.error("Error uploading file to Slack:", error.response.data);
} else if (error.request) {
// サーバーへのリクエストが行われ、レスポンスがない場合
console.error("No response received from server.");
} else {
// リクエストすら行われなかった場合
console.error("Error in request:", error.message);
}
}
}
// ファイルをアップロードする
uploadFileToSlack(
"CXXXXXXXXXX",
"files.png",
"files.png"
);
② チャンネルを確認すると、メッセージが投稿されていることを確認できました。

まとめ
【重要】こちらで紹介した「files.upload」メソッドは、廃止となるようです。
概要は以下の通りのようです。
内容は以下のページを参考:
https://api.slack.com/changelog/2024-04-a-better-way-to-upload-files-is-here-to-stay
「files.getUploadURLExternalとfiles.completeUploadExternal」の詳細な解説:
https://api.slack.com/messaging/files#uploading_files
ファイルのアップロードに使用されている元のWeb APIメソッドであるfiles.uploadが、2025年3月11日に廃止されます。2024年5月8日以降、新たに作成されるアプリはこのAPIメソッドを使用できなくなります。
アプリや統合は、files.uploadから移行し、代わりにfiles.getUploadURLExternalとfiles.completeUploadExternalの2つのAPIを活用する必要があります。これらの2つのメソッドを使用することで、特に大きなファイルをアップロードする場合に、より信頼性の高い動作が期待できます。
これら2つのAPIメソッドの使用方法の詳細な解説は、弊社の「ファイルのアップロード」ドキュメントに記載されています。
変更内容は?
- files.uploadメソッドが廃止され、新しいアプリはこのメソッドを使用できなくなります。
どのように準備すればよいですか?
- アプリや統合は、files.uploadからfiles.getUploadURLExternalとfiles.completeUploadExternalに移行する必要があります。
何もしない場合はどうなりますか?
https://api.slack.com/changelog/2024-04-a-better-way-to-upload-files-is-here-to-stay
- 2025年3月11日以降、files.uploadメソッドは使用できなくなり、ファイルのアップロード機能が損なわれる可能性があります。したがって、早めの移行が推奨されます。
今後のためにも、新たな方法への移行を進めていく必要があるようです。
改めて、ファイルをアップロードする方法についてまとめていきたいと思います。



コメント