エンジニアの皆さん、こんにちは。CI/CDの海を渡る航海術を伝授する、あなたのシニアエンジニアです。
GitHub Actionsは、コードを書くだけでテストやデプロイまで自動化してくれる魔法のようなツールですが、「何も考えずに使っていると、月初の請求書を見て冷や汗をかく」というのも、実はよくある話です。
今回は、GitHub Actionsのコスト構造を徹底的に分解し、今日からできる「財布に優しく、かつ最高速のパイプライン」を作るための極意を伝授します。
—
1. なぜ「無料枠」はすぐに尽きるのか?
GitHub Actionsの課金は、主に「実行時間(分単位)」で計算されます。
無料枠(GitHub Freeなら月間2,000分)を意識せず、次のようなワークフローを組むと、あっという間に枯渇します。
- 無駄なトリガー: 全てのプッシュでフルビルドを走らせる。
- 重い環境の利用: macOSランナーを無自覚に選ぶ(Linuxの10倍のコスト)。
- 非効率なキャッシュ: 毎回ライブラリをゼロからインストールする。
これらは「自動化の代償」ではなく、単なる「設定の甘さ」です。ここを最適化するだけで、コストは劇的に下がります。
—
2. コストを抑えるための「3つの鉄則」
① トリガーを絞り込む(「動かさない」勇気)
すべてのコミットで重いテストを回す必要はありません。`paths` フィルタを使って、関係するファイルが変更された時だけ動くようにしましょう。
.github/workflows/ci.yml
on:
push:
branches: [ main ]
paths:
- ‘src/’ # srcディレクトリの変更時のみ実行
- ‘.github/workflows/ci.yml’ # 設定ファイル変更時も実行
② キャッシュ戦略を極める
`npm install` や `pip install` を毎回ゼロから行うのは、時間と金の無駄です。`actions/cache` を使い倒してください。
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.npm
# ロックファイルが変わった時だけ再キャッシュ
key: ${{ runner.os }}-node-${{ hashFiles(‘/package-lock.json’) }}
③ セルフホストランナーの活用(究極の節約術)
もし自宅やオフィスに余っているPCや、クラウド上の安価なVPSがあるなら、セルフホストランナーを立ててください。GitHubが提供するランナーと違い、「実行時間は完全に無料」です。
—
3. HelloWorldで学ぶ「賢いワークフロー」のセットアップ
まずは、無駄のない最小構成を体験しましょう。これが「コストを意識した開発」の第一歩です。
ステップ1: リポジトリにディレクトリを作成
`.github/workflows/` というディレクトリを作り、その中に `hello.yml` を作成してください。
ステップ2: ワークフローの定義
以下のコードをコピーしてください。
name: Optimized Workflow
on:
push:
branches: [ main ]
# 不要な実行を防ぐため、特定のファイル変更時のみ動かす
paths:
- ‘app/’
jobs:
build:
# 最も安価で高速な ubuntu-latest を使用する
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: ’20’
# キャッシュ設定でインストール時間を短縮=課金時間を短縮
cache: ‘npm’
- name: Install and Build
run: |
npm ci
npm run build
ステップ3: 動作確認
このファイルをコミットしてプッシュすると、GitHubの「Actions」タブで実行が始まります。成功すれば、あなたは「ただ動くもの」から「コスト効率を考慮した設計」へと一歩踏み出せたことになります。
—
4. 最後に:エンジニアとしてのマインドセット
GitHub Actionsの最適化は、単なる節約ではありません。「無駄な待ち時間を減らし、フィードバックループを高速化すること」そのものです。
ビルドが速くなれば、あなたはより早くコードの品質を確認でき、より早くユーザーに価値を届けられます。コストを意識することは、巡り巡って開発の生産性に直結するのです。
まずは、今走っているワークフローの「実行時間」を確認してみてください。そこが、あなたの改善のスタートラインです。
もし分からないことがあれば、いつでも聞いてくださいね。あなたのCI/CDライフがより快適なものになるよう、応援しています!