GitHub から Cloud Run に自動デプロイしてみた

GitHub から Cloud Run に自動デプロイしてみた

GitHub で管理しているソースコードが、Cloud Run に自動デプロイできるように設定をしてみました。慣れていない人でも試しやすいよう、GUIベースで設定を行ってみました。
2026.08.31

こんにちは、すらぼです。

今回は、Cloud Run に GitHub で管理しているソースコードをデプロイするフローを設定してみました。
早速ですがやっていきます。

手順

今回の大まかな流れは以下です。

  1. デプロイするアプリの準備
  2. Google Cloud プロジェクトの準備
  3. 自動デプロイの設定
  4. おまけ:プルリクエストのプレビューをしてみる

アプリの準備

まず、デプロイするアプリケーションを準備していきます。

アプリの作成

ローカル環境でアプリケーションを作っていきます。今回はサンプルとして Next.js アプリケーションを作成していきます。

cd sandbox
npx create-next-app@latest nextjs-cloudrun-deploy-app
cd nextjs-cloudrun-deploy-app

完了したら以下を実行し、動作確認します。

npm run dev

問題なければ、デフォルトのページが表示されます。

CleanShot 2026-08-30 at 14.31.00.png

GitHub に commit

次にリポジトリに push しておきます。

git init
git add .
git commit -m "first commit"
git remote add origin git@github.com:<USER_NAME>/<REPO_NAME>.git
git push -u origin main

これで、デプロイするリソースを GitHub に準備できました。ここから実際に Google Cloud にデプロイする流れを作っていきます。

Google Cloud プロジェクトの設定

以下のAPIを有効化しておきます。

# 必要な API を有効化
gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  artifactregistry.googleapis.com \
  developerconnect.googleapis.com

また、Cloud Run にデプロイするためのサービスアカウントも用意しておきましょう。

gcloud iam service-accounts create cloudrun-deployer \
  --display-name="Cloud Build deployer for Cloud Run"

for role in \
  roles/logging.logWriter \
  roles/artifactregistry.writer \
  roles/run.developer \
  roles/iam.serviceAccountUser \
  roles/developerconnect.readTokenAccessor
do
  gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \
    --member="serviceAccount:cloudrun-deployer@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
    --role="$role" \
    --condition=None
done

自動デプロイの設定

ここから、実際に自動デプロイのフローを設定していきます。

リポジトリの接続〜サービスの作成

Cloud Run の画面から、「リポジトリを接続」を選択します。

CleanShot 2026-08-30 at 15.14.30@2x.png

ここで、 リージョンを選択してから 「Developer Connect で設定」をクリックします。理由は後述します。

CleanShot 2026-08-30 at 23.18.25.png

そのまま「新しいリポジトリをリンク」と進みます。

CleanShot 2026-08-30 at 15.18.38@2x.png

GitHub を選択して、特に変更せずにそのまま「続行」をクリックします。

CleanShot 2026-08-30 at 15.19.41@2x.png

以下のような画面が表示されるので、画面の案内に従って先ほど作成したGitHubリポジトリと接続します。

CleanShot 2026-08-30 at 15.22.46.png

先ほどのリポジトリと接続できたら、先ほどの Developer Connect 設定画面からリポジトリを選択できるようになります。

CleanShot 2026-08-30 at 15.25.14@2x.png

ビルド構成では、今回は Google Cloud Buildpacks を使用します。

CleanShot 2026-08-30 at 15.27.12@2x.png

今回は検証用途のため、「パブリックアクセスを許可」とします。

CleanShot 2026-08-30 at 15.29.51.png

これで「作成」をクリックすると、ビルドとデプロイが実行されます。

サービスアカウントの設定

ただし、このままだと Cloud Build のサービスアカウントがデフォルトのままで、権限が足りずにビルドが失敗する可能性があります。
Google Cloud のベストプラクティスに沿って、先ほど作成したものに変更します。

Cloud Build の画面に移動し、「トリガー」を確認すると先ほどの一連の手順で自動作成されたものがあるので、クリックします。

CleanShot 2026-08-30 at 23.46.13@2x.png

一番下までスクロールすると「サービス アカウント」の項目があるので、準備段階で作成したサービスアカウントに切り替えておきます。

CleanShot 2026-08-30 at 23.47.46@2x.png

これで再度トリガーを実行し、デプロイが問題なく終了したらOKです。

CleanShot 2026-08-30 at 23.51.21@2x.png

動作確認

デプロイが完了すると、Cloud Run サービスのURLでそのままアクセスできるようになります。実際にアクセスすると、以下のようにアプリケーションが確認できます。

CleanShot 2026-08-30 at 16.01.07@2x.png

注意点: リポジトリが表示されないとき

作業中に自分がつまずいたポイントをメモしておきます。

Cloud Run のサービスを消して作り直すなど、既存の Developer Connect を利用して新しいサービスを作ろうとしたとき、 リポジトリが表示されない という問題が発生しました。

原因は、先ほどの手順の中で Developer Connect が意図しないリージョンに作成されていることでした。
Cloud Run サービスを新しく作成する際、リージョンはデフォルトで任意のリージョンが自動で選択されるようになっています。

このリージョンは、 Developer Connect が作成されるリージョンにも紐づいており、筆者の場合は意図せず東京リージョン以外で Developer Connect が作成される事態が発生しました。

CleanShot 2026-08-30 at 23.15.48.png

Developer Connect はリージョンリソースであり、Cloud Run サービスのデプロイ先リージョンと Developer Connect のリージョンが異なる場合、 Developer Connect は利用できません。もしこのような事象が発生した場合は、 Developer Connect を自分が使いたいリージョンで作り直す必要があります。注意しましょう。

おまけ: プルリクエストのプレビューをしてみる

ここまででデプロイはできるようになりましたが、せっかくなのでプルリクエストのプレビューができるよう設定してみようと思います。

プレビューできるようにするためには、新しい Cloud Build トリガーを作成する必要があります。ゼロから作成するのは大変なので、先ほどの作業で自動作成された Cloud Build トリガーを複製する形でプレビュー用のトリガーも作成してみます。

まず、Cloud Build の「トリガー」画面に移動します。

CleanShot 2026-08-30 at 22.26.03@2x.png

次に、先ほどの Cloud Run 用に作成されたトリガーを「複製」します。

CleanShot 2026-08-30 at 22.26.59@2x.png

そして、以下のように設定を変更していきます。

  • 名前
    • 64文字以下の任意の名前(変更前:64文字以上になるケースが多い)
  • イベント
    • pull リクエスト(変更前:ブランチに push する)
  • ロケーション
    • リポジトリ(変更前:インライン)
    • ファイルの場所:cloudbuild-preview.yaml

最後に、新しいブランチを作成して以下の cloudbuild-preview.yaml を作成し、 commit します。

options:
  logging: CLOUD_LOGGING_ONLY

steps:
  - name: gcr.io/k8s-skaffold/pack
    entrypoint: pack
    args:
      - build
      - '${_DEPLOY_REGION}-docker.pkg.dev/$PROJECT_ID/${_AR_REPOSITORY}/${_SERVICE_NAME}:$SHORT_SHA'
      - --builder
      - gcr.io/buildpacks/builder:latest
      - --network
      - cloudbuild
      - --publish

  - name: gcr.io/google.com/cloudsdktool/cloud-sdk
    entrypoint: gcloud
    args:
      - run
      - deploy
      - '${_SERVICE_NAME}'
      - '--image=${_DEPLOY_REGION}-docker.pkg.dev/$PROJECT_ID/${_AR_REPOSITORY}/${_SERVICE_NAME}:$SHORT_SHA'
      - '--region=${_DEPLOY_REGION}'
      - --no-traffic
      - '--tag=pr-$_PR_NUMBER'

これで、プレビューの準備が完了です。
上記と合わせて、新しいブランチで page.tsx ファイルを書き換えてみます。

CleanShot 2026-08-30 at 22.39.58@2x.png

この状態で、変更を push し、ブランチのプルリクエストを作成してみます。

CleanShot 2026-08-30 at 22.42.54@2x.png

すると、Cloud Build 上でビルドが実行されます。この時点では、Cloud Run サービスの画面にはまだ表示されません。
(少し切り詰められていますが、 feature ブランチのビルドが走っていることがわかります。)

CleanShot 2026-08-30 at 22.41.03@2x.png

Cloud Build でビルドが完了すると、以下のようにリビジョンが追加されます。Cloud Build で設定した通り、トラフィックは0%になっています。

CleanShot 2026-08-30 at 22.44.46.png

リビジョンタグを付与しているため、固有のURLが発行されています。タグの部分をクリックして、リビジョンのURLをブラウザで確認してみます。

CleanShot 2026-08-30 at 22.52.10.png

ページを確認すると、以下のようにプレビュー環境のページが確認できました。
(もちろん実際にトラフィックが流れているページには変化はありません)

CleanShot 2026-08-30 at 22.53.25.png

これで、Cloud Run 上でプルリクエスト単位でのプレビューを試すことができました。

注意点として、 プルリクエストが消えてもリビジョンは自動で消えない ため、定期的にリビジョンを削除したりといったお掃除を行う必要があります。ご注意ください。

ざっくりやるなら、「作成から7日以上が経過したリビジョンは削除する処理」を日次で実行することで対応できます。
丁寧にやる場合は、リビジョンごとの request_count メトリクスとプルリクエストの状態(オープン/クローズ)を確認することで、より正確なお掃除ができそうです。

終わりに

以上、Cloud Run で GitHub から自動デプロイする設定を試してみました。
自分は少しハマってしまいましたが、設定自体はすごく簡単にできるようになっています。また、タグを設定することでプレビューのような使い方もでき、開発環境などでは重宝しそうな機能だと思いました。

Cloud Run は他にもたくさんの機能があり、開発者体験をよくしてくれる機能もたくさんあるので、今後も引き続きブログで紹介していければと思います。

この記事がどなたかの助けになれば幸いです。以上、すらぼでした!

参考資料

https://docs.cloud.google.com/run/docs/continuous-deployment?hl=ja

https://docs.cloud.google.com/run/docs/deploying-source-code?hl=ja

https://docs.cloud.google.com/docs/buildpacks/build-application?hl=ja

https://docs.cloud.google.com/build/docs/automating-builds/create-manage-triggers?hl=ja

この記事をシェアする

関連記事