最近 GitHub から以下のようなメールが届いていた✉️
[GitHub] You've used 75% of included services for the kakakakakku account [GitHub] You've used 90% of included services for the kakakakakku account
GitHub Codespaces では毎月「コア時間」と「ストレージ」に無料利用枠が設定されていて,Settings>Billing and plans (Spending limit)で「Email alerts」の設定をしておくと,75% / 90% / 100% でメールが届く.
実際に Settings>Billing and plans (Plans and usage)を確認したところ You've used 90% of included services for GitHub Codespaces storage.
というアラートが出ていて,ストレージ(GitHub Pro だと 20 GB)で 90% を超えていて,GitHub 画面で確認できる内訳としては以下となっていた📝
Storage: 8.99 GB Prebuild Storage: 9.16 GB
Zenn Book と GitHub Codespaces
現在 Zenn Book で「LocalStack 実践入門」というワークショップを2つ公開していて(AWS アプリケーション開発ワークショップと AWS サーバレスパターン開発ワークショップ
),ワークショップ環境として GitHub Codespaces を採用している💡さらに GitHub Codespaces の起動時間を短くするために GitHub Codespaces prebuilds(プレビルド)という機能も採用している❗️
よって内訳として,ワークショップの動作確認をしたときに Storageが消費されて,プレビルドを保管していると Prebuild Storageが消費されるということは予想できるものの,それ以上の情報はなく,もっと詳細に分析したいな〜と感じた.
GitHub Usage Report
そんなときには GitHub の「Usage Report」を活用できる❗️
Usage Report(CSV ファイル)には GitHub Actions, GitHub Packages, GitHub Codespaces の利用状況がまとまっている.期間としては過去7日間 / 過去30日間 / 過去90日間 / 過去180日間から選べる📅
GitHub Usage Report と DuckDB
Usage Report の分析に DuckDBが使える🦆
データ構造
⚫◗ DESCRIBE SELECT * FROM'4b3a5d14_2025-02-06_180.csv'; ┌────────────────────┬─────────────┬─────────┬─────────┬─────────┬─────────┐ │ column_name │ column_type │ null│ key │ default│ extra │ │ varchar│ varchar│ varchar│ varchar│ varchar│ varchar│ ├────────────────────┼─────────────┼─────────┼─────────┼─────────┼─────────┤ │ Date│ DATE│ YES │ │ │ │ │ Product │ VARCHAR│ YES │ │ │ │ │ SKU │ VARCHAR│ YES │ │ │ │ │ Quantity │ DOUBLE │ YES │ │ │ │ │ Unit Type│ VARCHAR│ YES │ │ │ │ │ Price Per Unit ($) │ DOUBLE │ YES │ │ │ │ │ Multiplier │ DOUBLE │ YES │ │ │ │ │ Owner │ VARCHAR│ YES │ │ │ │ │ Repository Slug │ VARCHAR│ YES │ │ │ │ │ Username │ VARCHAR│ YES │ │ │ │ │ Actions Workflow │ VARCHAR│ YES │ │ │ │ │ Notes │ VARCHAR│ YES │ │ │ │ ├────────────────────┴─────────────┴─────────┴─────────┴─────────┴─────────┤ │ 12rows6 columns │ └──────────────────────────────────────────────────────────────────────────┘
Product / SKU カラム別の件数(2025年1月)
1ヶ月間の区切りは請求月の開始日に紐付いていて,僕自身の環境だと「毎月6日〜翌月5日まで」となる.
⚫◗ SELECT Product, SKU, COUNT(*) ASCOUNTFROM'4b3a5d14_2025-02-06_180.csv'WHEREDateBETWEEN'2025-01-06'AND'2025-02-05'GROUPBY Product, SKU ORDERBY Product; ┌────────────────────┬──────────────────┬───────┐ │ Product │ SKU │ COUNT│ │ varchar│ varchar│ int64 │ ├────────────────────┼──────────────────┼───────┤ │ Actions │ Compute - UBUNTU │ 1│ │ Codespaces - Linux │ Compute - 2 core │ 2│ │ Codespaces - Linux │ Storage │ 57│ │ Codespaces - Linux │ Prebuild storage │ 62│ │ Shared Storage │ Shared Storage │ 2│ └────────────────────┴──────────────────┴───────┘
GitHub Codespaces の利用状況(2025年1月)
GitHub 画面をキャプチャしたタイミングと Usage Report をダウンロードしたタイミングが微妙に違うけど,ほとんど同じ値になっていることを確認できた👌
⚫◗ SELECT SKU, SUM(Quantity) ASSUMFROM'4b3a5d14_2025-02-06_180.csv'WHERE Product = 'Codespaces - Linux'ANDDateBETWEEN'2025-01-06'AND'2025-02-05'GROUPBY SKU; ┌──────────────────┬────────────────────┐ │ SKU │ SUM│ │ varchar│ double │ ├──────────────────┼────────────────────┤ │ Compute - 2 core │ 1.2688000000000001│ │ Storage │ 8.9764│ │ Prebuild storage │ 9.13889999999999│ └──────────────────┴────────────────────┘
GitHub Codespaces prebuilds(プレビルド)のリポジトリ別の利用状況(2025年1月)
Repository Slug
カラムでリポジトリ名まで特定できる❗️
⚫◗ SELECT SKU, "Repository Slug", SUM(Quantity) ASSUMFROM'4b3a5d14_2025-02-06_180.csv'WHERE Product = 'Codespaces - Linux'AND SKU = 'Prebuild storage'ANDDateBETWEEN'2025-01-06'AND'2025-02-05'GROUPBY SKU, "Repository Slug"; ┌──────────────────┬──────────────────────────────────────────────────┬───────────────────┐ │ SKU │ Repository Slug │ SUM│ │ varchar│ varchar│ double │ ├──────────────────┼──────────────────────────────────────────────────┼───────────────────┤ │ Prebuild storage │ aws-application-workshop-using-localstack │ 4.532299999999998│ │ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 4.606599999999999│ └──────────────────┴──────────────────────────────────────────────────┴───────────────────┘
GitHub Codespaces prebuilds(プレビルド)のリポジトリ別の日別利用状況(2025年1月)
⚫◗ SELECT Date, SKU, "Repository Slug", Quantity ASSUMFROM'4b3a5d14_2025-02-06_180.csv'WHERE Product = 'Codespaces - Linux'AND SKU = 'Prebuild storage'ANDDateBETWEEN'2025-01-06'AND'2025-02-05'ORDERBY"Repository Slug", Date; ┌────────────┬──────────────────┬──────────────────────────────────────────────────┬────────┐ │ Date│ SKU │ Repository Slug │ SUM│ │ date│ varchar│ varchar│ double │ ├────────────┼──────────────────┼──────────────────────────────────────────────────┼────────┤ │ 2025-01-06│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-07│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1403│ │ 2025-01-08│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-09│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-10│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-11│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-12│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-13│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-14│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-15│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-16│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-17│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-18│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-19│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-20│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-21│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-22│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-23│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-24│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-25│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-26│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-27│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-28│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-29│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-30│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-31│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-02-01│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-02-02│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-02-03│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-02-04│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-02-05│ Prebuild storage │ aws-application-workshop-using-localstack │ 0.1464│ │ 2025-01-06│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-07│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1426│ │ 2025-01-08│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-09│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-10│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-11│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-12│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-13│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-14│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-15│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-16│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-17│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-18│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-19│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-20│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-21│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-22│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-23│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-24│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-25│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-26│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-27│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-28│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-29│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-30│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-01-31│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-02-01│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-02-02│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-02-03│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-02-04│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ │ 2025-02-05│ Prebuild storage │ aws-serverless-pattern-workshop-using-localstack │ 0.1488│ ├────────────┴──────────────────┴──────────────────────────────────────────────────┴────────┤ │ 62rows4 columns │ └───────────────────────────────────────────────────────────────────────────────────────────┘
まとめ
Zenn Book で公開しているワークショップで GitHub Codespaces を使っていて,ストレージ使用量 90% のアラートが出たため,GitHub Usage Report と DuckDB を組み合わせて分析してみた🦆納得感のある内訳になっていることを確認できて良かった❗️
特に GitHub Codespaces prebuilds(プレビルド)は常に使用量が増えていくため,要注意だと思う.もしストレージ使用量が 100% になってしまうとプレビルドが使えなくなってしまうので,ワークショップ提供のことを考えると結構クリティカルな問題になってしまう.今後(2025年2−3月頃)に3つ目のワークショップを公開予定だったりもして,今後は GitHub Codespaces の追加課金も検討しようと思う💰️
あとプレビルドではなく,通常のストレージ使用量で言うと,GitHub Codespaces の Default retention periodを 30 days
→ 1 days
に変更しておくと良さそう(現在の個人の用途だと翌日に消えてしまって問題ないため).