概要
Buildpacks は、コンテナ イメージをビルドするもう一つのアプローチで、ソースコードをコンテナ イメージに変換する代替手法を提供します。Buildpacks はビルダーと呼ばれるイメージに含まれる形で提供され、その中で実行されます。各ビルダーには 1 つ以上の Buildpacks を含めることができます。ビルダーは、ソースコードをコンテナ イメージに変換する役割を持つイメージです。Buildpacks は、Cloud Run にデプロイしたりローカルで Docker を使って実行したりできるコンテナ イメージを実際にビルドしてパッケージ化します。
独自の Buildpacks を作成することも、複数のベンダーが提供する Buildpacks を使用することもできます。Google Cloud の Buildpacks を使用すると、Docker をローカルにインストールしたり Dockerfile を作成したりすることなく、コンテナ化アプリケーションを作成、デプロイできます。Buildpacks は Cloud Run にも組み込まれており、ソースベースのデプロイ ワークフローを実現します。
目標
このラボの内容:
-
pack を使用してアプリケーションをビルドする。pack は、ビルダーと併用してソースコードからコンテナ イメージを作成するコマンドライン ツールです。
- Google Cloud の Buildpacks ビルダーを使用して、コンテナ イメージをビルドする。
- Docker を使用してコンテナをローカルで実行し、テストします。
- コンテナをビルドして Cloud Run に再デプロイする。
設定
各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。
-
Qwiklabs にシークレット ウィンドウでログインします。
-
ラボのアクセス時間(例: 1:15:00)に注意し、時間内に完了できるようにしてください。
一時停止機能はありません。必要な場合はやり直せますが、最初からになります。
-
準備ができたら、[ラボを開始] をクリックします。
-
ラボの認証情報(ユーザー名とパスワード)をメモしておきます。この情報は、Google Cloud Console にログインする際に使用します。
-
[Google Console を開く] をクリックします。
-
[別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。
他の認証情報を使用すると、エラーが発生したり、料金の請求が発生したりします。
-
利用規約に同意し、再設定用のリソースページをスキップします。
Google Cloud Shell の有効化
Google Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。
Google Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
-
Google Cloud コンソールで、右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。

-
[続行] をクリックします。
環境がプロビジョニングされ、接続されるまでしばらく待ちます。接続した時点で認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されます。次に例を示します。

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- 次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
出力:
Credentialed accounts:
- @.com (active)
出力例:
Credentialed accounts:
- google1623327_student@qwiklabs.net
- 次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project
出力:
[core]
project =
出力例:
[core]
project = qwiklabs-gcp-44776a13dea667a6
注:
gcloud ドキュメントの全文については、
gcloud CLI の概要ガイド
をご覧ください。
タスク 1. 環境とプロジェクトを構成する
このタスクでは、環境変数を設定し、Cloud Shell 環境を構成します。
Cloud Shell 環境を構成する
-
Cloud Shell で次のコマンドを実行して、プロジェクト ID とリージョンの環境変数を設定します。
PROJECT_ID=$(gcloud config get-value project)
REGION={{{project_0.default_region|us-central1}}}
-
Cloud Shell でコンピューティング リージョンを設定します。
gcloud config set compute/region $REGION
Google API を有効にする
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Google API を有効にする
タスク 2. Docker を使用してアプリケーションをビルド、実行する
このタスクでは、pack コマンドライン ツールと Google Cloud の Buildpacks ビルダーを使用して、サンプル アプリケーションをビルドします。
アプリケーションを開発する
-
app ディレクトリを作成し、そのディレクトリに移動します。
mkdir app && cd app
-
このラボのサンプル python アプリケーションを Cloud Storage からコピーし、アーカイブ ファイルからコンテンツを抽出します。
gcloud storage cp gs://cloud-training/CBL513/sample-apps/sample-py-app.zip . && unzip sample-py-app
-
サンプル アプリケーションのファイルとソースコードを表示します。
ls sample-py-app
cat sample-py-app/main.py
Python Buildpacks は、アプリケーションのデフォルトのコンテナ エントリ ポイントを生成しないため、Procfile を使用してアプリケーションの起動コマンドを構成します。このアプリケーションは Python で記述されており、アプリケーションに対するリクエストに応じて、サンプル ウェルカム メッセージを返します。
コンテナをビルドする
-
サンプル アプリケーションのディレクトリに移動します。
cd sample-py-app
-
Cloud Shell で pack バイナリを更新します。
(curl -sSL "https://github.com/buildpacks/pack/releases/download/v0.39.0/pack-v0.39.0-linux.tgz" | sudo tar -C /usr/local/bin/ --no-same-owner -xzv pack)
pack は、Cloud Native Buildpack(CNB)を使ってアプリケーションのソースコードからコンテナ イメージをビルドするために使用される、コマンドライン インターフェース(CLI)ツールです。
-
pack を実行して、コンテナをビルドします。
pack build --builder=gcr.io/buildpacks/builder sample-py-app
出力の一部は次のようになります。
...
...
[exporter] Setting default process type 'web'
[exporter] Saving sample-py-app...
[exporter] *** Images (9f9f9a48fd46):
[exporter] sample-py-app
[exporter] Adding cache layer 'google.python.pip:pip'
[exporter] Adding cache layer 'google.python.pip:pipcache'
Successfully built image sample-py-app
注: pack を使用する場合、コンテナ イメージをビルドするために Dockerfile を記述して提供する必要はありません。
-
次のコマンドを実行して、Cloud Shell ホストにダウンロードしてビルドしたイメージを表示します。
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gcr.io/buildpacks/builder latest 514fb6f1bbfe 29 hours ago 804MB
gcr.io/buildpacks/gcp/run v1 22db1b5e48e3 29 hours ago 177MB
buildpacksio/lifecycle 0.16.0 67e021546a3f 43 years ago 30.5MB
sample-py-app latest 9f9f9a48fd46 43 years ago 571MB
-
次のコマンドを使用してコンテナをローカルの Docker で実行し、アプリケーションに PORT 環境変数を渡すとともに、ホストのポート 8080 をコンテナポートにバインドします。
docker run -it -e PORT=8080 -p 8080:8080 -d sample-py-app
アプリケーション コードは、環境変数で指定されたポート(この場合はポート 8080)をリッスンします。
-
curl コマンドを使用して、コンテナ化アプリケーションをテストします。
curl http://localhost:8080/
次のメッセージがレスポンスとして表示されます。
Welcome to this sample app, built with Buildpacks.
タスク 3. アプリケーションをビルドし、Cloud Run で実行する
開発とデプロイのライフサイクルの次のステップとして、通常は、前のタスクでビルドしたコンテナ イメージを Artifact Registry に push し、そのイメージを Google Kubernetes Engine や Cloud Run などのコンテナベースの環境にデプロイします。
このタスクでは、サンプル アプリケーション コードを変更し、コンテナ化アプリケーションをビルドしてソースから直接 Cloud Run にデプロイします。
アプリケーション コードを変更する
サンプル アプリケーション コードを変更し、Google Translate API を使用して英語のテキストをスペイン語に翻訳します。
-
main.py ファイルを、vi や nano などの任意のエディタで編集します。Cloud Shell メニューから [エディタを開く] をクリックしてファイルを編集することもできます。
-
main.py ファイルの内容全体を以下のコードに置き換えます。
from flask import Flask, request
import google.auth
from google.cloud import translate
app = Flask(__name__)
_, PROJECT_ID = google.auth.default()
TRANSLATE = translate.TranslationServiceClient()
PARENT = 'projects/{}'.format(PROJECT_ID)
SOURCE, TARGET = ('en', 'English'), ('es', 'Spanish')
@app.route('/', methods=['GET', 'POST'])
def index():
# reset all variables
text = translated = None
if request.method == 'POST':
text = request.get_json().get('text').strip()
if text:
data = {
'contents': [text],
'parent': PARENT,
'target_language_code': TARGET[0],
}
# handle older call for backwards-compatibility
try:
rsp = TRANSLATE.translate_text(request=data)
except TypeError:
rsp = TRANSLATE.translate_text(**data)
translated = rsp.translations[0].translated_text
# create context
context = {
'trtext': translated
}
return context
if __name__ == "__main__":
# Dev only: run "python main.py" and open http://localhost:8080
import os
app.run(host="localhost", port=int(os.environ.get('PORT', 8080)), debug=True)
アプリケーション コードは、Google Translate API を使用して、JSON リクエストで渡された英語のテキストをスペイン語に翻訳します。
コンテナをビルドしてデプロイする
-
以下のコマンドを実行して、コンテナをビルドし、Cloud Run にデプロイします。
gcloud run deploy sample-py-app --source . --region=${REGION} --allow-unauthenticated
allow-unauthenticated オプションを使用すると、認証なしでサービスにアクセスできます。
-
プロンプトが表示されたら「Y」と入力し、Artifact Registry に作成されるデフォルトのリポジトリを受け入れてコンテナ イメージを保存します。
-
コマンドが完了すると、sample-py-app という Cloud Run サービスが作成されます。
コマンド出力は次のようになります。
Building using Buildpacks and deploying container to Cloud Run service [sample-py-app] in project [qwiklabs-gcp-00-0d56d42aca1a] region [asia-east1]
OK Building and deploying new service... Done.
OK Creating Container Repository...
OK Uploading sources...
OK Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/8bea2ded-4745-41f9-a82d-128e409daa20?project=34240880885].
OK Creating Revision...
OK Routing traffic...
OK Setting IAM Policy...
Done.
Service [sample-py-app] revision [sample-py-app-00001-nec] has been deployed and is serving 100 percent of traffic.
Service URL: https://sample-py-app-ulvp7xw3bq-de.a.run.app
Cloud Run サービスをテストする
-
前の手順で作成した Cloud Run サービスの環境変数を設定します。
SERVICE_URL=$(gcloud run services describe sample-py-app --region=${REGION} --format="value(status.url)"); echo $SERVICE_URL
-
curl コマンドを実行して、このサービスをテストします。
curl $SERVICE_URL -H 'Content-Type: application/json' -d '{"text" : "Welcome to this sample app, built with Google Cloud buildpacks."}'
サービスにより翻訳されたテキストが返されます。
{"trtext":"Bienvenido a esta aplicaci\u00f3n de muestra, creada con paquetes de compilaci\u00f3n de Google Cloud."}
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Run にアプリケーションをデプロイする
お疲れさまでした
このラボでは、pack コマンドを使ってアプリケーションをビルドし、Google Cloud の Buildpacks ビルダーでサンプル Python アプリケーションのコンテナ イメージを作成しました。まず、コンテナをローカルの Docker で実行、テストしてから、コンテナを再度ビルドして Cloud Run にデプロイしました。
次のステップと詳細情報
詳細については、以下のドキュメントをご覧ください。
GKE、Anthos、Container-Optimized OS など、さまざまなコンテナ プラットフォーム向けの Google Cloud の Buildpacks についての詳細は、以下の GitHub リポジトリをご覧ください。
Copyright 2026 Google LLC All rights reserved. Google および Google のロゴは、Google LLC の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。