Pythonのコードをクラウドで動かしてみたいけれど、何から始めればいいか分からないという方におすすめなのが FirebaseのCloud Functionsです。この記事では、初めての方でも理解できるように、Firebaseの概要からPython関数のデプロイ手順までを一歩ずつ解説します。
こんにちは。wat(@watlablog)です。モバイルアプリ開発でもPythonを使うために、FirebaseのCloud Functionsに入門します!
この記事のモチベーション
Firebaseの使い方を学ぶ
Firebaseは、Googleが提供しているクラウド開発プラットフォームです。アプリやWebサービスを作るときに必要になる以下の機能をまとめて使うことができます。
- ユーザー認証
 - データベース
 - ストレージ(画像や音声ファイルの保存)
 - サーバーレス関数(Python等を使う)
 - ホスティング(Webアプリの公開)
 - 通知や分析(Push通知やアクセス解析)
 
上記アプリやWebサービスを作るための基盤が揃っているため、Firebaseを使うことで開発者はアプリの機能づくりに集中できるのが魅力です。
正直自分はWebアプリなどを作ったことがないので、これらを一から構築する技術がありません。いくら生成AI時代といっても、素人が作ったログインシステムはセキュリティ的に不安しかありません。いずれはその辺の中身も理解したいけど、今回はFirebaseを使って楽をする方法から入ります。
アプリでPythonを動かす
FirebaseではCloud Functionsを使ってサーバーレスでPythonなどを実行できる場所を用意できます。さらに、Cloud Functions側でアクセスに対してスケーリングもしてくれるとのことで、開発者はサーバー台数や性能を気にしなくても良いです。
 このブログは基本的にPythonに関する内容が多いです。以下のようにモバイルアプリをつくろうと奮闘した記事もいくつかありますが、イマイチ思った通りのものができない悩みがありました。
・SwiftUIで録音した音声を平均化FFTするアプリをつくってみた
・PythonアプリをiOSで実機テスト:kivy-iosの使い方
Pythonだけのデスクトップアプリであれば思った通りのことができるのに、やはりモバイルアプリ側で全部やろうとするとかなり制約が…!
 バックエンドでPythonを動かせば、モバイルアプリでも自分の作りたいものを作りやすいのでは?と思ったのが、本記事をまとめるモチベーションです。
 この記事ではまずFirebaseのCloud Functionsを使ってPythonを動かす「Hello World!」的な内容でまとめます。
動作環境
この記事は次の環境で動作確認を行いました。
| Mac | OS | macOS Sonoma 14.5 | 
|---|---|---|
| チップ | Apple M3 | |
| CPU | 1.4[GHz] | |
| メモリ | 16[GB] | 
FirebaseのCloud FunctionsでPythonを使う流れ
Firebaseプロジェクトの準備
最初にFirebaseのプロジェクトを作成します。Googleのアカウントがあれば誰でも自分のコンソールにアクセスできます。以下のURLからFirebaseのWebサイトにいきましょう。
https://firebase.google.com/?hl=ja
コンソールへ移動をクリックします。

Firebaseプロジェクトを設定して開始をクリックします。

プロジェクトに名前をつけます。名前はなんでも良いですが、今回はPythonDemoAppとしました。

順次画面を進めていくと以下の画面になり、プロジェクトの準備は完了です。

プロジェクトをBlazeにアップデート
 Cloud Functionsは無料枠のSparkでは使えません(残念)。ここでBlazeへアップデートしておきましょう。ただし、最初は$300分のクレジットが付与されるのでチュートリアルや自分のアプリを試しで作ってみる程度の動作はしばらくこの範囲で使えそうです。
 また、かなり大規模なアプリで大勢の人に使ってもらうことがない限りはびっくりした金額にはならないでしょう。以下のQiita記事はイメージを掴むための参考です。
・Qiita:「Cloud functions VS AWS Lambda」を「お金」と「始めやすさ」で勝手に比較してみた
ちなみに$300分のクレジットは2025年10月のレートで¥44,914でした。結構遊べそうですね。

また、Blazeへのアップデートはプロジェクトに対して行います。別のプロジェクトはSparkの範囲で使うといったこともできるので、テスト用・公開用の用途別に設定をしましょう。プロジェクト毎に請求先アカウントを設定できるので、チーム開発等にも使えそうですね。
Functionsを選択
コンソール画面から構築→Functionsを選択します。

次の画面になるので、始めるをクリックしましょう。

Firebase CLIのインストール
Functionsの設定という画面が表示され、簡単なインストラクションが始まります。基本はこの指示に従うだけでデプロイまで進められます。

それでは自分の開発PCにFirebase CLIをインストールします。次のコマンドをターミナルに入力しましょう。
| 
					 1  | 
						npm install -g firebase-tools  | 
					
次のコマンドでバージョン確認ができれば、インストールは正常に行われています。
| 
					 1 2  | 
						firebase --version >>14.22.0  | 
					
CLI上でログイン
インストラクションにはないですが、ここで一度ログインをしておきましょう。次のコマンドでCLI上でFirebaseにログインします。
| 
					 1  | 
						firebase login  | 
					
自動でWebブラウザが立ち上がり、認証画面が表示されるはずです。認証を行なったらまたターミナルに戻ります。
プロジェクトの開始
そしてPC上のプロジェクトフォルダを作成し、ターミナルの cdコマンドでプロジェクトフォルダに入ります。
| 
					 1  | 
						cd <プロジェクトフォルダ>  | 
					
プロジェクトフォルダで以下のコマンドを実行し、プロジェクトを開始しましょう。
| 
					 1  | 
						firebase init  | 
					
initコマンドを実行すると、ターミナル上でいくつか操作が必要です。最初はFunctionsの使用を指定するために、方向キーでFunctionsの位置にカーソルを持ってきてスペースキーでチェックをつけ、Enterを押します。

次の選択です。今回はWeb上でプロジェクトを準備したので、Use an existing projectを選択します。Enterを押すと、すでに準備してあるプロジェクトが選択できるようになっているため、選択してEnterを押します。

言語にPythonを選びます。

「Do you want to install dependencies now? (Y/n)」と聞かれますが、まだ依存ライブラリをインストールしなくても良いので一度nを入力してEnterを押します。
ここまでの操作で自動で必要なファイルが生成され、次のフォルダ構成となります。

Pythonプログラマーとしてはおなじみのファイルが作成されましたね!
Pythonのバージョンを指定して開発したいとき
ここまでの操作で venvが作成されていますが、システムに複数のPythonが入っている場合はバージョンを指定しなおしたい場合があります。その場合、 functionsフォルダ直下の venvを作成しなおしましょう。ここでは 3.12を指定して仮想環境を作成します。
| 
					 1 2  | 
						cd functions python3.12 -m venv venv  | 
					
venvを activateして、関連のライブラリをインストールします。ここで、 firebase-functionsと firebase-adminはデプロイするときにも必要なので pip installしておきます。他にも関連ライブラリがあれば pip installしても良いですが、デプロイ後のクラウド環境の方で自動インストールされるので必ずしも必要ではありません。
| 
					 1 2  | 
						source venv/bin/activate pip install firebase-functions firebase-admin  | 
					
インストールが終了したら requirements.txtを出力しておきましょう。
| 
					 1  | 
						pip freeze > requirements.txt  | 
					
Pythonのバージョンを指定したので、手動でプロジェクトのルートディレクトリにあるfirebase.jsonを手動編集します。こちらの環境では 313になっていた数値を 312に変更しました。この場合、 Python 3.13で開発していれば変更は不要です。
| 
					 1  | 
						"runtime": "python312"  | 
					
main.pyの変更
デフォルトで作成されているmain.pyを修正します。Firebaseでは、このmain.pyに書かれた関数毎にエントリポイントが設定されます(エントリポイントとは、サーバー側で最初に実行される関数です)。デフォルトで記載されているコードのコメントアウトを外していき、次の最小コードとしましょう。
| 
					 1 2 3 4 5 6 7 8 9 10  | 
						from firebase_functions import https_fn from firebase_functions.options import set_global_options from firebase_admin import initialize_app set_global_options(max_instances=10) initialize_app() @https_fn.on_request() def on_request_example(req: https_fn.Request) -> https_fn.Response:     return https_fn.Response("Hello world!")  | 
					
デプロイ
プロジェクトのルートディレクトリ( functionsの一個上)まで cdコマンドで移動し、次のデプロイコマンドを実行します。
| 
					 1  | 
						firebase deploy --only functions  | 
					
デプロイが成功すると次の画面になります。How many days do you want to keep container images before they'er deleted?という問いは、どうやら古い実行環境のコンテナイメージ(Dockerイメージみたいなものかな?後で調べる)を何日で削除するかというものみたいです。古いコンテナイメージが削除されたとしても、現在デプロイされている状態はなくならないので、とりあえず7(7日)と入力しておきました。
この中でFunction URLの項目のURLを覚えておきましょう。

動作確認
バックエンドでPythonが動いていることの動作確認は、次のコマンドを実行するか、URLをブラウザのアドレス欄に入力してみましょう。Hello World!と表示されたらPythonが動いています!
| 
					 1 2  | 
						curl <コピーしたURL> >>Hello World!  | 
					
ブラウザで確認した結果がこちら。

まとめ
 バックエンドでPythonを動かすアプリ制作のために、FirebaseのCloud Functionsを使ってみました。プロジェクト単位でBlazeへのアップデートは必要ですが、最初のスタートにはちょうど良いかもしれません。
 この記事ではFirebase CLIのインストールから各コマンドを一つずつ紹介してデプロイ、動作確認まで行いました。ここまでで基本はわかったので、次回はより実践的な機能の実装を試していきたいと思います。
本日はここまで!FirebaseでCloud Functionsを使って、バックエンドでPythonを動かす基本が学べました!
Xでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!

        ついにWATLABブログから書籍「いきなりプログラミングPython」が発売しました!