0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cloud Functions for FirebaseでPoetryを使う

Posted at

はじめに

Cloud Functions for FirebaseでPythonが使えることになり、だいぶ時間が経っていますが、デフォルトではrequirements.txtだけでパッケージマネージャーを使う形になっていません。
何かと不便なのでPoetryを使えないかいろいろ試してみました。

でどうする?

問題点は後回しにして今回やった方法を先にお伝えします。

Poetryのコマンドで以下を設定し、プロジェクトローカルにvirtualenvを置きます。

poetry config --local virtualenvs.in-project true

このコマンドで.vnenvのフォルダーができると思います。
ただ、Cloud Functions for Firebaseではvirtualenvのパスがvenvに限定されているため、デプロイコマンドを実行した時点でエラーになります。
そこで、この.vnenvにシンボリックリンクを設定することによってvenvがあるように見せかけてしまいます!

ln -s .venv venv

あとはrequirements.txtが必要なので、以下のコマンドがデプロイ前に必要となります。

poetry export -f requirements.txt -o requirements.txt --without-hashes

poetryで入れたライブラリのrequirements.txtをいい感じで出力してくれるコマンドです。

毎回打つのは手間なので、poethepoetを使ってカスタムスクリプトを作ります。

poetry add --group dev poethepoet

インストールした後は、pyproject.tomlに以下を追加するだけです。

[tool.poe.tasks]
deploy.shell = """
poetry export -f requirements.txt -o requirements.txt --without-hashes;
firebase deploy --only functions --project default
""

あとは以下のコマンドでデプロイができるようになります。

poetry run poe deploy

この方法に至った経緯

あまり綺麗な方法ではないと思いましたが、これしかダメでした。

まず、Cloud Functions for FirebaseはPythonの場合、以下の構成を求めます。

myproject
+- .firebaserc
+- firebase.json
+- functions/
  +- main.py
  +- requirements.txt
  +- venv/

firebase-toolsの中身を見る限り、venvのパスを変更することはできません。
そこでpoetry側でvenvを作れないかいろいろやってみたのですが、ダメでした・・・。

ダメだったケース1(virtualenvs.pathを使う)

以下のコマンドでvenvなんとか作ろうとしてみます。

poetry config --local virtualenvs.path ./venv

virtualenvs.pathを使うと、venvの場所を決められるとなっています。試しにやってみると指定したパスのしたにもう一つフォルダーができてしまうのです。

+- functions/
  +- main.py
  +- requirements.txt
  +- venv
    +-- functions-XXXXXX-py3.12

poetryはデフォルトではプロジェクト配下ではなく別の場所にどんどんvirtualenvを作るのですが、そのときにこのような名前のフォルダーを作っていくようになっています。

これでは意図したものになりません。

ダメだったケース2(virtualenvs.promptも使う)

この自動生成されるフォルダー名が、virtualenvs.promptという設定に依存していそうだったので、そこを変えてみましたが、変化ありませんでした。
あくまでこれは環境の名前を設定するものだったからかもしれません。
PoetryもFirebaseも融通が効かない・・・

まとめ

今回は私が今わかっている情報でちょっと微妙だけど動く方法を見つけたのでまとめましたが、最良の方法だとは思いません。
誰かもっといい方法があれば教えてほしいという感じです!

使ってる人がまだまだ少ないのが原因なのかもしれませんがもっと使いやすくなることを願います!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?