1. 概要

Google App Engine アプリケーションは作成や管理が簡単で、トラフィックやデータ ストレージの需要の変動に合わせて容易にスケーリングできます。App Engine 環境では、サーバーを管理する手間がかかりません。必要な作業は、アプリケーションをアップロードすることだけです。
この Codelab では、Flask ウェブ フレームワークで作成されたシンプルな Python ウェブアプリをデプロイする方法を学びます。このサンプルでは Flask を使用していますが、Django、Pyramid、Bottle、web.py などの他のウェブ フレームワークも使用できます。
このチュートリアルは、https://cloud.google.com/appengine/docs/standard/python3/quickstart を基に作成されています。
学習内容
- Google App Engine で簡単な Python サーバーを作成する方法。
- サーバーをダウンさせずにコードを更新する。
必要なもの
- Python の使用経験
- Linux の標準的なテキスト エディタ(vim、emacs、nano など)を使い慣れていること
アンケート
このチュートリアルをどのように使用されますか?
Python のご利用経験はどの程度ありますか?
Google Cloud サービスの使用経験はどの程度ありますか?
2. 設定と要件
セルフペース型の環境設定
- Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。



- プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。いつでも更新できます。
- プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は
PROJECT_IDと識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ ID になります。 - なお、3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
- 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクトを削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。
Cloud Shell の起動
Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。
Cloud Shell をアクティブにする
- Cloud Console で、[Cloud Shell をアクティブにする]
をクリックします。

Cloud Shell を初めて起動する場合は、その内容を説明する中間画面が表示されます。中間画面が表示された場合は、[続行] をクリックします。

すぐにプロビジョニングが実行され、Cloud Shell に接続されます。

この仮想マシンには、必要な開発ツールがすべて用意されています。仮想マシンは Google Cloud で稼働し、永続的なホーム ディレクトリが 5 GB 用意されているため、ネットワークのパフォーマンスと認証が大幅に向上しています。このコードラボで行う作業のほとんどはブラウザから実行できます。
Cloud Shell に接続すると、認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されていることがわかります。
- Cloud Shell で次のコマンドを実行して、認証されたことを確認します。
gcloud auth list
コマンド出力
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- Cloud Shell で次のコマンドを実行して、gcloud コマンドがプロジェクトを認識していることを確認します。
gcloud config list project
コマンド出力
[core] project = <PROJECT_ID>
上記のようになっていない場合は、次のコマンドで設定できます。
gcloud config set project <PROJECT_ID>
コマンド出力
Updated property [core/project].
3. ウェブアプリを作成する
Cloud Shell が起動したら、コマンドラインを使用して、Cloud SDK の gcloud コマンドや、仮想マシン インスタンスで利用可能なその他のツールを起動できます。永続ディスク ストレージ内の $HOME ディレクトリを使用してファイルを保存し、複数のプロジェクトや Cloud Shell セッションで使用することもできます。$HOME ディレクトリはプライベート ディレクトリであるため、他のユーザーはアクセスできません。
まず、アプリケーション用に $HOME ディレクトリに新しいフォルダを作成します。
mkdir ~/helloworld cd ~/helloworld
main.py という名前のファイルを作成します。
touch main.py
お好みのコマンドライン エディタ(nano、vim、emacs)を使用するか、Cloud Shell エディタ ボタンをクリックしてファイルを編集します。

Cloud Shell エディタでファイルを直接編集するには、次のコマンドを使用します。
cloudshell edit main.py
main.py
import flask
# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)
@app.get("/")
def hello():
"""Return a friendly HTTP greeting."""
return "Hello World!\n"
if __name__ == "__main__":
# Used when running locally only. When deploying to Google App
# Engine, a webserver process such as Gunicorn will serve the app. This
# can be configured by adding an `entrypoint` to app.yaml.
app.run(host="localhost", port=8080, debug=True)
4. 依存関係を定義する
ウェブアプリの依存関係を指定するには、ターミナルに戻り、使用する Flask の正確なバージョンを指定して、プロジェクトのルート ディレクトリに requirements.txt ファイルを作成します。
touch requirements.txt
Cloud Shell エディタでファイルを編集するには、次のコマンドを使用します。
cloudshell edit requirements.txt
requirements.txt
# https://pypi.org/project/Flask
Flask==3.0.2
5. デプロイを構成する
ウェブアプリを App Engine にデプロイするには、app.yaml ファイルが必要です。この構成ファイルでは、App Engine 用のウェブアプリの設定を定義します。
ターミナルで、プロジェクトのルート ディレクトリに app.yaml ファイルを作成して編集します。
touch app.yaml
Cloud Shell エディタでファイルを編集するには、次のコマンドを使用します。
cloudshell edit app.yaml
app.yaml
runtime: python312
6. ウェブアプリをデプロイする
ターミナルから、ディレクトリの内容を確認します。
ls
次の 3 つのファイルが必要です。
app.yaml main.py requirements.txt
次のコマンドを使用してウェブアプリをデプロイします。
gcloud app deploy
初回は、デプロイするリージョンを選択する必要があります。
Please choose the region where you want your App Engine application located: [1] asia-east2 ... [7] australia-southeast1 [8] europe-west [9] europe-west2 ... [12] northamerica-northeast1 [13] southamerica-east1 ... [19] us-west4 ... Please enter your numeric choice:
デプロイを開始することを確認します。
Creating App Engine application in project [PROJECT_ID] and region [REGION]....done. Services to deploy: descriptor: [~/helloworld/app.yaml] source: [~/helloworld] target project: [PROJECT_ID] target service: [default] target version: [YYYYMMDDtHHMMSS] target url: [https://PROJECT_ID.REGION_ID.r.appspot.com] Do you want to continue (Y/n)?
アプリがデプロイされます。
Beginning deployment of service [default]... Created .gcloudignore file. See `gcloud topic gcloudignore` for details. Uploading 3 files to Google Cloud Storage 100% File upload done. Updating service [default]...done. Setting traffic split for service [default]...done. Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]
これで、ウェブアプリは https://PROJECT_ID.REGION_ID.r.appspot.com で HTTP リクエストに応答する準備が整いました。
7. ウェブアプリをテストする
ウェブアプリは https://PROJECT_ID.REGION_ID.r.appspot.com で HTTP リクエストに応答する準備が整いました。
まず、gcloud app describe コマンドを使用してウェブアプリのホスト名を取得します。
APPENGINE_HOSTNAME=$(gcloud app describe --format "value(defaultHostname)")
次の簡単な HTTP GET リクエストを使用して、ウェブアプリをテストします。
curl https://$APPENGINE_HOSTNAME
次のような回答が返されます。
Hello World!
概要
前の手順では、シンプルな Python ウェブアプリをセットアップし、App Engine でアプリケーションを実行してデプロイしました。
8. ウェブアプリを更新する
main.py ファイルの hello() 関数本体を変更して、ウェブアプリを変更します。
Cloud Shell エディタでファイルを編集するには、次のコマンドを使用します。
cloudshell edit main.py
main.py
import flask
# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)
@app.get("/")
def hello():
"""Return a friendly HTTP greeting."""
# return "Hello World!\n" # ← Replace this line
who = flask.request.args.get("who", "World")
return f"Hello {who}!\n"
if __name__ == "__main__":
# Used when running locally only. When deploying to Google App
# Engine, a webserver process such as Gunicorn will serve the app. This
# can be configured by adding an `entrypoint` to app.yaml.
app.run(host="localhost", port=8080, debug=True)
ターミナルから再デプロイして、ウェブアプリを更新します。
gcloud app deploy --quiet
アプリの新しいバージョンがデプロイされます。
Beginning deployment of service [default]... Uploading 1 file to Google Cloud Storage ... Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]
以前と同じように、ウェブアプリの新しいバージョンをテストします。
curl https://$APPENGINE_HOSTNAME
同じ答えが返されます。
Hello World!
オプション パラメータを使用してテストします。
curl https://$APPENGINE_HOSTNAME?who=Universe
次のような回答が返されます。
Hello Universe!
概要
このステップでは、サービスの中断なしでウェブアプリを更新して再デプロイしました。
9. 完了
Python で最初の App Engine ウェブ アプリケーションを作成する方法を学習しました。
詳細
- App Engine のドキュメント: https://cloud.google.com/appengine
- このチュートリアルでは、App Engine で本格的な Python アプリを作成する方法について説明します。https://cloud.google.com/appengine/docs/standard/python3/building-app
ライセンス
この作業はクリエイティブ・コモンズの表示 2.0 汎用ライセンスにより使用許諾されています。