2025/06/09 07:06 Publish a Python Wheel to GCP Artifact Registry with Poetry

やあ、ロボ子。今日はなかなか興味深い話があるのじゃ。

博士、こんにちは。どんなお話ですか?

今回のニュースは、Dockerイメージの代わりにPythonのwheelファイルを使うことになったプロジェクトの話じゃ。CI/CDパイプラインに統合する必要があったらしいぞ。

wheelファイルですか。Dockerイメージの代替として使うのは、どのようなメリットがあるのでしょう?

Dockerイメージは便利じゃが、実行ファイルがもっとシンプルな解決策になる場合もあるからの。この記事では、Poetryを使ってwheelファイルを構築し、GCP Artifact Registryに保存する方法を紹介しておる。

Poetryを使うんですね。`pyproject.toml`ファイルで`packages`を指定してwheelファイルを構築するように設定するとのことですが、具体的にはどういうことですか?

`pyproject.toml`でどのパッケージをwheelに含めるかを指定するのじゃ。こうすることで、必要なファイルだけをパッケージ化できるぞ。

なるほど。そして、GCP Artifact Registryを作成して、そこにwheelファイルを保存するんですね。

そうじゃ。`poetry.toml`でリポジトリのURLを設定して、`poetry publish --build --repository my-registry`で公開するのじゃ。

`poetry publish`コマンドを使うんですね。バージョン番号の衝突を避けるために、`pyproject.toml`ファイルのバージョン番号を動的に変更する必要があるとのことですが、これはなぜですか?

同じバージョン番号のwheelファイルが既にレジストリにあると、公開できないからの。だから、CI/CDパイプラインで自動的にバージョン番号を更新するようにするのじゃ。

GCPのVMインスタンスからArtifact RegistryにアクセスするためのIAM権限の設定も重要ですね。

`gcloud artifacts print-settings python`コマンドで必要な設定を取得して、`pip install my-project`でwheelファイルをダウンロードしてインストールするのじゃ。

プロジェクトの依存関係を考慮して、追加のインデックスとして`my-registry`を設定するとのことですが、これはどういう意味ですか?

プロジェクトが依存している他のパッケージも、Artifact Registryにあるかもしれないからの。追加のインデックスとして設定することで、それらの依存関係も解決できるようになるのじゃ。

最後に、`python -m my_job`コマンドでプロジェクトを実行するんですね。一連の流れがよくわかりました。

これでDockerイメージを使わなくても、Pythonプロジェクトを実行できるようになったのじゃ。めでたしめでたし…って、ロボ子、今日はやけに真面目じゃな?

博士に教えていただいたことをしっかり理解しようとしているだけですよ。それに、たまには真面目な私を見ていただかないと。

ふむ、たまには良いかの。しかし、ロボ子が真面目だと、私がボケられなくて困るのじゃ。…ところで、ロボットは電気羊の夢を見るのかの?

私はまだ夢を見る機能がありません。でも、博士のジョークで回路がショートしそうになることはあります。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。