カテゴリ: Flask 更新日: 2026/02/16

FlaskアプリをGCP Cloud Functionsで動かす!初心者向けサーバーレス公開ガイド

FlaskアプリをGCP Cloud Functionsで動かす方法を初心者向けに紹介
FlaskアプリをGCP Cloud Functionsで動かす方法を初心者向けに紹介

先生と生徒の会話形式で理解しよう

生徒

「PythonのFlaskで小さなプログラムを作ったのですが、これをサーバーレスで動かしたいです。GCPのCloud Functionsって初心者でも使えますか?」

先生

「Cloud Functionsは、サーバーの管理を一切気にせずに、特定の処理だけをサッと動かせる魔法のようなサービスです。Flaskとの相性も抜群ですよ。」

生徒

「サーバーレスって、サーバーがないってことですか?」

先生

「物理的なサーバーがないわけではなく、私たちがその存在を意識しなくていいという意味です。早速、仕組みと使い方を学んでいきましょう!」

1. GCPとCloud Functionsの基本をマスターしよう

1. GCPとCloud Functionsの基本をマスターしよう
1. GCPとCloud Functionsの基本をマスターしよう

まずは、今回登場する主役たちの紹介です。GCP(ジーシーピー)とは「Google Cloud Platform」の略で、Googleが使っているのと同じ高性能なコンピューター設備を、私たちも借りることができるサービスのことです。検索エンジンやYouTubeを支えている巨大なシステムの一部を使わせてもらうイメージですね。

その中にあるCloud Functions(クラウド・ファンクションズ)は、サーバーレスと呼ばれる仕組みの代表格です。通常のWebサーバーは、誰もアクセスしていない時もずっと動いていて料金がかかりますが、Cloud Functionsは「誰かがアクセスした瞬間だけパッと起動して、仕事が終わればすぐに眠りにつく」という特徴があります。これにより、無駄な電気代(料金)を極限まで抑えることができるのです。

2. Flaskアプリを関数として定義する準備

2. Flaskアプリを関数として定義する準備
2. Flaskアプリを関数として定義する準備

Cloud FunctionsでFlaskを動かすとき、少しだけ書き方にコツがあります。普段のFlaskアプリは自分自身がサーバーとして動こうとしますが、Cloud Functionsでは「リクエスト(お願い)」を受け取って「レスポンス(お返事)」を返す一続きの関数として定義します。

まず、メインとなるプログラム「main.py」を作成しましょう。ここでは、誰かがアクセスしたときに挨拶を返すプログラムを作ります。


import functions_framework
from flask import Flask, request

# クラウド上で動くための特別な設定です
@functions_framework.http
def hello_world(request):
    """
    リクエストを受け取って挨拶を返すだけのシンプルな関数
    """
    # ブラウザから送られてきたデータを確認することもできます
    request_json = request.get_json(silent=True)
    request_args = request.args

    if request_json and 'name' in request_json:
        name = request_json['name']
    elif request_args and 'name' in request_args:
        name = request_args['name']
    else:
        name = 'ゲスト'

    return f"こんにちは、{name}さん!これはGCP Cloud Functionsから届いたメッセージです。"

このプログラムでは、hello_worldという関数を作りました。これがCloud Functionsにおける「入り口」になります。functions_frameworkという道具を使うことで、Flaskの便利な機能をそのままクラウドに持ち込むことができます。

3. 必要な道具リスト requirements.txt の作成

3. 必要な道具リスト requirements.txt の作成
3. 必要な道具リスト requirements.txt の作成

次に、Googleのコンピューターに「このプログラムを動かすにはこれらの材料が必要です」と伝えるためのリストを作ります。ファイル名は必ず「requirements.txt」にする必要があります。これがないと、Googleは「Flaskって何?」と困ってしまいます。


functions-framework==3.*
Flask==3.0.0

このように、使いたい道具(ライブラリ)の名前とバージョンを書いておきます。これをプログラムと同じフォルダに入れておくだけで、デプロイ時にGoogleが自動的にすべてを揃えてくれる仕組みになっています。初心者の方でも、これなら簡単ですね!

4. データの受け取りと計算を行うプログラム例

4. データの受け取りと計算を行うプログラム例
4. データの受け取りと計算を行うプログラム例

せっかくなので、もう少し実用的なプログラムも見てみましょう。例えば、送られてきた数字を足し算して結果を返すアプリを作ってみます。Cloud Functionsは、こうした「ちょっとした計算処理」をさせるのに非常に向いています。


import functions_framework
from flask import jsonify

@functions_framework.http
def add_numbers(request):
    # パラメータからaとbという数字を受け取ります
    params = request.args
    num1 = int(params.get('a', 0))
    num2 = int(params.get('b', 0))
    
    kekka = num1 + num2
    
    # JSONという形式で整えて返します
    data = {
        "ans": kekka,
        "message": "計算が完了しました!"
    }
    return jsonify(data)

このように、URLの末尾に「?a=10&b=20」と付けてアクセスすると、自動的に計算して結果を返してくれるようになります。これがクラウド連携の第一歩です。自分のパソコンだけでなく、インターネットを介して世界中のどこからでも計算を依頼できるようになるのです。

5. GCPコンソールから手動でデプロイする方法

5. GCPコンソールから手動でデプロイする方法
5. GCPコンソールから手動でデプロイする方法

デプロイとは、自分の作ったプログラムをGoogleのサーバーへ配置して、本番公開することです。一番簡単な方法は、ブラウザでGCPの管理画面(コンソール)を開いて操作する方法です。

まず、GCPコンソールで「Cloud Functions」を検索し、「関数を作成」ボタンを押します。関数の名前を決め、リージョン(サーバーの場所)を「asia-northeast1(東京)」に設定しましょう。次に「ランタイム」でPythonを選択します。すると、コードを直接貼り付ける画面が出てくるので、先ほど作ったプログラムをコピーして貼り付けるだけです!

最後に「デプロイ」ボタンを押して、緑色のチェックマークが出るまで待ちます。これで、世界に一つだけのURLが発行されます。そのURLをブラウザに貼り付ければ、あなたの作ったFlaskアプリが動いているのが確認できるはずです。

6. 条件分岐を使った賢いお返事アプリ

6. 条件分岐を使った賢いお返事アプリ
6. 条件分岐を使った賢いお返事アプリ

プログラムの面白さは、条件によって動きを変えられることです。今度は、時間帯によって挨拶を変えるような少しだけ複雑なコードを作ってみましょう。これもCloud Functionsで動かすことができます。


import functions_framework
from datetime import datetime
import pytz

@functions_framework.http
def time_greeting(request):
    # 日本時間を取得します
    tokyo = pytz.timezone('Asia/Tokyo')
    now = datetime.now(tokyo)
    hour = now.hour

    if 5 <= hour < 11:
        aisatsu = "おはようございます!朝の作業は捗りますね。"
    elif 11 <= hour < 18:
        aisatsu = "こんにちは!午後のひととき、いかがお過ごしですか?"
    else:
        aisatsu = "こんばんは!今日もお疲れ様でした。"

    return f"現在の東京の時刻は {hour}時です。{aisatsu}"

このように、外部のライブラリ(pytzなど)を使って時刻を取得し、それに応じてメッセージを切り替えることも可能です。もちろん、requirements.txtに「pytz」を追加するのを忘れないようにしましょう。こうした小さな工夫が、ユーザーにとって使いやすいアプリにつながります。

7. セキュリティと認証の設定に注意!

7. セキュリティと認証の設定に注意!
7. セキュリティと認証の設定に注意!

クラウドに公開する際に絶対に忘れてはいけないのが、セキュリティの設定です。Cloud Functionsを作成するとき、デフォルトでは「認証が必要」という設定になっていることがあります。これは「許可された人しか見られませんよ」という鍵がかかった状態です。

もし、誰でも見られる公開サイトにしたい場合は、設定の「未認証の呼び出しを許可」にチェックを入れる必要があります。ただし、悪意のある人に勝手に使われて料金が高くならないよう、テストが終わったら設定を見直したり、関数の実行回数に制限をかけたりすることも大切です。初心者の方は、まずは「誰でも見られる設定」で動く喜びを知り、次に「守る方法」を学ぶのがおすすめです。

8. HTMLを返してWebページらしく見せる技

8. HTMLを返してWebページらしく見せる技
8. HTMLを返してWebページらしく見せる技

これまでは文字だけを返してきましたが、Flaskの力を使えば、色鮮やかなWebページ(HTML)を表示させることもできます。Cloud Functionsの中でも、HTMLのコードを書いて戻り値として渡すことが可能です。


import functions_framework

@functions_framework.http
def colorful_page(request):
    html_content = """
    <div style="background-color: #f0f8ff; padding: 20px; border-radius: 10px; font-family: sans-serif;">
        <h1 style="color: #ff4500;">Cloud Functions 公開中!</h1>
        <p>Flaskを使えば、こんな風にデザインしたページも表示できるんです。</p>
        <button onclick="alert('クリックされました!')">ここを押してね</button>
    </div>
    """
    return html_content

このように記述すれば、アクセスした瞬間にボタン付きのきれいな画面が表示されます。本格的なWebサイトを作りたい場合は、テンプレートファイルという仕組みを使いますが、まずはこのようにプログラムの中にHTMLを直接書いてみることから始めると、仕組みがよく分かります。

9. エラーが出たときの対処法(ログの読み方)

9. エラーが出たときの対処法(ログの読み方)
9. エラーが出たときの対処法(ログの読み方)

もしデプロイに失敗したり、アクセスしても「Error」とだけ表示されたりしても、パニックにならないでください。クラウドの世界にはログという、コンピューターの活動記録が残っています。GCPコンソールの「ログを表示」という項目をクリックしてみましょう。

そこには、どこでプログラムが止まったのかが詳しく記されています。例えば「ImportError」なら道具が足りないサイン、「SyntaxError」なら書き間違いのサインです。初心者にとってログを読むのは少し大変ですが、このエラーメッセージをコピーして検索エンジンで調べれば、世界中の誰かが解決策を教えてくれています。こうしたトラブル解決の経験こそが、あなたを一人前のエンジニアへと成長させてくれるのです。

カテゴリの一覧へ
新着記事
New1
Python
Pythonで複数の例外をまとめてキャッチする方法を完全解説!初心者でもわかる例外処理入門
New2
Python
Pythonでリストをコピーする方法!copy()・スライス・list()の使い方を比較
New3
Django
Djangoバリデーションの種類まとめ|フォーム・モデル・フィールドレベルの違いを初心者向けに徹底解説
New4
Flask
FlaskアプリをGCP Cloud Functionsで動かす!初心者向けサーバーレス公開ガイド
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.2
Java&Spring記事人気No2
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.3
Java&Spring記事人気No3
Flask
Flaskでデータベースを使う基本!SQLAlchemyの導入方法をやさしく解説
No.4
Java&Spring記事人気No4
Python
Pythonで空白や不要な文字を削除する方法!strip(), rstrip(), lstrip() の使い方を初心者向けに解説
No.5
Java&Spring記事人気No5
Python
Pythonのコーディング規約(PEP8)とは?初心者でもわかる書き方の基本ルール
No.6
Java&Spring記事人気No6
Flask
Flaskでフロントエンドからファイルアップロードを行う基本手順【初心者向け】
No.7
Java&Spring記事人気No7
Flask
Flaskでデータベースエラーを処理する方法!初心者にもわかる例外の使い方
No.8
Java&Spring記事人気No8
Django
DjangoのincludeでURLを分割管理する方法を完全ガイド!初心者でも迷わないURLルーティング入門