GitHub Actions:止まらない実行をキャンセルする
ワークフローの実行のキャンセルは、GitHub にジョブを止めるよう頼む物です。ただし続けてよいジョブもあり、ランナーが止まるまで最大5分は実行中のままになり得ます。キャンセルに応じない実行には、条件を飛ばす2つ目の頼み方 force-cancel があります。ジョブが1つも無いまま Queued で止まった実行は別の話で、2026年の公開の報告では、どちらの頼み方も失敗しています。
キャンセルで起きること
GitHub の Workflow cancellation reference にある手順:
- 動いているジョブすべての
ifの条件を、もう一度評価します。条件が真のジョブはキャンセルされません。if: always()は真なので、そのジョブは動き続けます。条件の無いジョブはif: success()と同じ扱いで、キャンセルされます。 - キャンセルするジョブのランナーに知らせが送られます。続くジョブでは、まだ終わっていないステップの
ifをもう一度評価します。ここから先のステップではcancelled()が真です。 - キャンセルするステップには
SIGINT/Ctrl-C を送り、7,500 ミリ秒で終わらなければSIGTERM/Ctrl-Break、さらに 2,500 ミリ秒後も動いていればプロセスのツリーごと止めます。 - 5分たつと、キャンセルの印が付いたまま動いているジョブとステップを、GitHub がすべて止めます。
つまり、キャンセルした実行もしばらくは in progress のままで、後片付けのジョブ(if: always() や if: cancelled())は最後まで動きます。長く動いては困るジョブには timeout-minutes を付けます。失敗の後には動かしたいがキャンセルの後には動かしたくないジョブには、always() の代わりに if: ${{ !cancelled() }} を、と GitHub のトラブルシューティングの案内は勧めています。
キャンセル、だめなら force-cancel
GitHub では、実行を開いて右上の Cancel workflow。ターミナル(GitHub CLI)では:
gh run cancel RUN_ID gh run cancel RUN_ID --force
--force は GitHub CLI 2.78.0(2025年8月、cli/cli#11513)からです。REST API にも同じ2つがあり、どちらも 202 Accepted、GitHub が断るときは 409 Conflict を返します:
curl -X POST -H "Authorization: Bearer <トークン>" \ https://api.github.com/repos/OWNER/REPO/actions/runs/RUN_ID/cancel curl -X POST -H "Authorization: Bearer <トークン>" \ https://api.github.com/repos/OWNER/REPO/actions/runs/RUN_ID/force-cancel
- force-cancel は、ジョブの always() のような「実行を続けさせる条件」を飛ばします。GitHub は、ふつうのキャンセルに応じないときだけ使うよう求めています(REST API。2023年9月に追加、changelog)。後片付けのジョブも飛ばされます。
- どちらも、classic なら
repoのスコープ、fine-grained なら Actions の読み書きの権限のトークンが要ります(GitHub の権限の表)。無いと HTTP 403 「Resource not accessible by personal access token」です。
ジョブが無いまま「Queued」で止まった実行
GitHub のコミュニティの公開の報告に、ジョブ0件・ランナーもログも無いまま Queued で止まり、キャンセルできない実行がいくつもあります:
- 画面では「Failed to cancel workflow.」。API の cancel と force-cancel は HTTP 500
"message": "Failed to cancel workflow run"(#196717・2026年5月、#203685・2026年8月)。 - force-cancel が HTTP 409「Cannot cancel a workflow run that has not been queued yet.」(#206436・2026年9月)、再実行なら「Cannot cancel a workflow re-run that has not yet queued.」(#196717・2026年8月)。
- 代わりに実行を消そうとすると HTTP 403「Could not delete the workflow run.」(#203685・#196717)。
報告した人たちがしたこと:後ろに新しい実行が並ばないよう、ワークフローを無効にした(gh workflow disable、またはワークフローのページの Disable workflow)。ワークフローの concurrency のグループも確かめた(止まった実行が後の実行を待たせることがある)。1人は GitHub サポートへの問い合わせを答えにしています。
GitHub のトラブルシューティングの案内にも、いまは同じ場合が書かれています。キャンセルしても Queued や実行中のまま残り、ジョブが無い、「Failed to cancel workflow」と出る、cancel や force-cancel が HTTP 500 や 409 を返す実行は、異常な状態で止まっているかもしれません。force-cancel を含めて自分でのキャンセルでは消えないことがあり、concurrency を使っていると同じグループの後の実行を待たせ続けます。そのときは GitHub Support portal から頼んで実行を片付けてもらうよう、GitHub は書いています。
IntelliJ IDEA から実行をキャンセルするなら
Pipeline Inbox for GitHub Actions Workflows は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。すべてのリポジトリの実行を IDE のツールウィンドウに並べます。実行をキャンセル(英語の画面では Cancel Run)は、確かめてから、ふつうのキャンセルを送り、実行を読み直します。理由つきの断り(HTTP 409)は、GitHub の言葉のまま出します。force-cancel はしません。キャンセルに応じない実行には gh run cancel --force を使います。読むのは無料、再実行・キャンセル・ワークフローの実行・デプロイのレビューは Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
GitHub と GitHub Actions は GitHub, Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:「Unable to retry this workflow run because it was created over a month ago」 · 「Waiting」でレビューを待つデプロイを承認する · IntelliJ IDEA で使える GitHub Actions のプラグインの比較 · English