速く・安く — マトリクス・キャッシュ・無料枠とコスト
📖 このページのゴール:自動化を 速く・安く 回す3つの道具——マトリクス(いろんな環境を一気にテスト)・キャッシュ(次回を速く)・コスト(無料枠と料金)——を、初心者でもイメージできるように知る。 ← 目次・はじめにへもどる
前のページまでで、自動でテストし、安全に届けるところまで来ました。最後は「もっと速く、もっと安く」回すコツです。自動化はラクですが、何も考えないと「遅い・お金がかかる」になりがち。ここを押さえると、毎日の開発がぐっと気持ちよくなります。
🟢 ① マトリクス(matrix)=いろんな環境を「一気に」テスト
マトリクス(matrix=組み合わせ表)は、複数のOS/バージョンを並行(へいこう=同時)でテストするしくみです。
たとえば「Windowsでも macでも Linuxでも動く?」「Node 18でも 20でも動く?」を確かめたいとき。手で全部試すと大変ですが、マトリクスなら 組み合わせを全部、いっぺんに 走らせてくれます。
🍱 たとえるなら 「全部のせ味見セット」。「松・竹・梅 × 大盛り・並盛り」を一皿ずつ作って同時に味見する感じ。どれか1つでもマズければ、その場で分かります。
jobs:
test:
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
node: [18, 20]
runs-on: $
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: $
- run: npm ci
- run: npm test
1行ずつ読むと:
strategy:… この後で「どう散らして走らせるか」を決める、という宣言。matrix:… 組み合わせ表のはじまり。os: [ubuntu-latest, macos-latest, windows-latest]… OSを3種類ならべる(Linux・mac・Windows)。node: [18, 20]… Nodeのバージョンを2種類ならべる。runs-on: $… 走らせるランナー(貸しパソコン)を、表のosから1つずつ受け取る。- 残り(
checkout→setup-node→npm ci→npm test)は、各組み合わせで同じことをやる。
これだけで 3(OS)× 2(Node)= 6通り が 同時に走ります。「全部の組み合わせを一気に確認できる」のがマトリクスの嬉しさです。
🔧 応用メモ: 組み合わせが増えるほど 走る数(=使う時間)も増える ので、料金にも効いてきます(後述)。「本当に必要な組み合わせだけ」にしぼるのがコツ。
🟢 ② キャッシュ(cache)=依存を保存して「次回を速く」
毎回のテストで地味に時間を食うのが、依存ライブラリのダウンロード(npm ci で node_modules を取ってくる等)。毎回ゼロからダウンロードし直すのはムダですよね。
キャッシュ(cache=一時保存)は、その依存をいったん保存しておき、次回はそれを使い回すしくみ。actions/cache というアクションを使います。
🧊 たとえるなら 「冷蔵庫の作り置き」。毎回スーパーに買い出し(ダウンロード)に行く代わりに、作り置きを温め直すだけ。だいぶ時短になります。
- uses: actions/cache@v4
with:
path: ~/.npm
key: npm-$
1行ずつ読むと:
uses: actions/cache@v4… キャッシュ用の既製アクションを使う。path: ~/.npm… 保存/復元したい場所(npm のダウンロード置き場)。key:… キャッシュの「合言葉(名札)」。package-lock.json(依存の一覧)から作るので、依存が変わったときだけ作り直し、変わらなければ前回のを再利用する。
💡 多くの
setup-*系アクション(例actions/setup-node)は、cache: 'npm'と書くだけでキャッシュを自動でやってくれるので、まずはそちらが手軽です。⚠️ キャッシュとアーティファクトは別物:キャッシュ=速くするための一時保存(使い回す)/アーティファクト=成果物を残す(ビルド済みアプリやレポートをダウンロード)。混同しないように。
🟢 ③ コスト(料金)=無料枠と「使った分だけ」
「自動化ってお金かかるの?」——いちばん大事な結論から。
- パブリックリポジトリ(公開)は無料:標準ランナーでの実行は無料です。OSSや学習用は気にせず使えます。
- プライベートリポジトリ(非公開)は、毎月の無料分+超過は従量(じゅうりょう=使った分だけ)課金:実行した時間(分単位)で計算され、毎月一定の無料枠があり、それを超えたぶんだけ料金がかかります。
しかも OSによって「分の重さ(倍率)」が違う のが要注意。一般論として Linux が一番安く、Windows はその数倍、macOS はさらに高い(mac は専用ハードが要るため)。だからマトリクスで mac を何通りも回すと、思ったより分を食います。
| OS | 速さ・安さの目安 | ざっくり一言 |
|---|---|---|
| 🐧 Linux(ubuntu) | いちばん安い・速い | 基本はこれでOK |
| 🪟 Windows | Linuxの数倍の倍率 | Windows対応が要るときだけ |
| 🍎 macOS | さらに高い倍率 | Apple系のビルド/テスト等、必要なときだけ |
🔧 倍率の具体的な数値や無料枠の分数は変わるので、正確な値は GitHub の公式の料金ページで必ず確認してください(このページでは「Linuxが安く、Windows→macOSの順に高くなる」という関係だけ覚えればOK)。
🔧 ④ self-hosted runner = 自前マシンをランナーにする
GitHub が貸してくれるランナー(使い捨ての貸しパソコン)の代わりに、自分のマシンをランナーとして登録することもできます。これが self-hosted runner(セルフホステッド・ランナー=自前ランナー)。
🏠 たとえるなら 「レンタカーではなく自分の車を使う」。計算力はタダ(電気代等は別)で、好きなソフトや特殊な環境も自由。ただし 車検・掃除・故障対応=管理は全部自分。
| GitHub提供ランナー | self-hosted runner(自前) | |
|---|---|---|
| 用意 | すぐ使える(設定不要) | 自分でマシンを用意・登録 |
| お金 | 無料枠+従量 | 計算力はタダ(電気・保守は自前) |
| 自由度 | 標準的な環境 | 好きな環境にできる |
| 管理の手間 | GitHubが面倒を見る | 全部自分(更新・故障・セキュリティ) |
⚠️ self-hosted は、fork からのPRで他人のコードが自分のマシン上で動くリスクがあるため、公開リポジトリでは特に注意(基本はプライベート/組織内で)。慣れないうちはGitHub提供ランナーで十分です。
🟢 節約のコツ(早見表)
| コツ | なにをする | なぜ効く |
|---|---|---|
| 全部走らせない | 関係ない変更では動かさない(paths: でフォルダを限定、if: で条件分け) |
ムダな実行=ムダな分を減らす |
| キャッシュを使う | actions/cache や cache: 'npm' |
ダウンロード時間をカット=速い&安い |
| マトリクスをしぼる | 本当に要るOS/版だけ | 組み合わせの数だけ時間が増えるのを防ぐ |
| 必要な時だけ | 重い処理は schedule(夜だけ)や手動(workflow_dispatch)に |
毎push で重いことをしない |
| 重い順を見直す | まず軽いlint/型 → 通ったらビルド | ダメなら早く落として時間を節約 |
🟢 まず1つだけやるなら:
setup-nodeにcache: 'npm'を足す。1行で速くなって、しかもタダで効く、いちばん費用対効果の高い一手です。
🟢 ひとことで言うと
マトリクスで「いろんな環境を一気に」テストし、キャッシュで「次回を速く」する。お金は 公開リポジトリは無料/非公開は無料枠+使った分(macOSは高い)。困ったら self-hosted で自前マシンも使えます。基本は 「ムダに全部走らせない・キャッシュする・必要な時だけ」 の3つ。