GitHub Codespaces料金を止める90%通知と自動停止Runbook

GitHub Codespacesは便利ですが、放っておくと料金がじわっと増えやすいですよね。この記事は「GitHub Codespaces 料金が読めない」「GitHub 使用量しきい値 通知を入れたい」「GitHub 課金 防止 自動停止までやりたい」という方に向けて書いています。読むと、90%通知の設定から自動停止Runbookまで、今日中に運用へ落とし込めます。僕は福祉事業のIT全般を担当しながら複業でAI×SaaS開発も回しているので、時間もコストも溶かさない実務目線で整理しました。

こんな方におすすめ

  • GitHub Codespacesの請求が月ごとにブレて不安な方
  • 90%しきい値通知を設定したいが画面が分かりにくい方
  • チームで「誰が止めるか」が曖昧でコスト事故が起きる方
  • 通知だけでなく自動停止Runbookまで作りたい方

この記事でわかること

  • GitHub Codespaces 料金の増え方を3分で把握する方法
  • 90%/100%通知と75%/90%/100%予算通知の使い分け
  • 「Stop usage when budget limit is reached」の実務的な入れ方
  • CLI/APIで使っていないcodespaceを自動停止するRunbook

公開前確認(2026年5月時点):GitHub Codespacesはcompute timeとstorage volumeで課金され、個人Free/Proには月次無料枠があります。予算通知、停止タイムアウト、不要codespace削除をセットで運用してください。

福祉領域の現場運用と、複業のAI×SaaS開発を並行しているエンジニアです。複数案件を同時進行する中で、開発コスト管理は「気合い」ではなく「仕組み」で回すのが一番安定すると実感しています。

GitHub Codespaces料金が増える仕組みを先に押さえる

最初に構造をシンプルにします。GitHub Codespacesの課金は、computestorage の2つです。computeは「稼働時間×マシン倍率(コア数)」、storageは「保存容量×時間」で積み上がります。つまり 請求 ≒ core-hours + GB-hours です。イメージとしては、computeがタクシーのメーター、storageが倉庫代です。走っている間は前者が伸び、置いてある間は後者が伸びます。

ここで見落としやすいのが、ブラウザタブを閉じてもcodespaceは止まらないことです。GitHub公式のStopping and starting a codespaceでも、明示的に停止しない限りアイドルタイムアウトまで稼働し続けると説明されています。「閉じた=止まった」ではないが第一ポイントです。

  • Running中 — computeとstorageの両方が増えます
  • Stopped中 — computeは止まり、storageのみ増えます
  • Deleted後 — その時点から将来分のstorage増加が止まります

たとえば4-core環境を平日20日で「1日2時間」使うと約160 core-hoursです。同じ環境を止め忘れて「1日8時間」動かすと約640 core-hoursになり、単純計算で4倍です。しかもアイドルタイムアウトのデフォルトは30分なので、ちょっと席を外したつもりが積み上がることが普通にあります。

最初に潰すべき課金トリガ

  • 停止忘れ — まずは手動停止を習慣化する
  • 長すぎるアイドルタイムアウト — 30分より短くする候補を検討する
  • 不要codespaceの放置 — 使わないものは削除して増加速度を下げる

GitHub 使用量しきい値 通知を90%で受ける設定手順

ここから通知設定です。2026年3月時点のGitHub公式ドキュメントでは、通知は2種類あります。ひとつは「プラン内利用量が90%/100%に達したとき」のIncluded usage alerts、もうひとつは予算金額に対する75%/90%/100%のBudget threshold alertsです。設定画面は Billing overview → Budgets and alerts です。

  1. Included usage alertsをON — まず90%/100%通知を受け取れる状態にします
  2. Codespacesの予算を作成 — Product-levelまたはSKU-levelで作成します
  3. 75%/90%/100%通知をON — メールとGitHubバナー通知を有効化します
  4. 必要ならStop usageをON — 上限到達時に追加利用を止めます
  5. 受信者を追加 — 個人運用でも別メールを1つ追加すると見逃しが減ります
機能 しきい値 役割 実務での使いどころ
Included usage alerts 90% / 100% 無料枠の残量通知 個人アカウントの早期警戒
Budget threshold alerts 75% / 90% / 100% 予算に対する進捗通知 月予算の管理と説明責任
Stop usage when limit reached 100% 利用そのものを停止 超過を絶対に避けたい月

注意点は「予算を作った最初の請求サイクル」です。GitHub公式では、予算作成前に発生した利用分は当月計算に含まれないため、初月は想定より超過する可能性があると明記されています。ここを知らないと「Stop usageを入れたのに超えた」と感じやすいです。

結論として、通知は「90%で気づく仕組み」、予算は「75%から調整する仕組み」、Stop usageは「最終ブレーキ」です。3つをセットで入れると、請求の予測精度が一気に上がります

GitHub 課金 防止 自動停止Runbookを実装する

通知だけだと、忙しい日に見逃します。ここはRunbook化が大事です。僕が実運用で使う設計は「検知→判定→停止→記録」の4段です。たとえば30分おきに実行して、最終利用から90分以上経った稼働codespaceを止める運用にすると、手作業がほぼ不要になります。

  1. 検知gh codespace list --json ... で一覧取得
  2. 判定lastUsedAt からidle分を計算
  3. 停止 — 対象に gh codespace stop --codespace NAME を実行
  4. 記録 — 停止件数を日次で残して閾値を見直す
#!/usr/bin/env bash
set -euo pipefail

MAX_IDLE_MINUTES="${MAX_IDLE_MINUTES:-90}"

gh codespace list --json name,state,lastUsedAt,repository --limit 100 \
| jq -r --argjson max "$MAX_IDLE_MINUTES" '
  .[]
  | select(.lastUsedAt != null)
  | select(.state != "Shutdown")
  | . + {idleMin: ((now - (.lastUsedAt | fromdateiso8601)) / 60 | floor)}
  | select(.idleMin >= $max)
  | [.name, .repository.fullName, (.idleMin|tostring)] | @tsv
' | while IFS=$'\t' read -r name repo idle; do
  echo "Stopping ${name} (${repo}) idle=${idle}m"
  gh codespace stop --codespace "$name"
done

REST APIで実行するなら、GitHub公式のCodespaces APIにある POST /user/codespaces/{codespace_name}/stop も使えます。CLIでもAPIでも本質は同じです。「止める担当者」を人間から仕組みに移すと、コスト事故はかなり減ります。

実装前に確認したいポイントです。トークン権限はCodespacesのライフサイクル操作ができる設定にします。さらに「止めたら困るcodespace」は命名規則で除外タグ(例: keep-)を付ける運用にすると、安全に回しやすいです。

運用メモとして、外部導線ではなく、実測ログ・設定差分・再現手順を同じ場所に残してチーム内で確認できる形にしてください。

個人とチームで設定を分けると無駄課金が減る

同じGitHub Codespacesでも、個人開発と組織開発では正解が違います。個人は「作業を止めない快適さ」、組織は「再現性と説明責任」が重くなります。なので、最初から設定を分けるのがおすすめです。タイムアウトは5〜240分、保持期間は0〜30日で調整でき、デフォルトはどちらも長め寄りです。

項目 個人開発の目安 組織開発の目安 理由
Idle timeout 15〜30分 15分(組織ポリシーで統一) 停止忘れのブレを小さくするため
Retention period 3〜7日 1〜3日 storage増加を抑えやすい
Budget alerts 75/90/100%を全ON 全ON+受信者複数 見逃し防止
Stop usage 月末のみONも可 原則ON(例外運用を別途用意) 超過リスクを制御

組織リポジトリでは、個人設定より組織ポリシーが優先される場合があります。たとえばtimeoutやretentionの上限が組織側で短く設定されていれば、個人側で長く設定していても適用されません。「自分の設定が反映されない」時は仕様通りのことが多いので、まずはポリシーを確認してください。

運用メモとして、外部導線ではなく、実測ログ・設定差分・再現手順を同じ場所に残してチーム内で確認できる形にしてください。

15分で終わる初回セットアップ手順

最後に、今日から実践できる最短手順を置いておきます。ここまで設定すれば、通知と停止の両輪が回り始めます。難しく見えますが、やることはシンプルです。

  1. Billing画面で通知ON — Included usage 90%/100%、Budget 75%/90%/100%
  2. Codespaces予算を作成 — Product-levelでまず1本作る
  3. Stop usageのON/OFF方針を決める — 月末だけONなどでもOK
  4. idle timeoutを短縮 — まず30分→15分から試す
  5. retention periodを短縮 — デフォルト30日から3〜7日に寄せる
  6. 自動停止ジョブをCron化 — 30分おき実行で十分です
# 現在のcodespace状況を可視化
gh codespace list --json name,state,lastUsedAt,machineName,repository --limit 100 \
| jq -r '.[] | [.repository.fullName,.name,.state,.machineName,.lastUsedAt] | @tsv'

運用開始1週間で見る指標

  • 停止件数 — 自動停止が機能しているか
  • 90%通知発生回数 — 予算設定が低すぎないか
  • 稼働codespaceの平均数 — 放置環境が減っているか
  • prebuild由来のstorage増加 — 使っていないprebuildがないか

prebuildは見えにくく、storageが増える原因になりやすいです。ここを週1で見るだけでも、請求の読みやすさがかなり上がります。「通知で気づく→Runbookで止める→週次で見直す」の3点セットで回していきましょう。

通知と自動停止を入れないまま四半期を過ごすと

このテーマを放置すると、痛みは遅れて出ます。月次請求の時点で「想定より高い」と気づいても、どのcodespaceが原因だったか追えないケースが多いからです。さらにStop usageが未設定だと、上限超過がそのまま継続する可能性があります。知らないままだと、予算だけでなく開発計画まで崩れることがあるので、最低限の通知と停止だけは先に入れておくのがおすすめです。

この記事を書いている理由

僕自身、SES、人材育成、福祉領域のIT運用と、非ITの現場にITを持ち込む形でキャリアを作ってきました。業務効率化ツールで月80時間の工数削減を出した時も、派手な技術より先に「運用ルールの言語化」が勝ち筋でした。550名以上のキャリア面談でも、困るポイントはだいたい同じです。だからこそ、GitHub Codespacesのような便利な仕組みほど、通知とRunbookを先に渡したいと思っています。使いこなしは才能より設計です。

次のアクション

まずは今日、90%通知と予算だけ設定してみてください。そこまでできたら、自動停止Runbookを乗せれば十分スタートできます。設定後のつまずきは気軽に共有してもらえたら嬉しいです。

今日からできるアクション

  • BillingのBudgets and alertsで90%/100%通知をONにする
  • Codespaces予算を1本作って75%/90%/100%通知をONにする
  • 運用メモとして、外部導線ではなく、実測ログ・設定差分・再現手順を同じ場所に残してチーム内で確認できる形にしてください。