[{"data":1,"prerenderedAt":362},["ShallowReactive",2],{"content-/github-actions-free-minutes-exhausted-ci-failures":3,"all-pages-for-dir":341,"related-/github-actions-free-minutes-exhausted-ci-failures":342,"og-image-/github-actions-free-minutes-exhausted-ci-failures":361},{"id":4,"title":5,"body":6,"category":321,"concepts":322,"description":323,"extension":324,"meta":325,"navigation":326,"ogImage":322,"path":327,"project_name":328,"published":329,"publishedAt":330,"seo":331,"source":332,"stem":333,"tags":334,"todo":322,"unpublished":329,"updatedAt":322,"__hash__":340},"pages/2026-10/2026-10-10/github-actions-free-minutes-exhausted-ci-failures.md","GitHub Actions の無料枠2,000分を使い切った原因は、10月4日から失敗し続けていたCIだった",{"type":7,"value":8,"toc":312},"minimark",[9,13,17,20,29,34,37,40,43,46,54,58,61,99,102,106,117,120,124,127,148,154,197,200,203,206,209,212,215,218,225,228,231,234,282,285,302,308],[10,11,5],"h1",{"id":12},"github-actions-の無料枠2000分を使い切った原因は10月4日から失敗し続けていたciだった",[14,15,16],"p",{},"GitHub から通知が来た。\n今月の Actions 無料枠2,000分を、100%使い切ったという。\n次のリセットは11月1日だ。",[14,18,19],{},"その直後から、Eurekapu の自動テストが3〜4秒で失敗する実行が出はじめた。\n利用枠が原因かもしれない。\nただ、エラーの詳細も追加課金の設定も、まだ確認できていなかった。\n再実行する前に、Actions のエラー表示と利用上限を確かめたほうがよさそうだと考えた。",[14,21,22,23,28],{},"同じセッションでは、直前まで「サブエージェントのプロンプトキャッシュは5分しか持たない（本体は1時間）」という話の真偽を、手元のログで確かめていた。\nTTL が違うのは本当で、「5分を過ぎるとフルプライスがドカンと来る」は言い過ぎだった。\nこちらは ",[24,25,27],"a",{"href":26},"/claude-code-subagent-cache-ttl","Claude Code のサブエージェントのキャッシュ寿命を測った記事"," にまとめてある。\nその記事をまとめるよう頼むのと一緒に、Actions の件も Claude Code に調べさせた。",[30,31,33],"h2",{"id":32},"_34秒で落ちる理由と枠を減らした理由","3〜4秒で落ちる理由と、枠を減らした理由",[14,35,36],{},"3〜4秒で落ちる原因は、支出上限だと確定した。",[14,38,39],{},"ただし、それは枠を使い切ったあとの話である。\n10月の枠を使い切った本当の原因は、CI が10月4日から失敗し続けていたことだった。",[14,41,42],{},"自分の見立ては、こうだった。\n失敗が30個あり、そのうち長時間かかって失敗したのが28回ある。\nほぼこの28回が原因だろう。\n毎回エラーが出ていて困っていたので、そのまま修正を頼んだ。",[14,44,45],{},"調べさせると、失敗の原因は1つではなかった。\n主因はカード枚数のテストで、ほかにも2種類の失敗が混ざっていた。",[14,47,48,49,53],{},"時間の使い方にも偏りがあった。\nユニットテストの所要時間の89%（23.5分）を、",[50,51,52],"code",{},"excelSceneBookRegression.test.ts"," の1本が占めていた。",[30,55,57],{"id":56},"gh-に-user-スコープを足す","gh に user スコープを足す",[14,59,60],{},"並行して、自分のターミナルから次のコマンドを打った。",[62,63,68],"pre",{"className":64,"code":65,"language":66,"meta":67,"style":67},"language-bash shiki shiki-themes vitesse-light vitesse-light","gh auth refresh -h github.com -s user\n","bash","",[50,69,70],{"__ignoreMap":67},[71,72,75,79,83,86,90,93,96],"span",{"class":73,"line":74},"line",1,[71,76,78],{"class":77},"senZ8","gh",[71,80,82],{"class":81},"sdGka"," auth",[71,84,85],{"class":81}," refresh",[71,87,89],{"class":88},"snbK4"," -h",[71,91,92],{"class":81}," github.com",[71,94,95],{"class":88}," -s",[71,97,98],{"class":81}," user\n",[14,100,101],{},"コマンドは120秒のタイムアウトで打ち切られ、バックグラウンドに回された。\nコードを入力すると、アクセスできた。\n認証が通ってから、支出上限の確認と、直したテストの手元での実行を Claude Code に同時に進めさせた。",[30,103,105],{"id":104},"_3つの原因の修正と-push","3つの原因の修正と push",[14,107,108,109,112,113,116],{},"CI が毎回落ちていた原因を3つとも直させ、コミットして push した（",[50,110,111],{},"6e93d9e5","）。\nこのとき、別のセッションが ",[50,114,115],{},"sim-modules"," のファイルをステージしていた。\nそれは巻き込まず、パスを指定して自分の4ファイルだけをコミットさせた。",[14,118,119],{},"ただし、GitHub 上の CI で通るかはまだ確かめられていない。\nActions は枠切れで、11月1日まで動かないからだ。",[30,121,123],{"id":122},"回帰テストを-actions-で回すか","回帰テストを Actions で回すか",[14,125,126],{},"回帰テストは、ローカルで流してもタイムアウトしていた。\nそれなら GitHub Actions で回さないほうがいいのではないか、と自分から言った。",[14,128,129,130,132,133,136,137,140,141,144,145,147],{},"返ってきたのは、その対応はもう済んでいる、という答えだった。\n",[50,131,111],{}," で、CI のユニットテストに ",[50,134,135],{},"SCENE_TARGETS=none"," が付いていた。\nGitHub Actions では、画面再現の回帰テスト2本（",[50,138,139],{},"excelSceneRegression"," と ",[50,142,143],{},"excelSceneBookRegression","）はもう流れない。\nこの2本が飛ばされることも、Claude Code が手元で ",[50,146,135],{}," を付けて確かめてあった。",[14,149,150,151,153],{},"手元で全区間を一度に流すとタイムアウトするのは、",[50,152,143],{}," だけで23分かかるためだ。\n台本やエンジンを直したときは、変更が効く区間だけを手元で流す。",[62,155,157],{"className":64,"code":156,"language":66,"meta":67,"style":67},"# CI 側：画面再現の回帰テスト2本を飛ばす\nSCENE_TARGETS=none\n# 手元：変更が効く区間だけを流す\nnode scripts/test-scene-regression.mjs --changed\n",[50,158,159,165,179,185],{"__ignoreMap":67},[71,160,161],{"class":73,"line":74},[71,162,164],{"class":163},"sxvE3","# CI 側：画面再現の回帰テスト2本を飛ばす\n",[71,166,168,172,176],{"class":73,"line":167},2,[71,169,171],{"class":170},"s4oTP","SCENE_TARGETS",[71,173,175],{"class":174},"shFtX","=",[71,177,178],{"class":81},"none\n",[71,180,182],{"class":73,"line":181},3,[71,183,184],{"class":163},"# 手元：変更が効く区間だけを流す\n",[71,186,188,191,194],{"class":73,"line":187},4,[71,189,190],{"class":77},"node",[71,192,193],{"class":81}," scripts/test-scene-regression.mjs",[71,195,196],{"class":88}," --changed\n",[14,198,199],{},"自分が言い出したときには、同じ線引きがもうコミットに入っていた。",[30,201,202],{"id":202},"別セッションの差分がターミナルに混じる",[14,204,205],{},"コミットの話の途中で、ターミナルに別セッションの差分が混じって表示されていた。\n表示だけでなく、セッションログにも混じっているのではないか。\nもしそれがコンテキストに入っているなら、完全にバグである。\nそう考えて、このセッションのログファイルを見に行かせた。",[14,207,208],{},"ログには記録されていた。\nただし、AI に渡るコンテキストには入っていなかった。",[14,210,211],{},"最初は「ログには記録がなく、ターミナルの表示だけの問題」と受け取り、不思議だと聞き返した。\n答えは逆で、ログには記録されているので、ターミナルの表示だけの問題ではない、とのことだった。\nコンテキストに入っていないことは、確認済みだという。",[30,213,214],{"id":214},"積み残しの片付けとメモリの逼迫",[14,216,217],{},"積み残しを尋ねると、3件残っていた。\n1件目は、キャッシュの記事がまだ未コミットで、公開されていないことだった。",[14,219,220,221,224],{},"記事をコミットさせ（",[50,222,223],{},"4628b1e5","）、続けて11月1日のタスクの登録へ進めさせた。\nそのあと、デプロイ前の検査に入った。\n未公開の別記事を一時的に退避し、未公開記事へのリンクを文字表記に直して、検査を流し直した。\n検査はすべて通り、デプロイは11時39分に始まった。\n見込みは12〜20分で、プリレンダー（3,117ページ）まで進んだ。",[14,226,227],{},"ここで、手元のメモリがパンパンになった。\n一旦止めてほしいと頼んだ。",[14,229,230],{},"デプロイはプリレンダーの途中で止まり、本番にはまだ何もアップロードされていなかった。\n退避していた記事も元に戻した。",[14,232,233],{},"メモリの使い道を調べさせると、一番大きいのは eurekapu-nuxt4 の開発サーバー（ポート3200）だった。",[235,236,237,250],"table",{},[238,239,240],"thead",{},[241,242,243,247],"tr",{},[244,245,246],"th",{},"使っているもの",[244,248,249],{},"メモリ",[251,252,253,266,274],"tbody",{},[241,254,255,263],{},[256,257,258,259,262],"td",{},"開発サーバーの下にぶら下がる ",[50,260,261],{},"workerd"," 143個",[256,264,265],{},"約6GB",[241,267,268,271],{},[256,269,270],{},"開発サーバー本体",[256,272,273],{},"1.9GB",[241,275,276,279],{},[256,277,278],{},"合計",[256,280,281],{},"約8GB",[30,283,284],{"id":284},"振り返り",[286,287,288,292],"ul",{},[289,290,291],"li",{},"テストが3〜4秒で落ちる失敗と、枠を減らした失敗は別物だった。前者の原因は支出上限で、後者は10月4日から失敗し続けていた CI だった",[289,293,294,295,297,298,301],{},"ローカルでもタイムアウトする回帰テストは、CI から外した。CI では ",[50,296,135],{}," で飛ばし、手元では ",[50,299,300],{},"--changed"," で変更が効く区間だけを流す",[14,303,304,305,307],{},"直した ",[50,306,111],{}," が GitHub 上で通るかどうかは、11月1日に枠が戻るまで分からない。",[309,310,311],"style",{},"html pre.shiki code .senZ8, html code.shiki .senZ8{--shiki-default:#59873A;--shiki-dark:#59873A}html pre.shiki code .sdGka, html code.shiki .sdGka{--shiki-default:#B56959;--shiki-dark:#B56959}html pre.shiki code .snbK4, html code.shiki .snbK4{--shiki-default:#A65E2B;--shiki-dark:#A65E2B}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sxvE3, html code.shiki .sxvE3{--shiki-default:#A0ADA0;--shiki-dark:#A0ADA0}html pre.shiki code .s4oTP, html code.shiki .s4oTP{--shiki-default:#B07D48;--shiki-dark:#B07D48}html pre.shiki code .shFtX, html code.shiki .shFtX{--shiki-default:#999999;--shiki-dark:#999999}",{"title":67,"searchDepth":167,"depth":167,"links":313},[314,315,316,317,318,319,320],{"id":32,"depth":167,"text":33},{"id":56,"depth":167,"text":57},{"id":104,"depth":167,"text":105},{"id":122,"depth":167,"text":123},{"id":202,"depth":167,"text":202},{"id":214,"depth":167,"text":214},{"id":284,"depth":167,"text":284},"dev",null,"GitHub Actions の無料枠2,000分を使い切ったという通知を受けて、原因を調べた。テストが3〜4秒で落ちるのは支出上限のせいで、枠を減らしていたのは10月4日から失敗し続けるCIだった。直して push したが、GitHub 上で通るかは11月1日まで確かめられない。","md",{},true,"/github-actions-free-minutes-exhausted-ci-failures","eurekapu-nuxt4",false,"2026-10-10T00:00:00.000Z",{"title":5,"description":323},"make-diary","2026-10/2026-10-10/github-actions-free-minutes-exhausted-ci-failures",[335,336,337,338,339],"GitHub Actions","CI","回帰テスト","gh CLI","Claude Code","h32XncxxPBBBMQcqLE4oXCCnjBCHBIC88m2iBnZc10Y",[],[343,347,351,354,357],{"title":344,"path":345,"publishedAt":346},"GitHub ActionsのCIが9/24から通らなかった件、最大の原因はE2Eの6時間ハングだった","/excel-course-ci-e2e-hang-timeout","2026-10-03T00:00:00.000Z",{"title":348,"path":349,"publishedAt":350},"2026年10月11日の開発日記 - 計算モジュールの動画を分割画面にまとめ、Gitの読み上げをカタカナ台本に切り替えた","/2026-10-11-diary","2026-10-11T00:00:00.000Z",{"title":352,"path":353,"publishedAt":350},"回帰テストを関係ない区間まで流していた件と、税額計算Excelモジュールの設計見直し（IBルールの緑文字、表引き、年度の持ち方）","/fs-textbook-regression-scope-tax-module-redesign",{"title":355,"path":356,"publishedAt":330},"2026年10月10日の開発日記 - 講座3本の制作を引き継ぎファイルでつなぎ、Actionsの枠切れの原因を突き止めた","/2026-10-10-diary",{"title":358,"path":359,"publishedAt":360},"Excel講座の残り17区間を main へ統合し、CI の時間切れと再生画面の細部を直した記録","/excel-lecture-remaining-merge-scene-fixes","2026-10-07T00:00:00.000Z","https://log.eurekapu.com/og/blog/github-actions-free-minutes-exhausted-ci-failures.png?v=2026-10-10T00%3A00%3A00.000Z&title=GitHub%20Actions%20%E3%81%AE%E7%84%A1%E6%96%99%E6%9E%A02%2C000%E5%88%86%E3%82%92%E4%BD%BF%E3%81%84%E5%88%87%E3%81%A3%E3%81%9F%E5%8E%9F%E5%9B%A0%E3%81%AF%E3%80%8110%E6%9C%884%E6%97%A5%E3%81%8B%E3%82%89%E5%A4%B1%E6%95%97%E3%81%97%E7%B6%9A%E3%81%91%E3%81%A6%E3%81%84%E3%81%9FCI%E3%81%A0%E3%81%A3%E3%81%9F&author=Kei%20Komatsu&sig=ebfccfbd03d26c0d",1791766735109]