TL;DR
- GitHub Actionsの無料枠(2,000分/月)を超えるとLinux minuteで$0.008/分かかる
- VPS(月額700-1,000円程度)にself-hosted runnerを設置すれば分数制限なしで実行できる
- systemdでデーモン化すれば再起動後も自動復帰し、安定運用できる
環境
- VPS: ConoHa VPS 1GBプラン(Ubuntu 24.04 LTS)
- GitHub: プライベートリポジトリ
- Runner: actions/runner v2.321+
- 再現日: 2026-03-24
GitHub Actionsの料金体系
GitHub Actionsは無料枠を超えると従量課金になります。
| プラン | 無料枠(月) | Linux minute単価 | 月100時間使った場合 |
|---|---|---|---|
| Free | 2,000分 | $0.008/分 | $0(枠内) |
| Pro | 3,000分 | $0.008/分 | $24(超過分) |
| Team | 3,000分 | $0.008/分 | $24 |
個人開発やスタートアップでは月2,000分で十分なケースが多いですが、以下のような場合はすぐに上限に達します。
- モノレポで複数パッケージのテストを実行
- E2Eテスト(Playwright等)で1回のrunが10-20分
- Docker imageのビルド(キャッシュなしで5-15分)
- 1日に何度もpushするアクティブな開発フェーズ
self-hosted runnerのメリットとデメリット
| メリット | デメリット |
|---|---|
| 分数制限なし(VPS代のみ) | VPSの管理が必要 |
| ローカルキャッシュで高速ビルド | パブリックリポジトリではセキュリティリスク大 |
| カスタム環境(GPU、大容量メモリ等) | ネットワーク・ディスク障害時にCIが止まる |
| GitHub側の障害に影響されにくい | runnerのアップデート管理が必要 |
重要: パブリックリポジトリでself-hosted runnerを使うと、フォークからの悪意あるワークフローが実行される可能性があります。プライベートリポジトリでのみ使用してください。
self-hosted runnerの設定手順
Step 1: VPSにrunner用ユーザーを作成
root権限でrunnerを実行するのはセキュリティ上望ましくありません。専用ユーザーを作成します。
# VPSにSSH接続
ssh root@your-vps-ip
# runner専用ユーザー作成
sudo useradd -m -s /bin/bash github-runner
sudo passwd github-runner
# Docker操作が必要な場合はdockerグループに追加
sudo usermod -aG docker github-runner
Step 2: GitHubからrunnerパッケージをダウンロード
GitHubリポジトリの Settings > Actions > Runners > New self-hosted runner から、OS(Linux)とアーキテクチャ(x64)を選択すると、設定コマンドが表示されます。
# runner用ユーザーに切り替え
su - github-runner
# 作業ディレクトリ作成
mkdir actions-runner && cd actions-runner
# ランナーパッケージをダウンロード(バージョンは最新を確認)
curl -o actions-runner-linux-x64-2.321.0.tar.gz -L \
https://github.com/actions/runner/releases/download/v2.321.0/actions-runner-linux-x64-2.321.0.tar.gz
# チェックサム検証(GitHubに表示されたハッシュと照合)
# GitHubのダウンロードページに表示されるSHA-256ハッシュ値を使用
echo "<GitHubに表示されたハッシュ> actions-runner-linux-x64-2.321.0.tar.gz" | shasum -a 256 -c
# 解凍
tar xzf actions-runner-linux-x64-2.321.0.tar.gz
Step 3: runnerをリポジトリに登録
# 設定(トークンはGitHubの画面に表示されたものを使用)
./config.sh --url https://github.com/YOUR_ORG/YOUR_REPO \
--token YOUR_REGISTRATION_TOKEN \
--name "conoha-vps-runner" \
--labels "self-hosted,linux,x64,vps" \
--work "_work"
# テスト実行(Ctrl+Cで停止)
./run.sh
Connected to GitHubと表示されれば成功です。
Step 4: systemdでデーモン化(重要)
./run.shをフォアグラウンドで実行するとSSH切断時に停止します。systemdサービスとして登録してバックグラウンドで永続実行します。
# rootに戻る
exit
# サービスインストール(runner付属のスクリプトを使用)
cd /home/github-runner/actions-runner
sudo ./svc.sh install github-runner
# サービス起動
sudo ./svc.sh start
# ステータス確認
sudo ./svc.sh status
これでVPS再起動後も自動的にrunnerが起動します。
Step 5: ワークフローでself-hosted runnerを指定
# .github/workflows/ci.yml
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: [self-hosted, linux, x64] # ← GitHub-hosted → self-hosted に変更
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '22'
- run: npm ci
- run: npm test
runs-onをデフォルトのubuntu-latestから[self-hosted, linux, x64]に変更するだけです。
Docker-in-Docker構成
CI/CDでDockerイメージのビルドが必要な場合、runner上でDockerを使う方法です。
jobs:
build:
runs-on: [self-hosted, linux, x64]
steps:
- uses: actions/checkout@v4
- name: Build Docker image
run: docker build -t myapp:${{ github.sha }} .
- name: Push to registry
run: |
echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
docker push ghcr.io/${{ github.repository }}/myapp:${{ github.sha }}
runner用ユーザーがdockerグループに属していれば(Step 1で設定済み)、追加設定なしでDockerコマンドが使えます。
コスト比較
ConoHa VPS 1GBプラン(月額763円)を使った場合の損益分岐点です。
| 月間CI実行時間 | GitHub-hosted (Free超過分) | self-hosted (VPS固定費) | 差額 |
|---|---|---|---|
| 2,000分(無料枠内) | $0 | ¥763 | -¥763 |
| 4,000分 | $16(約¥2,400) | ¥763 | +¥1,637 |
| 6,000分 | $32(約¥4,800) | ¥763 | +¥4,037 |
| 10,000分 | $64(約¥9,600) | ¥763 | +¥8,837 |
月4,000分以上使う場合はself-hosted runnerの方がコスト効率が良いことがわかります。さらにVPSはCI以外(ステージング環境、cronジョブ等)にも使えるため、実質的な損益分岐点はもっと低くなります。
セキュリティ対策チェックリスト
self-hosted runnerを安全に運用するために、以下を確認してください。
- プライベートリポジトリのみでself-hosted runnerを使用
- runner用の専用ユーザーを作成(rootで実行しない)
- VPSのファイアウォールでSSH以外の不要ポートを閉じる
- runnerパッケージを定期的にアップデートする
-
_workディレクトリに残るチェックアウトデータに注意(シークレットがディスクに残る可能性) - Organization設定で「Allow select self-hosted runners」に制限
トラブルシューティング
Q: runnerが「Offline」のまま
# サービスが動いているか確認
sudo ./svc.sh status
# ログを確認
journalctl -u actions.runner.YOUR_ORG-YOUR_REPO.conoha-vps-runner.service -f
多くの場合、ネットワーク接続の問題かトークンの期限切れです。
Q: ディスクが溢れる
self-hosted runnerはビルドキャッシュやDockerイメージを蓄積します。定期的にクリーンアップしてください。
# Docker未使用リソースの削除(cronで週1実行推奨)
docker system prune -af --volumes
# 古いワークディレクトリの削除(-maxdepthと-mtimeで必ず絞り込むこと)
find /home/github-runner/actions-runner/_work -maxdepth 2 -type d -mtime +7 -exec rm -rf {} +
参考リンク
- GitHub Actions self-hosted runners 公式ドキュメント
- actions/runner GitHubリポジトリ
- GitHub Actions 料金表
- GitHub Actionsのワークフロー構文、マトリクスビルド、キャッシュ戦略まで網羅したガイドも参考にしてください: GitHub Actions CI/CD完全ガイド2026
まとめ
GitHub Actionsのself-hosted runnerをVPSに設置すれば、月額1,000円未満の固定費で分数制限なしのCI/CD環境が手に入ります。設定はrunnerパッケージのダウンロード → 登録 → systemdデーモン化の3ステップで完了します。無料枠を超えそうな場合やDockerビルドが多い環境では、コスト削減効果が大きい選択肢です。