このページでは、1 つの gcloud CLI コマンド gcloud run deploy と --source フラグを使用して、新しいサービスまたはサービス リビジョンをソースコードから直接 Cloud Run にデプロイする方法について説明します。Hello World サービスをデプロイするチュートリアルの例については、クイックスタート: ソースからデプロイするをご覧ください。
- ビルドを使用してソースからデプロイ(デフォルト): このオプションでは、ソースコードからコンテナ イメージを自動的にビルドします。Google Cloud の Buildpack と Cloud Build を使用して、Docker をマシンにインストールしたり、Buildpack や Cloud Build を設定することはありません。デフォルトでは、Cloud Run は Cloud Build が提供するデフォルトのマシンタイプを使用します。
gcloud run deploy --sourceを実行すると、gcloud builds submitコマンドを実行する必要がなくなります。 - ビルドなしでソースからデプロイする(プレビュー): このオプションは、Cloud Build のステップをバイパスして、アーティファクトを Cloud Run に直接デプロイします。これにより、デプロイ時間を短縮できます。
ソースデプロイでは、Artifact Registry を使用してビルドされたコンテナが保存されます。プロジェクトで、デプロイ先のリージョンに cloud-run-source-deploy という名前の Artifact Registry リポジトリがまだない場合、この機能により、cloud-run-source-deploy という名前の Artifact Registry リポジトリが自動的に作成されます。
Dockerfile がソースコード ディレクトリにある場合、アップロードしたソースコードはその Dockerfile を使用してビルドされます。ソースコード ディレクトリに Dockerfile が存在しない場合、Google Cloud の Buildpack は、使用されている言語を自動的に検出してコードの依存関係を取得し、Google が管理する安全なベースイメージを使用してプロダクション レディなコンテナ イメージを作成します。
デフォルトでは、セキュリティ修正は Cloud Run サービスがデプロイされた場合にのみ適用されます。サービスのセキュリティの自動更新を有効にすると、そのサービスはダウンタイムなしでパッチを自動的に受け取ります。詳しくは、セキュリティ更新の構成をご覧ください。始める前に
- 設定ページの説明に従って、Cloud Run に新しいプロジェクトを設定したことを確認してください。
ドメイン制限の組織のポリシーでプロジェクトの未認証呼び出しが制限されている場合は、限定公開サービスのテストの説明に従って、デプロイされたサービスにアクセスする必要があります。
-
Enable the Cloud Run Admin API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.Cloud Run Admin API を有効にすると、Compute Engine のデフォルトのサービス アカウントが自動的に作成されます。
必要なロール
ソースからデプロイするには、ユーザーまたは管理者がデプロイ担当者アカウントに次の IAM ロールを付与する必要があります。
ここをクリックしてデプロイ担当者のアカウントに必要なロールを表示
ソースからビルドしてデプロイするために必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
- プロジェクトに対する Cloud Run ソース デベロッパー(
roles/run.sourceDeveloper) - プロジェクトの Service Usage コンシューマー(
roles/serviceusage.serviceUsageConsumer) - Cloud Run サービス ID に対するサービス アカウント ユーザー(
roles/iam.serviceAccountUser)
Cloud Run に関連付けられている IAM ロールと権限のリストについては、Cloud Run IAM ロールと Cloud Run IAM 権限をご覧ください。Cloud Run サービスがGoogle Cloud APIs(Cloud クライアント ライブラリなど)と連携している場合は、サービス ID の構成ガイドをご覧ください。ロールの付与の詳細については、デプロイ権限とアクセスの管理をご覧ください。
サポートされている言語
Dockerfile を含むソースに加えて、ソースからのデプロイでは Google Cloud の Buildpack を使用して次の言語がサポートされています。
| ランタイム | ソースのデプロイ | Buildpack の構成 |
|---|---|---|
| Go | Go サービスをデプロイする | Go Buildpack を構成する |
| Node.js | Node.js サービスをデプロイする | Node.js Buildpack を構成する |
| Python | Python サービスをデプロイする | Python Buildpack を構成する |
| Java (Kotlin、Groovy、Scala を含む) |
Java サービスをデプロイする | Java Buildpack を構成する |
| .NET | .NET サービスをデプロイする | .NET Buildpack を構成する |
| Ruby | Ruby サービスをデプロイする | Ruby Buildpack を構成する |
| PHP | PHP サービスをデプロイする | PHP Buildpack を構成する |
詳細については、サポートされている言語のバージョンをご覧ください。
ビルドを使用してソースからデプロイする
このセクションでは、Google Cloud の Buildpack と Cloud Build を使用して、ソースコードからコンテナ イメージを自動的にビルドする方法について説明します。Docker をマシンにインストールしたり、Buildpack や Cloud Build の設定を行う必要はありません。
制限事項
- ソースからのデプロイでは Artifact Registry と Cloud Build が使用されるため、この機能は Artifact Registry と Cloud Build でサポートされているリージョンでのみ使用できます。
- ソースからデプロイする機能は便利ですが、ビルドを完全にカスタマイズすることはできません。より細かく制御するには、Cloud Build を使用してコンテナ イメージをビルドします。たとえば、
gcloud builds submitを使用し、次にgcloud run deploy --imageなどを使用してコンテナ イメージをデプロイします。 - Google Cloud の Buildpack を使用してソースからデプロイすると、ソースファイルの最終更新日は 1980 年 1 月 1 日に設定されます。これは Buildpack のデフォルトの動作で、再現性のあるビルドをサポートするように設計されています。言語フレームワークによっては、静的ファイルのブラウザ側のキャッシュに影響する可能性があります。アプリケーションがこの影響を受ける場合は、アプリケーションで
etagとLast-Modifiedの HTTP ヘッダーを無効にすることをおすすめします。 - Google Cloud の Buildpack でソースからデプロイする場合は、常に
gcr.io/buildpacks/builder:latestを使用します。latestで優先言語または OS 構成を使用できない場合は、特定のビルダーを使用し、優先ビルダーでアプリケーション イメージを作成します。 Kotlin や Java などの JVM 言語を使用して、ソースからサービスをデプロイできます。使用する言語は、次のルールに準拠している必要があります。
- アプリケーションは Maven または Gradle を使用してビルドできます。
- ビルドファイルには、クラスを生成するために必要なすべてのプラグインが含まれています。
ビルドを使用してデプロイする前に
ビルドを使用してソースからデプロイする前に:
始める前にの手順に沿って操作します。
-
Enable the Cloud Build API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
必要なロール
ビルドを使用してソースからデプロイするには、ユーザーまたは管理者が Cloud Build サービス アカウントに次の IAM ロールを付与する必要があります。
クリックして Cloud Build サービス アカウントに必要なロールを表示
この動作をオーバーライドしない限り、Cloud Build は、ソースコードと Cloud Run リソースのビルドにデフォルトの Cloud Build サービス アカウントとして Compute Engine のデフォルトのサービス アカウントを自動的に使用します。Cloud Build がソースをビルドできるようにするには、プロジェクトの Compute Engine のデフォルトのサービス アカウントに Cloud Run ビルダー(roles/run.builder)を付与するよう管理者に依頼します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/run.builder
PROJECT_NUMBER は Google Cloudプロジェクト番号に、PROJECT_ID は Google Cloudプロジェクト ID に置き換えます。プロジェクト ID とプロジェクト番号を確認する方法については、プロジェクトの作成と管理をご覧ください。
Compute Engine のデフォルト サービス アカウントに Cloud Run ビルダーのロールを付与すると、反映されるまでに数分かかることがあります。
Cloud Run に関連付けられている IAM ロールと権限のリストについては、Cloud Run IAM ロールと Cloud Run IAM 権限をご覧ください。Cloud Run サービスがGoogle Cloud APIs(Cloud クライアント ライブラリなど)と連携している場合は、サービス ID の構成ガイドをご覧ください。ロールの付与の詳細については、デプロイ権限とアクセスの管理をご覧ください。
ビルドを使用してデプロイする
ソースコードからデプロイするには、使用するツールのタブをクリックして、手順を確認してください。
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
ソース ディレクトリに移動します。ソース ディレクトリでは、Dockerfile が存在する場合はそれが使用されます(必須ではありません)。
サービスをビルドしてデプロイします。
gcloud run deploy SERVICE --source .
SERVICEは、サービスに付ける名前で置き換えます。プロンプトが表示されたら、「
y」と応答して、必要な API をインストールします。これが必要なのはプロジェクトに対して 1 回だけです。設定ページに記載されているように、デフォルト値を設定しない場合は、別のプロンプトにプラットフォームとリージョンを指定して応答します。ビルドとデプロイが完了するまで待ちます。完了すると、Cloud Run に成功メッセージが表示されます。
次のいずれかの開発環境に、Gemini CLI の最新バージョンをインストールします。
- ターミナル
- Cloud Shell
- Gemini Code Assist エージェント モードを使用する VS Code(「VS Code」タブを参照)
Cloud Run 拡張機能をインストールします。
gemini extensions install https://github.com/GoogleCloudPlatform/cloud-run-mcp
Google Cloud CLI にログインします。
gcloud auth login
アプリケーションのデフォルト認証情報を設定します。
gcloud auth application-default login
ソースコード ディレクトリに移動します。
Gemini CLI を起動します。
gemini
サービスをビルドしてデプロイします。
/deploy
- Google Cloud プロジェクトの入力を求められたら、プロジェクト名を入力します。
- ツールを選択するよう求められたら、
deploy_local_folderを選択します。
ビルドとデプロイが完了するまで待ちます。完了すると、Cloud Run に成功メッセージが表示されます。
ソース ディレクトリに移動します。ソース ディレクトリでは、Dockerfile が存在する場合はそれが使用されます(必須ではありません)。
プロジェクト ディレクトリに、サービス定義を含む
compose.yamlファイルを作成します。services: web: build: . ports: - "8080:8080"
環境変数、シークレット、ボリューム マウントなど、他の構成オプションを指定することもできます。
サービスをデプロイするには、
gcloud beta run compose upコマンドを実行します。gcloud beta run compose up compose.yaml必要なコンポーネントをインストールするプロンプトや API を有効にするプロンプトが表示されたら、「
y」と応答します。省略可: サービスへの未認証アクセスを許可したい場合は、サービスを一般公開にします。
デプロイ後、このサービスのリビジョンはトラフィックを 100% 処理します。
Cloud Code
Cloud Code を使用してソースからデプロイするには、IntelliJ と Visual Studio Code のガイドをご覧ください。
Gemini CLI
Gemini CLI ツールの /deploy コマンドを使用して、ソースコードから Cloud Run サービスをデプロイします。
Cloud Run 拡張機能で Gemini CLI を使用する手順は次のとおりです。
MCP
Model Context Protocol(MCP)クライアントのソースコードから Cloud Run サービスをデプロイするには、Cloud Run Model Context Protocol(MCP)サーバーをインストールします。
インストール手順は MCP クライアントによって異なります。多くの場合、設定の JSON ファイルに次の行を追加する必要があります。
"mcpServers":{ "cloud-run": { "command": "npx", "args": ["-y", "@google-cloud/cloud-run-mcp"] } }
Compose
Compose Specification を YAML ファイルに保存し、1 つの gcloud コマンドを使用して、ソースコードから Cloud Run サービスとしてデプロイできます。
デプロイが完了すると、Cloud Run サービスの URL が表示されます。この URL をコピーしてブラウザに貼り付けると、実行中のコンテナが表示されます。 Google Cloud コンソールからデフォルトの認証を無効にできます。
ビルドなしでソースからデプロイする
ソース アーティファクトを Cloud Run に直接デプロイして、Cloud Build のステップをバイパスできます。この方法では、ソースからコンテナ イメージをビルドする代わりに、アプリケーションの事前パッケージ化されたアーカイブを Cloud Storage バケットに直接アップロードできます。Cloud Run はこのアーカイブを取得し、ベースイメージで直接実行します。このアプローチにより、デプロイ時間が大幅に短縮されます。
制限事項
ビルドなしでソースにデプロイする場合、サポート対象が次のものに制限されます。
- Cloud Run サービス。
- サポートされているランタイム(Dockerfile のサポートなし)。
- ソース アーカイブ(.tar.gz)、250 MiB 以下。
- バイナリ(Go バイナリなど)またはスクリプト(Python スクリプトなど)は、x86 アーキテクチャと互換性がある必要があります。
- ソースは自己完結型で、すべての依存関係がパッケージ化されている必要があります。ランタイム ベースイメージには、最小限のオペレーティング システムといくつかの言語ライブラリのみが含まれています。
ビルドなしでデプロイする前に
「ビルドなしでデプロイ」機能を使用するには:
- 始める前にの手順に沿って作業を進めてください。
Cloud Run と Cloud Storage API を有効にします。
gcloud services enable run.googleapis.com \ storage.googleapis.com
アプリケーションの依存関係はインストールされていません(ビルドなし)。デプロイ前にローカルにインストールする必要があります。
ビルドなしでデプロイする
このセクションでは、ビルドを使用せずにアーティファクトを Cloud Run に直接デプロイする方法について説明します。
gcloud
ローカル ソース ディレクトリをデプロイするには、--no-build フラグを使用して、deploy コマンドに Cloud Build のステップをバイパスするように指示します。
gcloud beta run deploy SERVICE_NAME \ --source APPLICATION_PATH \ --no-build \ --base-image=BASE_IMAGE \ --command=COMMAND \ --args=ARG
次のように置き換えます。
SERVICE_NAME: Cloud Run サービスの名前。APPLICATION_PATH: ローカル ファイル システム上のアプリケーションの場所。BASE_IMAGE: アプリケーションで使用するランタイム ベースイメージ。例:us-central1-docker.pkg.dev/serverless-runtimes/google-24-full/runtimes/nodejs24COMMAND: コンテナを起動するコマンド。ARG: コンテナ コマンドに送信する引数。複数の引数を使用する場合は、それぞれを 1 行に 1 つずつ指定します。
YAML
サービス仕様を YAML ファイルに保存してから、gcloud CLI または Google Cloud コンソールの service.yaml エディタを使用してデプロイできます。
アプリケーションを保持するストレージ バケットを作成します。
gcloud storage buckets create gs://BUCKET_NAME --location=BUCKET_LOCATION
次のように置き換えます。
zip または tar を使用して、アプリケーションのソースを含むアーカイブを作成します。例:
tar -cvzf ARCHIVE_NAME APPLICATION_PATH
次のように置き換えます。
ARCHIVE_NAME: 作成するアーカイブの名前。例:app.tar.gzAPPLICATION_PATH: ローカル ファイル システム上のアプリケーションの場所。例:~/my-application現在の作業ディレクトリをアーカイブするには、この値を*に設定します。
アプリケーション アーカイブを Cloud Storage にアップロードします。
gcloud storage cp ARCHIVE_NAME gs://BUCKET_NAME
次のように置き換えます。
ARCHIVE_NAME: 以前に作成したアーカイブのローカルパス。例:app.tar.gzBUCKET_NAME: 以前に作成したバケットの名前。例:my-bucket
次の内容の新しいファイルを
service.yamlという名前で作成します。apiVersion: serving.knative.dev/v2 kind: Service metadata: name: SERVICE_NAME spec: template: metadata: annotations: run.googleapis.com/sources: '{"": "gs://BUCKET_NAME/ARCHIVE_NAME"}' run.googleapis.com/base-images: '{"": "BASE_IMAGE"}' spec: containers: - image: scratch command: - COMMAND args: - ARG1 - ARG-N runtimeClassName: run.googleapis.com/linux-base-image-update次のように置き換えます。
SERVICE_NAME: Cloud Run サービスの名前。サービス名は 49 文字以下で、リージョンとプロジェクトごとに一意である必要があります。BUCKET_NAME: 以前に作成したバケットの名前。例:my-bucketARCHIVE_NAME: 以前に作成したアーカイブのローカルパス。例:app.tar.gzBASE_IMAGE: アプリケーションで使用するランタイム ベースイメージ。例:us-central1-docker.pkg.dev/serverless-runtimes/google-24-full/runtimes/nodejs24COMMAND: コンテナを起動するコマンド。ARG1: コンテナ コマンドに送信する引数。複数の引数を使用する場合は、それぞれを 1 行に 1 つずつ指定します。たとえば、上述のARG-Nのようにします。
新しいサービスをデプロイします。
gcloud run services replace service.yaml
REST API
REST API:
curl -H "Content-Type: application/json" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-X POST \
-d '{"template": {"containers": [{"command": ["npm"], "args": ["start"], "image": "scratch", "baseImageUri": "google-22/nodejs22", "sourceCode": {"cloudStorageSource": {"bucket": "'GCS_BUCKET_NAME", "object":"ARCHIVE"}}}]}}' \
https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services?serviceId=SERVICE_NAME
ビルドなしでソースからデプロイする例
このセクションでは、ビルドを使用せずにソースからデプロイする方法の例を示します。
Node.js
Node.js サービスを作成します。
helloworldという名前の新しいディレクトリを作成し、そのディレクトリに移動します。mkdir helloworld cd helloworld
package.jsonファイルを作成し、次の内容を追加します。同じディレクトリに
index.jsファイルを作成し、次の行をコピーします。このコードは、
PORT環境変数で定義されたポートをリッスンする基本的なウェブサーバーを作成します。helloworldディレクトリで、次のコマンドを実行して、サービスの依存関係をローカルにインストールします。npm install
helloworldディレクトリで、--no-buildフラグを使用してサービスをデプロイします。このフラグは、deployコマンドに Cloud Build のステップをスキップするように指示します。gcloud beta run deploy helloworld \ --source . \ --region=REGION \ --no-build \ --base-image=nodejs24 \ --command=node \ --args=index.js
次のように置き換えます。
REGION: サービスがデプロイされているリージョン。
Python
Python サービスを作成します。
helloworldという名前の新しいディレクトリを作成し、そのディレクトリに移動します。mkdir helloworld cd helloworldmain.pyという名前のファイルを作成し、次のコードを貼り付けます。このコードは、「Hello World」という応答メッセージでリクエストに応答します。HTTP 処理は、コンテナ内の Gunicorn ウェブサーバーによって行われます。ローカルで使用するために直接呼び出された場合、このコードは
PORT環境変数で定義されたポートをリッスンする基本的なウェブサーバーを作成します。requirements.txtという名前のファイルを作成し、次のコードを貼り付けます。このコードにより、サンプルで必要なパッケージが追加されます。
依存関係をベンダリングします。
pip3 install -r requirements.txt --target=./vendor
gcloud CLI を使用してサービスをデプロイします。
--no-buildフラグは、Cloud Build のステップをバイパスするようにdeployコマンドに指示します。gcloud beta run deploy helloworld \ --source . \ --region=REGION \ --no-build \ --base-image=python313 \ --command=python \ --args=main.py \ --set-env-vars PYTHONPATH=./vendor
REGION は、サービスがデプロイされているリージョンに置き換えます。
トラブルシューティング
このセクションでは、ビルドを使用せずにソースからデプロイする際のトラブルシューティングのヒントを紹介します。
ローカルでの開発
ビルドを使用せずにソースからデプロイすることは、コードまたは実行可能ファイルをベースイメージにマウントすることと似ています。
例:
すべてのコンテンツのコピーを作成します。
cp -R python/hello-world/ workspace
ソースをマウントした状態で、ベースイメージを root ユーザーとして実行します。ホストマシンから curl を実行する必要がある場合は、必要に応じて
-p 8080:8080を含めることができます。docker run -it -v "LOCAL_PATH" -u 0 us-central1-docker.pkg.dev/serverless-runtimes/google-22-full/runtimes/python313 /bin/bash`
LOCAL_PATH は、ローカル ソース ファイルの場所に置き換えます。
サーバーを実行します。
python main.py
実行ログ
実行ログは、デプロイの失敗をデバッグする際に役立ちます。Google Cloud コンソールで、[オブザーバビリティ] > [ログ] に移動します。
Cloud Storage へのアクセスが拒否された
Cloud Run サービスが Cloud Storage オブジェクトにアクセスしようとしたときに「権限がありません」というエラーが発生する場合は、Cloud Run サービス アカウントに roles/storage.objectViewer ロールを付与する必要があります。
gcloud projects add-iam-policy-binding PROJECT \ --member="SERVICE_ACCOUNT" \ --role="roles/storage.objectViewer"
次のように置き換えます。
- PROJECT: 実際の Google Cloud プロジェクト ID。
- SERVICE_ACCOUNT: Cloud Run サービス アカウント。例:
service-123@serverless-robot-staging.iam.gserviceaccount.com
ソースからのビルドの自動化
ローカルソースで、バージョニングされていない変更が行われないようにするため、変更を Git リポジトリに push する際に自動的にデプロイすることをおすすめします。これを簡単に行うために、Cloud Run サービスに接続して、継続的なデプロイを構成できます。GitHub リポジトリを Cloud Run に接続することで、Dockerfile の記述やファイルのビルドなしで、ビルドを構成してリポジトリをデプロイできます。
自動ビルドを構成するには、継続的なビルドのページの説明に従って自動化を設定し、Buildpack を使用してソースをビルドするオプションを選択します。次のステップ
Cloud Run サービスをデプロイした後、次のことを行うことができます。
- 段階的なロールアウト、ロールバックの修正、トラフィックの移行
- サービスログを表示する
- サービスのパフォーマンスをモニタリングする
- メモリ制限を設定する
- 環境変数を設定する
- サービスの同時実行を変更する
- サービスを管理する
- サービスのリビジョンを管理する
ソースのデプロイ構成について学びます。
Cloud Build トリガーを使用して Cloud Run サービスのビルドとデプロイを自動化できます。