個人GitHubアカウントにGithub Actions self-hosted Runnerを立ててみた
2026年6月24日 に投稿 • 2 分 で読めます • 373 語self-hosted Runner とは
GitHub Actionsのランナーを自前でホストできるやつ
GitHub-hosted Runnerとの比較
メリット
- 適当な余剰マシンにインストールするだけで電気代以外のコストが発生しない
- GitHub-hostedでよく使用される
ubuntu-latestはCPU: 2コア, RAM:8GBで$0.006/分- 当然だがRAM不足でスペック上げたりコミットのたびにテストやらLinterやら走らせたら個人開発には手痛い出費になってくる
- たまたまだけど今の為替レート($1=¥160)で計算すると1分¥1ぐらい
- 無料枠も消費しないのでここぞという時に残しておける
- GitHub-hostedでよく使用される
- スペックもハード性能限界まで使い放題
- 追加コスト無しで永続キャッシュが使える
- NAT裏の家庭内NWに置いてるマシンやIP制限のかかった環境へアクセスさせやすい
- GitHub-hostedが使用してるIPレンジでIP制限かけるにしても範囲が広大すぎる&メンテも必要
- 特殊環境への対応が可能
- GPU周りやARM環境などGitHub-hostedで対応しにくい構成も環境さえ用意すれば使用可能
デメリット
- 当然だがホストしたマシンを自前で管理する必要がある
- ハード障害やら停電やらは考えないこととする
- 長期稼働させるとディスク使用量の管理も必要
- パブリックリポジトリでは使いにくい
- Workflowのコードを自分のマシンで動かしてるので任意コード実行し放題
- 同時に複数ジョブを実行したい場合は複数ホスト用意する必要がある
- テストとLinterなど並列実行してる場合は順番待ちになる
- 結果が実行時のマシンの状態に依存する
- GitHub-hostedは使い捨て環境なのでイメージが更新されない限りは結果が同一であると期待できるがself-hostedは実行環境に強く依存する
- 直接コマンド実行せずdocker内で実行するなどの工夫で軽減は可能
- 気軽に
apt upgradeしにくい
- GitHub-hostedは使い捨て環境なのでイメージが更新されない限りは結果が同一であると期待できるがself-hostedは実行環境に強く依存する
- GitHub-hostedだと意識しないdockerコマンドなども事前にインストールしておく必要がある(ミニマムイメージから立ち上げてると初期に導入するパッケージが増えやすい)
- 個人アカウントの場合Runnerをリポジトリ単位で作成する必要があり複数リポジトリで使用する場合に手間がかかる(回避策は後述)
導入手順
$ apt install curl
# Runnerはrootで動かせないのでユーザー作成する
$ useradd runner -m
# ビルド中の一時ファイルなども出力されるので専用ディレクトリ作成
$ cd /opt/
$ mkdir actions-runner && cd actions-runner
# 執筆時点最新版をDL→検証→解凍
$ curl -o actions-runner-linux-x64-2.335.1.tar.gz -L https://github.com/actions/runner/releases/download/v2.335.1/actions-runner-linux-x64-2.335.1.tar.gz
$ echo "4ef2f25285f0ae4477f1fe1e346db76d2f3ebf03824e2ddd1973a2819bf6c8cf actions-runner-linux-x64-2.335.1.tar.gz" | shasum -a 256 -c
$ tar xzf ./actions-runner-linux-x64-2.335.1.tar.gz
# 念の為オーナー変えておく
$ chown -R runner:runner /opt/actions-runner/
# runnerユーザーでセットアップ
# Runnerの名前や付与するタグを聞かれるので任意に設定する
# 何も入力しなければホスト名とホストから取得した情報で自動設定される
$ sudo -u runner ./config.sh --url https://github.com/{username}/{repo-name} --token XXXXXXXXXX
--------------------------------------------------------------------------------
| ____ _ _ _ _ _ _ _ _ |
| / ___(_) |_| | | |_ _| |__ / \ ___| |_(_) ___ _ __ ___ |
| | | _| | __| |_| | | | | '_ \ / _ \ / __| __| |/ _ \| '_ \/ __| |
| | |_| | | |_| _ | |_| | |_) | / ___ \ (__| |_| | (_) | | | \__ \ |
| \____|_|\__|_| |_|\__,_|_.__/ /_/ \_\___|\__|_|\___/|_| |_|___/ |
| |
| Self-hosted runner registration |
| |
--------------------------------------------------------------------------------
# Authentication
√ Connected to GitHub
# Runner Registration
Enter the name of the runner group to add this runner to: [press Enter for Default]
Enter the name of runner: [press Enter for github-selfhosted-runner]
This runner will have the following labels: 'self-hosted', 'Linux', 'X64'
Enter any additional labels (ex. label-1,label-2): [press Enter to skip]
√ Runner successfully added
# Runner settings
Enter name of work folder: [press Enter for _work]
√ Settings Saved.
# systemctlで常駐させる
$ ./svc.sh install runner
$ ./svc.sh start横着して全てrootで作業してるので良い子は適切なユーザーで実行してネ
同じホストを複数リポジトリで共有する方法
※ Organizationで使用する場合はRunnerが組織に紐付くのでこの問題は発生しません
self-hosted Runnerはtar.gzを展開したディレクトリで動いてるかつRunner自体がポート開けてリッスンしてるわけではないのでリポジトリごとに複数起動してあげればホストの使い回しが可能
(そんな脳筋解決でいいのかって気はするが……)
GitHubさんお願いなので個人アカウントもアカウントレベルでRunner紐付けさせてください

/opt/actions-runner/と/opt/actions-runner-hattori045/でディレクトリをズラして起動させてる
試してないけど複数アカウントにも紐付けられるかも?
注意点
Organization使用時はRunnerあたり1つしか同時にジョブが走らないように制御されているが複数起動するとその制御は行われなくなるのでRAM不足などには注意してください(個人開発ではあんま問題にならないかもだけど)
使い方
self-hosted Runnerで実行したいworkflowのruns-onをself-hostedに変えるだけ
runs-on: self-hosted
# 複数OS、アーキテクチャのRunnerを使用してる場合はタグで絞り込みも可能
runs-on: [self-hosted, linux, x64]個人的にハマったポイント
dockerをインストール済みでもdockerコマンドが使えない
runnerユーザーがdockerグループに所属してない
→これはdocker導入時のあるあるなのでrunnerユーザーをdockerグループに追加すれば解決$ usermod -a -G docker runnerグループに追加してもまだ権限無いと言われる
ERROR: permission denied while trying to connect to the docker API at unix:///var/run/docker.sock
→Runnerが起動した状態だとグループの情報が反映されないので再起動する$ ./svc.sh stop $ ./svc.sh start
今後も発見したら追記していく