目次
まず結論:scopeを足す前に、method・token・install先を照合する
Slack APIの missing_scope は、呼び出したAPI methodが必要とするOAuth scopeを、リクエストのtokenが持っていないときに返るエラーです。scope名を設定画面へ追加しただけでは直らないことがあります。scopeを追加したアプリが対象workspaceへ再インストールされておらず、古いtokenを使い続けている、bot tokenとuser tokenを取り違えている、違うworkspaceのtokenを呼び出しに使っている、といった原因があるためです。
最初にAPI responseの error、needed、providedを安全に確認し、呼び出したmethodの公式ページに記載された必要scope、実際のtoken種別、対象workspaceのinstall状態、実行中のtokenの出所を別々に調べます。access tokenそのものをログ、Issue、画面共有へ出さないでください。
ここで大切なのは、scopeを闇雲に追加することではありません。必要最小限の権限を選び、そのscopeを使うtokenを、正しいアプリとworkspaceで取得し直すことです。実際のApp設定、API request、Workspaceは与えられていないので、この記事は切り分けの手順を示し、個別のmissing_scope原因を断定しません。
responseから必要scopeと提供scopeを読む
Slack Web APIのエラーresponseに missing_scope がある場合、neededはmethodが必要とするscope、providedはその呼び出しで認識されたscopeの一覧を示す例があります。methodによってresponse形式や、scope以外の制約は異なります。responseを確認するときは、HTTP statusとJSONの ok、error、needed、providedを見ます。token値、Authorization header、Cookieは保存しないでください。
たとえば必要scopeに chat:write、提供scopeにそれがなければ、まず当該methodがbot tokenを受け付けるのか、user tokenが必要なのかを公式methodページで確かめます。scope名が違うと即断せず、旧scope、resource-based scope、tokenタイプの互換性も確認します。必要scopeがresponseに出ないAPIでは、該当methodの公式ドキュメントを根拠にします。
token値を画面に貼らず、実行環境内で以下の対応表を作ります。
表は横にスクロールできます
| 項目 | 確認すること | 残す記録 |
|---|---|---|
| API method | 実際のmethod名・呼び出し先 | method名 |
| Error | errorと必要scope情報 | error名とscope名のみ |
| Token type | bot / user / app-levelなど | 種別のみ |
| Workspace | tokenが認可されたteam | 安全に扱えるworkspace識別子 |
| App | requestで使うアプリ | App IDなど |
| Install | scope追加後に再認可済みか | Yes / No / Unknown |
この表にtokenの中身や秘密値を転記してはいけません。
bot tokenとuser tokenは代替できるとは限らない
Slackのbot tokenはアプリのbotとして動作し、user tokenは認可したユーザーの代理として動作します。methodが必要とするscopeだけでなく、どちらのtoken種別が対応しているかも確認してください。bot tokenへuser scopeを追加すれば同じ操作ができる、またはuser tokenならbot scopeを使える、と一律に考えることはできません。
Slackのtoken type公式説明によると、bot tokenはアプリに紐づく一方、user tokenは認可ユーザーに紐づき、tokenごとに利用できるscopeと役割が異なります。Workflow tokenなど一部の種類には制約があり、通常のbot tokenと同じ機能を持つとは限りません。API methodページの「Accepted scopes」や対応token typeを確認します。
たとえばチャンネルへ投稿するmethodを呼ぶ場合も、アプリとして投稿するのか、ユーザーの権限で代理投稿するのかで必要な認可の設計が変わります。実行主体を要件から決め、botかuserかを選び、その種別に対応するscopeだけを要求します。単にエラーを消すためにuser scopeへ切り替えると、ユーザー本人の権限で動く設計へ変わるため、影響を理解せず変更してはいけません。
scopeを追加しても既存tokenが自動更新されるとは限らない
SlackアプリのscopeはOAuth認可で要求され、ユーザーまたはworkspaceが許可した内容がtokenへ結びつきます。App Manifestやアプリ設定でscopeを変更しても、すでに発行されたtokenのscopeが自動的に増えるとは限りません。Slackの公式配布・ライフサイクル資料は、新しい権限が既存installに必要となる変更について、該当workspaceで再インストールが必要と説明しています。
復旧時は次の順で確認します。
-
App設定で追加したscopeが正しいtoken typeの欄にあるか。
-
対象workspaceがそのアプリをinstallしているか。
-
scope追加後にそのworkspaceで再認可が完了したか。
-
アプリが新しいOAuth結果を安全に保存したか。
-
API呼び出しが古いtoken、別環境のtoken、別workspaceのtokenを参照していないか。
再インストールはアプリの設定や利用者に影響する操作です。ユーザーに許可されたscope、管理者承認が必要なworkspace、インストール方式を確認して行ってください。必要なscopeを追加した後、再認可やtoken交換を行わず、環境変数だけを変更して済ませようとしないでください。
scopeを増やす前にmethod要件を確定する
scopeはmethodや操作に応じて異なります。あるmethodのエラーで必要だったscopeを、別のmethodにもそのまま適用しないでください。Slack API methodの公式ページで次を確認します。
-
必須scopeと任意scope
-
対応するtoken type
-
bot/userのいずれが操作主体になるか
-
対象リソースへのアクセス条件
-
workspaceや管理者による追加制約
-
classic/legacy scopeと現在のgranular scopeの差
error responseに needed と providedがあれば、公式method要件との照合に使えます。ただしscopeが一致しても、チャンネル参加、リソース共有、管理者ポリシー、対象ID誤りなど他の権限・リソース条件が原因の可能性があります。method名だけで必要scopeが確定しない場合は、APIの正式なreferenceを開き、アプリに付与済みの権限を必要以上に広げないようにします。
手順:古いtokenや別workspaceの取り違えを防ぐ
次の手順は、APIを呼ぶ開発者が自分のapp設定へアクセスできることを前提にしています。
-
失敗したrequestを特定する。 API method、実行環境、時刻、workspaceを記録し、本文やAuthorization headerからtoken値を除外します。
-
responseを読む。 JSONのerrorと、利用できる場合はneeded/providedを記録します。tokenはredactします。
-
methodの公式要件を開く。 必須scopeと受け付けるtoken種別を確認し、response情報と比較します。
-
token typeを確認する。 App設定、OAuth応答のmetadata、secret manager上の変数名などから、bot/user等の種類を値を出さず確認します。
-
workspaceとappを照合する。 tokenを発行したApp ID、workspaceと、requestが対象にするapp/workspaceが一致しているか確認します。
-
scopeの追加先を確認する。 bot token用scopeかuser token用scopeか、methodが受け付ける種類に合うか確認します。
-
再インストール要件を確認する。 scope追加で既存tokenへの再認可が必要なら、workspaceの管理者・配布方式に沿って行います。
-
新しい認可結果を保存する。 アプリが正しいtokenを安全なsecret storeへ保存し、旧tokenを参照する環境がないか調べます。
-
最小範囲で再試験する。 対象workspace、対象method、非本番または安全なテスト対象で実行し、errorと必要なscope名だけ記録します。
-
不要な権限を棚卸しする。 動作確認後も、要求scopeをReader Jobに必要な範囲へ保ちます。
チームのApp設定を変更したり、workspaceへ再インストールする権限がなければ、自分で権限を増やそうとせず管理者へ依頼します。user tokenへ切り替えた場合、操作の主体・監査・利用者権限に関わるので設計担当者の確認も必要です。
原因別の切り分け表
表は横にスクロールできます
| 観測 | 主な候補 | 次の確認 |
|---|---|---|
| neededにscopeがありprovidedにない | scope未認可 | method要件とtoken type |
| App設定にはscopeがあるがprovidedにない | scope追加後に再認可していない | workspace install状態、token発行時点 |
| providedに想定scopeがない | 古いtokenや別tokenを参照 | secret storeのkey mapping、環境 |
| scopeはあるがmethodが失敗する | token type、リソース権限、ID誤り | method受け入れ条件、resource access |
| botでは失敗しuserでは成功 | 操作主体の権限差 | user tokenの使用が要件に合うか |
| 一つのworkspaceだけ失敗 | installや管理者ポリシーの差 | workspace別installと承認 |
| scope追加後も結果が同じ | 古い認可結果や別環境 | OAuth flow、保存先、実行環境 |
この表は候補の整理です。特定の結果だけで原因を断定せず、method要件・token種別・workspace・使われているtokenを一緒に照合します。
失敗を再発させない記録とテスト
OAuth scopeの変更は、method単位で必要理由を記録します。アプリのmanifestやOAuth設定ではbot/userのscopeを分け、各scopeについて使うmethod、必要な操作、対象resourceを書きます。アプリ全体で万能な「必要scope一覧」を使い回すと、不要な権限を要求したり、token typeと機能が不整合になったりします。
テストでは実token値をfixture、console、CI logへ書かず、必要なscopeの集合、token type、resource accessをfake credentialや隔離workspaceで検証します。統合テスト用workspaceを使う場合も、本番ユーザーへメッセージを送らないこと、テストデータの削除範囲が明確であることを確かめます。scope変更時には、新規installだけでなく既存installでの再認可要否を公式のapp lifecycle情報から確認してください。
長期運用では、App Manifestの変更、OAuth要求scope、workspaceの再認可、発行tokenの更新を一組の変更記録として管理します。Scope追加を済ませた人と、実際にAPI requestを発行する実行環境が別の場合、後者のsecret storeに新tokenが反映されたかまで確認します。作業完了条件は「設定にscope名が見える」ではなく、「対象workspace・対象token type・対象methodの再試験が成功し、秘密値が露出していない」です。
最終チェックリスト
-
失敗methodとresponseのerrorを特定した
-
needed/providedはscope名だけを安全に記録した
-
methodの公式要件とtoken typeを照合した
-
bot/user/workflow tokenを区別した
-
Appと対象workspaceのinstall状態を確認した
-
scope追加後に再認可が必要かを確認した
-
requestが古いtokenや別workspaceのtokenを使っていない
-
user tokenへ切り替える場合、代理操作の意味を確認した
-
最小権限でテストし、secretを記録していない
-
API methodが通っただけで、不要なscopeを残していない
次に行うこと
対象requestのmethod名、error、needed、provided、token type、workspace install状況を、秘密値なしで一覧にしてください。次に該当methodのSlack公式referenceで必須scopeと受け付けるtoken typeを照合し、権限設定を変える前にscope追加先と再インストール要件を確定します。workspace管理者権限が必要なら、必要scopeと再認可理由を添えて依頼します。実際のapp設定やrequestを見ていないため、この手順を使って環境固有の原因を特定してください。
Sources
-
Slack API, Token types: https://api.slack.com/concepts/token-types(新しいタブで開く)
-
Slack API, OAuth scopes: https://api.slack.com/scopes(新しいタブで開く)
-
Slack API, OAuth v2 installation: https://api.slack.com/authentication/oauth-v2(新しいタブで開く)
-
Slack Developer Docs, App lifecycle and distribution: https://docs.slack.dev/app-management/distribution/(新しいタブで開く)
-
Slack API, chat.postMessage method example and scope response fields: https://docs.slack.dev/reference/methods/chat.postMessage/(新しいタブで開く)
-
Checked: 2026-10-15
