Pythonで軽量&超高速なAPIをサクッと開発し、できればインフラコストを「完全無料(0円)」で本番公開したいと考えたことはありませんか?
本記事では、Google Cloudのコンテナ実行プラットフォーム「Cloud Run」と、Webフレームワーク「FastAPI」を組み合わせたモダンなWeb API構築手順をわかりやすく解説します。
1. はじめに(記事の概要とターゲット)
想定読者
- PythonでAPIを開発している/したいエンジニア
- Dockerを使ったコンテナ構築の手順を学びたい方
- インフラコストを抑えて、個人開発サービスやWeb APIを本番環境に公開したい方
この記事で学べること
- Cloud Runの基本特徴とメリット・デメリット
- Cloudflare Workers(Edge Serverless)との比較と適切な使い分け
- WSL2 + Docker × FastAPI環境のローカル構築手法
- Source-to-Image(ソースコードからの直接デプロイ)によるCloud Run本番公開手順
- 予期せぬ課金を完全に防ぐインフラ運用ノウハウ
2. Cloud Runとは?基本概要と選ばれる理由
Google Cloudが提供するCloud Runは、コンテナ(Docker)をそのまま実行できるフルマネージドのサーバーレスプラットフォームです。
主な特徴
- 言語・ライブラリ制限なし(コンテナベース): Dockerイメージさえ用意すれば、Pythonのどんなライブラリ(NumPy, PyTorch等)も自由に動作します。
- 0への自動スケーリング: リクエストがない時はインスタンスが0になり、課金が発生しない。
- 従量課金制: リクエスト処理中のCPU/メモリ使用時間に対してのみ課金。
- HTTPS標準対応: デフォルトでSSL/TLS証明書が割り当てられる。
3. Cloud Run vs Cloudflare Workers 徹底比較
Webアプリケーションをエッジやサーバーレスで動かす際によく比較されるCloudflare Workersとの相違点です。目的によって使い分けましょう。
| 項目 | Cloud Run | Cloudflare Workers |
| 実行基盤 | コンテナ(Docker) | V8 Isolates(JavaScript/Wasm) |
| 対応言語 | 制限なし (Python, Go, Node.js等) | JS, TS, Wasm (PythonはPyodide経由) |
| 起動速度 | コールドスタートあり(数秒) | 超高速(ミリ秒単位) |
| 機械学習/重い処理 | 得意 (NumPy, PyTorch, C拡張等) | 不向き(実行制限・メモリ制限厳しめ) |
| ユースケース | FastAPI/Django、AIモデル推論、Web App | エッジロジック、超高速API、BFF層 |
💡 選定のポイント
Pythonの強力なデータ処理・AIライブラリをフル活用したい場合や、既存のDocker資産を活かしたい場合はCloud Runが一択です。一方、単純なJSON応答やエッジでのリダイレクト処理ならCloudflare Workersが適しています。
自分が使い始めたきっかけはOCRツールの活用プロジェクトからでした。
OCR処理には Tesseract OCR などのC/C++製エンジンや、画像前処理のための OpenCV、Pillow など重い外部ライブラリが必須になります。これらのシステムバイナリがCloud Runなら自由に使うことができます。Cloudflare Workers: JavaScript / V8 Isolates(WASM)の環境のため、Linuxコマンドや標準的なPython/C系ライブラリは動きません。
Cloud Run: Dockerコンテナ(Linux)がそのまま動くため、apt-get install tesseract-ocr などで何でも自由に入れられます。
4. 開発環境の準備(WSL2 + Docker)
今回はWindows上のWSL2 (Ubuntu) 環境で、Docker Desktopを使わずに軽量なネイティブDocker環境を構築します。

WSL2+Dockerの環境構築については、以下の記事でWSL2とDockerの環境構築を解説していますのでぜひご覧ください。
5. FastAPIサンプルコードの作成
プロジェクトディレクトリを作成し、以下の4つのファイルを配置します。
my-fastapi-app/
├── main.py
├── requirements.txt
├── Dockerfile
└── .dockerignore① requirements.txt
fastapi>=0.110.0
uvicorn[standard]>=0.28.0② main.py
Cloud Runでは、環境変数 PORT(デフォルト 8080)で指定されたポートをListenする必要があります。
import os
from fastapi import FastAPI
app = FastAPI(title="Cloud Run FastAPI Sample")
@app.get("/")
def read_root():
return {
"status": "success",
"message": "Hello from FastAPI on Cloud Run!",
"environment": os.getenv("ENV", "development")
}
@app.get("/healthz")
def health_check():
return {"status": "ok"}
③ Dockerfile
軽量な python:3.11-slim イメージを使用します。
FROM python:3.11-slim
# 作業ディレクトリルートの設定
WORKDIR /app
# 依存関係のインストール
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# アプリケーションコードのコピー
COPY . .
# Cloud Runが提示するPORT環境変数に対応(デフォルト8080)
ENV PORT=8080
# Uvicornで起動(0.0.0.0でバインド必須)
CMD ["sh", "-c", "uvicorn main:app --host 0.0.0.0 --port ${PORT}"]④ .dockerignore
__pycache__
*.pyc
*.pyo
*.pyd
.git
.venv
env/
6. ローカル環境での動作確認
本番デプロイ前に、ローカルのDocker上で動作確認を行います。
# 1. Dockerイメージのビルド
docker build -t fastapi-cloudrun-app .2. ローカルコンテナの起動
docker run -d -p 8080:8080 --name my-fastapi-container fastapi-cloudrun-appブラウザで http://localhost:8080 や http://localhost:8080/docs (Swagger UI) にアクセスし、正常にレスポンスが返るか確認します。
4. 確認が終わったらコンテナを停止・削除
docker stop my-fastapi-container && docker rm my-fastapi-container7. Cloud Runへの本番デプロイ手順
gcloud CLIを利用してGoogle Cloudへデプロイします(Google Artifact Registryとの連携も自動で行われます)。
WSL2(Ubuntu)から gcloud コマンドを使うには、Google Cloud SDK(google-cloud-cli)のインストールが必要です。
Ubuntu環境(WSL2)で導入する手順は以下の通りです。
インストール手順(WSL2 Ubuntu ターミナルで実行)
APTパッケージマネージャーを使って、Google Cloud公式リポジトリからインストールします。
# 1. 必要なパッケージのインストールとGoogleの公開鍵を追加
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg
# 2. リポジトリの追加
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
# 3. パッケージリストを更新して gcloud CLI をインストール
sudo apt-get update && sudo apt-get install -y google-cloud-cliインストールが終わったら、ログインと初期設定を行います。
gcloud init実行すると認証URLが表示(またはブラウザが起動)されるので、Googleアカウントでログインして利用するプロジェクトを選択すればセットアップ完了です!
# 1. 新しいプロジェクトを作成
gcloud projects create YOUR_PROJECT_ID
# 2. 作成したプロジェクトを操作対象に指定
gcloud config set project YOUR_PROJECT_ID必要なAPIの有効化
gcloud services enable run.googleapis.com artifactregistry.googleapis.com build.googleapis.com【★ ここでブラウザ操作が必要!】
請求先アカウントを作成してプロジェクトと紐づける必要があります。
たとえ請求がなくても本人確認と悪用防止のためにクレジットカードの登録が必要となります。
ワンコマンドで本番デプロイ
ソースコードから直接Cloud Runへデプロイ(Buildpacks / Cloud Buildが自動実行)
gcloud run deploy fastapi-service \
--source . \
--region asia-northeast1 \
--allow-unauthenticatedこのコマンドは、「カレントディレクトにあるソースコードから自動で Docker コンテナをビルドし、東京リージョンの Cloud Run へ認証なし(誰でもアクセス可能)でWebサービスとして公開する」 という一連の処理を一括実行するコマンドです。
各オプションの解説
- fastapi-service: デプロイするサービス名(URLの一部になります)を自分で自由に決めます
- –source .: ソースコードを直接送信。Cloud Buildが自動でコンテナ化してくれます
- –region asia-northeast1: 日本国内で最小遅延となる「東京リージョン」を指定
- –allow-unauthenticated: インターネットからの匿名リクエスト(パブリックアクセス)を許可
完了すると、ターミナルに以下のような本番URLが表示されます。
Service URL: https://fastapi-service-xxxx-an.a.run.app
8. 利用料金について
Cloud Run は使っていない時(アクセスがない時)の料金は完全「0円」になります!特別な停止操作も必要ありません。
Google Cloud の「無料枠(毎月リセットされる枠)」の仕組みと、完全に無料で使い続けるための注意点・設定について解説します。

1. 使っていない時は停止できる?(自動で0になります)
Cloud Run は「サーバーレス(従量課金)」という仕組みで動いています。
- リクエスト(アクセス)がない時:実行されるコンテナインスタンスの数が自動的に「0」(スケールダウン)になります。CPU やメモリの消費も一切停止するため、料金は完全に 0 円です。
- 手動で「停止」ボタンを押す必要はありません。 アクセスがあった瞬間に数秒で自動起動し、アクセスが途絶えると自動で停止します。
2. Cloud Run の「月間無料枠」について
Google Cloud では、毎月以下の無料枠が自動的に付与されます。個人のテスト開発や個人ブログ・開発ポートフォリオ程度であれば、月間数十万アクセスあっても無料枠内に収まります。
| リソース | 毎月の無料枠 |
| リクエスト数 | 200 万回 / 月 |
| vCPU 時間 | 18 万 vCPU 秒(50 時間相当) |
| メモリ時間 | 36 万 GiB 秒 |
| ネットワーク送信 | 北米宛等を除く一般データ転送 1 GB / 月(アジア等) |
3. 完全「0円」で運用するための設定と注意点
予期せぬ請求を防ぎ、確実に無料枠内で運用するための重要ポイントが 3 つあります。
① 最小インスタンス数を「0」にしておく(デフォルトで0)
コンテナを常に 1 つ以上立ち上げっぱなしにする設定(min-instances)にしてしまうと、アクセスが無くても課金が発生します。デプロイ時はデフォルトの「0」のままにしておきます。
- ※今回実行した gcloud run deploy コマンドはデフォルトで 0 になっているため、設定変更は不要です。
② Artifact Registry(コンテナ画像の保存庫)の課金に注意
デプロイするたびに古いコンテナイメージが保存庫(Artifact Registry)に溜まっていきます。保存データ容量が無料枠(0.5 GB / 月)を超えると、月数円〜数十円程度のストレージ代がかかることがあります。
- 対策:使わなくなった古いイメージを定期的に削除するか、数ヶ月に一度不要なリポジトリを整理すると安心です。
Artifact Registry に保存されているイメージの確認は、gcloud CLI から以下のコマンドで簡単に実行できます。
右のほうにSIZE (MB)があって、現在は59.202MBということが分かります。
gcloud artifacts repositories list
# 以下のような結果が得られます
Listing items under project cloud-run-test-2026-08, across all locations.
ARTIFACT_REGISTRY
REPOSITORY FORMAT MODE DESCRIPTION LOCATION LABELS ENCRYPTION CREATE_TIME UPDATE_TIME SIZE (MB)
cloud-run-source-deploy DOCKER STANDARD_REPOSITORY Cloud Run Source Deployments asia-northeast1 Google-managed key 2026-08-30T07:07:53 2026-08-30T07:08:37 59.202デプロイを繰り返すと、新しいイメージに latest タグが移り、過去のイメージは「タグなし(Untagged)」として残ります。
タグのついていない未使用イメージをまとめて探して一括削除するには、以下のコマンドを実行します。
# 現在設定されているプロジェクト内の「すべてのリポジトリ」からタグなしイメージを削除
gcloud artifacts repositories list --format="value(name)" | while read -r repo; do
gcloud artifacts docker images list "$repo" \
--filter="NOT tags:*" \
--format="get(self_link)" | \
xargs -r -I {} gcloud artifacts docker images delete {} --delete-tags --quiet
done💡 コンソール(Web画面)から削除する場合
コマンドを使わずにブラウザで削除することも可能です。
- Google Cloud Console – Artifact Registry を開く。
- リポジトリ一覧から cloud-run-source-deploy を選択。
- アプリ名(fastapi-service)をクリックし、表示された一覧から不要な過去のバージョンにチェックを入れて 「削除」 を押す。
定期的に古いイメージを削除しておくことで、ストレージの無料枠(0.5 GB/月)を気にせず安心して運用を続けられます。
③ 予算アラートの設定(念のための安全策)
「間違って大量アクセスが発生したらどうしよう」という不安をなくすため、「月1円でも発生したらメールで通知する」予算アラートを設定しておくと安心です。
【設定手順】
- Google Cloud Console – 予算とアラート を開く。
- 「予算を作成」 をクリック。
- 予算額を 「1円」 に設定し、アラート通知先のメールアドレスを確認して保存。
まとめ
- 放置していても自動的に「0」になるため、使わない時の課金リスクはありません。
- 個人開発の段階であれば、一切お金を払わずに本番環境として公開・運用し続けることができます!
9. ハマりやすいポイントと対策(個人体験メモ)
- ポート番号の設定ミス:
FastAPIを 127.0.0.1 で起動するとコンテナ外からのリクエストを受け取れません。必ず –host 0.0.0.0 に指定してください。 - コールドスタート問題:
リクエストがない状態から復帰する際、数秒のレイテンシが発生します。気になる場合は、最小インスタンス数 –min-instances 1 に設定することで回避できます(※常に1台動くため無料枠を超えやすくなります)。 - メモリ不足によるヘルスチェック失敗:
Pythonの重いライブラリ(PandasやPyTorch等)を入れると、デフォルトのメモリ(512MiB)では不足して起動失敗(503エラー)になることがあります。必要に応じて –memory 1Gi など調整してください。
10. まとめ
Cloud RunとFastAPIの組み合わせは、Pythonの強力なエコシステムをそのまま活かしつつ、保守運用コストとインフラコストを最小化できる最強の構成の一つです。
まずは無料枠の範囲内で、個人の小型APIやプロトタイプから試してみてはいかがでしょうか。



コメント