0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub Actionsのself-hosted runnerをVPSに構築してCI費用を月$0にする手順

0
Last updated at Posted at 2026-03-20

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 runnerをVPSに設置すれば、月額1,000円未満の固定費で分数制限なしのCI/CD環境が手に入ります。設定はrunnerパッケージのダウンロード → 登録 → systemdデーモン化の3ステップで完了します。無料枠を超えそうな場合やDockerビルドが多い環境では、コスト削減効果が大きい選択肢です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?