・Raspberry Pi(Ubuntu)を自宅サーバー化している人
・GitHubにコードをプッシュしたら、自動でラズパイに反映(デプロイ)させたい人
・面倒な「手動でSSH接続して git pull して再起動」を卒業したい人
・デプロイ先デバイス: Raspberry Pi 4
・デプロイ先OS: Ubuntu Desktop 22.0.4(LTS)
・リポジトリ管理: GitHub
・作業元PC: Windows10/11 または Mac

開発をしていて、コードを修正するたびに「ラズパイにSSHでログインして、git pull して、ビルドして、サービスを再起動して……」ってやるの、めちゃくちゃ面倒ですよね〜。 そんな時こそ、GitHub Actionsの「Self-hosted Runner」の出番です! これを使えば、GitHubにコードを git push するだけで、ラズパイがそれを検知して自動で最新化してくれるようになります。設定自体はめちゃくちゃ簡単なので、サクッと自動化しちゃいましょう!
もくじ
そもそも「Self-hosted Runner」って?
通常、GitHub ActionsはGitHubが用意したクラウド上のサーバーで処理を実行します。しかし「Self-hosted Runner(セルフホストランナー)」を使うと、自宅にあるラズパイ(ローカル環境)をGitHub Actionsの実行マシンとして登録することができます。
これにより、GitHubのクラウドから自宅のラズパイに対して、安全にデプロイの指示を出すことができるようになります。
Step 1:GitHubリポジトリで「Runner」を追加する
まずは、自動デプロイさせたいGitHubのリポジトリを開きます。
- リポジトリの 「Settings」 タブを開きます。
- 左メニューから 「Actions」 > 「Runners」 を選択します。
- 右上の 「New self-hosted runner」 ボタンをクリックします。
画面に以下のような選択肢が出るので、環境に合わせて選択します。
- Runner image:
Linux - Architecture:
ARM64(※Raspberry Pi 4で64bitのUbuntuを動かしている場合はこれを選択)
選択すると、Ubuntu側で実行するべきコマンド群が表示されます。これを次のステップでラズパイに打ち込んでいきます。
Step 2:ラズパイ(Ubuntu)でRunnerのダウンロードと初期設定
表示されたコマンドを、ラズパイのターミナル(SSH接続先)にコピペして実行していきます。
1. フォルダの作成と移動
Runner専用のフォルダを作成して、そこに移動します。
mkdir actions-runner && cd actions-runner2. Runnerパッケージのダウンロードと解凍
GitHubの画面に表示されている「Download」のコマンド(以下のような形)を実行します。
※バージョン部分やハッシュ値は、GitHubの画面に表示されている最新のものをそのままコピーして実行してください。
# パッケージのダウンロード
curl -o actions-runner-linux-arm64-2.311.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.311.0/actions-runner-linux-arm64-2.311.0.tar.gz
# ダウンロードしたファイルの解凍
tar xzf ./actions-runner-linux-arm64-2.311.0.tar.gz3. 初期設定(Configure)を実行する
解凍できたら、GitHubとラズパイを紐付けるための設定コマンドを実行します。
※以下のURLやトークン(長い文字列)は、あなたのGitHub画面に表示されているものをそのまま使ってください。
./config.sh --url https://github.com/【ユーザー名】/【リポジトリ名】 --token 【あなた専用のトークン】実行すると、ターミナルでいくつかの質問を順番に聞かれます。
Enter the name of the runner group to add this runner to: [press Enter for Default]
👉 何も入力せず、そのまま「Enter」
Enter the name of runner: [press Enter for ubuntu]
👉 ラズパイに分かりやすい名前(例: `raspi-runner`)を入力して「Enter」
Enter any additional labels (comma separted): [press Enter to skip]
👉 後でワークフローから呼び出すためのタグです。今回は `raspi` と入力して「Enter」
Enter name of work folder: [press Enter for _work]
👉 そのまま「Enter」「Runner successfully added」と表示されれば、紐付け成功です!
Step 3:常時起動(サービス化)の設定
このままだと、ラズパイのターミナルを閉じたり、ラズパイを再起動したりすると自動デプロイが動かなくなってしまいます。 バックグラウンドで常時起動するように、systemd(システムサービス)として登録しましょう。
actions-runner フォルダの中で、以下のコマンドを実行します。
# サービスとしてインストール(管理者権限が必要)
sudo ./svc.sh install
# サービスの起動
sudo ./svc.sh start
# 起動状態の確認
sudo ./svc.sh status出力結果に active (running) と表示されていれば、バックグラウンドでの起動に成功しています。これでラズパイが再起動しても、自動で待機状態になってくれます!
Step 4:自動デプロイ用のワークフローを作成する
最後に、GitHub側からラズパイに「何をしてほしいか」を伝える設定ファイル(ワークフロー)をプロジェクト内に作成します。
接続元のPCで、プロジェクトのルートディレクトリに .github/workflows/deploy.yml というファイルを新規作成し、以下の内容を貼り付けます。
name: Deploy to Raspberry Pi
on:
push:
branches:
- main # mainブランチにプッシュされた時に動かす
jobs:
deploy:
runs-on: self-hosted # ← ここをself-hostedにすることでラズパイで動くようになる
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Run deploy script
run: |
echo "GitHubから最新コードを検知したよ!"
# ここにデプロイ用のコマンドを書きます
# 例:
# npm install
# pm2 restart my-appこのファイルをリポジトリの main ブランチに git push してみましょう!
GitHubの 「Actions」 タブを開き、以下のように緑色のチェックマーク(成功)がついて、ラズパイ上で設定したコマンドが実際に動いていれば自動デプロイ環境の完成です!

これで、ローカルPCでコードを書いて git push するだけで、ラズパイのアプリが勝手に最新状態に更新されるようになりました! 手動でのSSHログインやコピペ作業から解放されて、開発のテンポが爆速になりますよ。次は、この自動デプロイにDockerを組み合わせて、さらにスマートな環境を作っていきましょう!
SEの時間外労働 