🖊️

GitHub CodespacesでPoetryによるPython開発環境を作る

2024/01/26に公開

今更ながらCodespacesを使って、PoetryによるPythonの開発環境を作ったりしてみました。

準備

リポジトリを作成

まずはGitHubでリポジトリを作成しましょう。
今回は空のリポジトリから作っていきます。

記事内ではリポジトリ名をtutorialとします。
別名にする場合は適宜置き換えてください。

また、まったく空のリポジトリではCodespacesを使用できないので、リポジトリ作成時にADD a README fileにチェックを入れておきましょう(initial commitさえできれば良いので何でも良い)
READMEを追加
READMEを追加

環境設定

Codespacesを開く

早速Codespacesを開いていきましょう。
リポジトリのトップページ右上に緑色のCodeボタンがあるので押しましょう。
Codeボタン

押すとメニューが開くので、Create codespace on mainボタンを押しましょう。
Codespace作成

押してしばらくするとCodespaceが起動し、通常のVSCodeと同様の画面が表示されます。
Codespace
Codespace

ターミナルに

👋 Welcome to Codespaces! You are on our default image. 
   - It includes runtimes and tools for Python, Node.js, Docker, and more. See the full list here: https://aka.ms/ghcs-default-image
   - Want to use a custom image instead? Learn more here: https://aka.ms/configure-codespace

とあるようにこのままでもある程度の環境は勝手に用意されています。
が、今回はPoetryを使用したいので、環境のセットアップをこの後していきます。

Dockerfileを作成

まずはDockerfileを作成します。
Codespaces上でDockerfileをtutorialディレクトリ直下に作成してください。

Dockerイメージは今回python:3.11にしました。

Dockerfile
FROM python:3.11

WORKDIR /workspaces/tutorial

# install python package
COPY ./pyproject.toml* ./poetry.lock* ./
RUN pip install poetry \
    && poetry config virtualenvs.create false
RUN poetry install

DockerfileでPoetry本体のインストールとライブラリのインストールをするよう指定します。

poetry config virtualenvs.create falseの設定はPoetryが仮想環境を作成するかを設定する項目です。
今回はDocker上とすでに切り離された環境であるため今回はfalseとしておきます。

現時点でのディレクトリ構成

/workspaces/tutorial
|--README.md
|--Dockerfile

devcontainer.jsonを作成

作成したDockerfileを使って、環境のセットアップを行うよう設定していきます。

新しく.devcontainerディレクトリを作成して、その下にdevcontainer.jsonを作成します。

devcontainer.json
{
	"name": "Python 3",
	// 先程作ったDockerfileを指定する
	"dockerFile": "../Dockerfile",
	"customizations": {
		// vscodeの設定や拡張機能を指定できる。お好みで。
	}
}

現時点でのディレクトリ構成

/workspaces/tutorial
|--.devcontainer
|  |--devcontainer.json
|--README.md
|--Dockerfile

poetry init

最後にPoetryの設定ファイルpyproject.tomlpoetry.lockを作成していきます。

まずはpoetry本体をインストール。

➜ /workspaces/tutorial (main) $ pip install poetry

からのpoetryの初期化をします。
色々聞かれますが、基本はEnterで飛ばしていけばOKです。
Would you like to define your development dependencies interactively?と聞かれますが、記事的に分かりにくくなるので一旦noとしておきます。

➜ /workspaces/tutorial (main) $ poetry init

This command will guide you through creating your pyproject.toml config.

Package name [tutorial]:  
Version [0.1.0]:  
Description []:  
Author [hoge <fuga@example.com>, n to skip]:  
License []:  
Compatible Python versions [^3.10]:  

Would you like to define your development dependencies interactively? (yes/no) [yes] no
Generated file

[tool.poetry]
name = "tutorial"
version = "0.1.0"
description = ""
authors = ["hoge <fuga@example.com>"]
readme = "README.md"

[tool.poetry.dependencies]
python = "^3.10"


[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

Do you confirm generation? (yes/no) [yes]

完了したらpyproject.tomlが作成されているはずです。

次になにか適当なライブラリを追加しておきましょう。
ここではblackを追加します。

➜ /workspaces/tutorial (main) $ poetry add black

追加が完了したらpoetry.lockが作成されるはずです。

現時点でのディレクトリ構成

/workspaces/tutorial
|--.devcontainer
|  |--devcontainer.json
|--README.md
|--Dockerfile
|--poetry.lock
|--pyproject.toml

コンテナのリビルド

さて、設定ファイルの記載が完了したので、コンテナを再度ビルドしていきます。
(現在はまだデフォルトで用意された環境)

Ctrl+Shift+PでVSCodeのメニューを開き、>rebuildと入力すると、
Codespaces: Rebuild Containerと候補が出てくるので選択し、リビルドを開始します。
これで今まで作成した設定ファイルからコンテナが再生成されます。

リビルドが完了したら動作確認としてblackのコマンドを動かしてみます。

root@codespaces-d96b10:/workspaces/tutorial# black --version
black, 24.1.0 (compiled: yes)
Python (CPython) 3.11.7

以上で開発環境の完成です。

所感

開発をGitHub上のみで行うことができ、ローカルの環境が汚れないのがとても良いです。
ローカルの環境を汚すのが嫌で個人開発に手が伸びない場面が多かったので、今後ガシガシと活用していきたいところです。

Discussion