プロジェクトを始める
Pythonプロジェクトを作って動かす
uvで、プロジェクトの作成・パッケージの追加・実行・テストまでを一通り行います。
uvを使って、Pythonのプロジェクトを作り、パッケージを入れ、プログラムとテストを動かすまでの流れを説明します。「環境構築」の「Pythonの環境をuvで作る」を終えていることが前提です。
全体の流れ
- プロジェクトのフォルダを作って、
uv initで初期化する - パッケージを追加する(
uv add) - プログラムを書いて、実行する(
uv run) - テストを書いて、実行する(
uv run pytest) - Gitに記録する
手順1: プロジェクトを初期化する
WSL(Ubuntu)で、作業用のフォルダを作って、移動します。フォルダ名は、半角英数字がおすすめです。
mkdir -p ~/projects/py-sample
cd ~/projects/py-sample
uv init を実行します。
uv init
次のようなファイルが作られます。確認するには、ls -a を実行します。
.git/
.gitignore
.python-version
README.md
pyproject.toml
src/py_sample/__init__.py
| ファイル | 役割 |
|---|---|
pyproject.toml | プロジェクトの名前、使うPythonのバージョン、必要なパッケージを書く設定ファイル |
.python-version | このプロジェクトで使うPythonのバージョン |
src/py_sample/__init__.py | プログラムを書く場所。最初は「Hello」と表示する関数が入っています |
README.md | プロジェクトの説明を書くファイル |
.gitignore | Gitに記録しないファイルの一覧(.venv などが入っています) |
.git/ | Gitの記録の置き場所。uv init が、Gitの管理も始めてくれます |
uv init の作るファイルは、uvのバージョンによって違うことがあります。ここに書いたものと違っても、あわてなくて大丈夫です。ls -a で、何が作られたか確認してください。
手順2: VS Codeで開く
code .
左下に「WSL: Ubuntu」と表示されることを確認します。
手順3: パッケージを追加する
プログラムで使うパッケージは、uv add で追加します。例として、Webにアクセスするための requests を追加します。
uv add requests
初回は、次のことが自動で行われます。
- 仮想環境
.venvが作られる requestsと、必要なパッケージが入るpyproject.tomlのdependenciesに、requestsが追記される- 正確なバージョンを記録する
uv.lockが作られる
パッケージを削除するときは、uv remove パッケージ名 を実行します。
手順4: プログラムを書いて、実行する
src/py_sample/__init__.py を、次のように書き換えます。
def add(a: int, b: int) -> int:
return a + b
def main() -> None:
print(f"1 + 2 = {add(1, 2)}")
実行します。uv init が作る pyproject.toml には、プロジェクト名のコマンドが登録されています。
uv run py-sample
1 + 2 = 3 と表示されれば成功です。
uv run は、実行の前に、環境が pyproject.toml と合っているか確認して、必要なら自動で整えます。仮想環境を、自分で有効にする必要はありません。
プロジェクトのフォルダに、自分で作ったPythonファイルを実行するときも、uv run を使います。
uv run python ファイル名.py
手順5: テストを書いて、実行する
テストには、定番の pytest を使います。
pytestを追加する
テストのための道具は、開発のときだけ必要です。--dev を付けて、開発用として追加します。
uv add --dev pytest
uv run pytest を実行する前に、この uv add --dev pytest が必要です。入れていないと、pytest が見つからないと表示されます。
テストを書く
tests フォルダを作って、その中にテストのファイルを作ります。ファイル名は、test_ で始めます。
mkdir -p tests
tests/test_add.py を、次のように書きます。
from py_sample import add
def test_add():
assert add(1, 2) == 3
def test_add_negative():
assert add(-1, 1) == 0
from py_sample import add の py_sample は、src の下のフォルダ名です。プロジェクト名にハイフン(-)があるときは、アンダースコア(_)に変わります。
テストを実行する
uv run pytest tests/ -v
-v を付けると、テストごとの結果が表示されます。次のように PASSED と表示されれば成功です。
tests/test_add.py::test_add PASSED [ 50%]
tests/test_add.py::test_add_negative PASSED [100%]
============================== 2 passed in 0.01s ===============================
手順6: Gitに記録する
uv init で、Gitの管理はすでに始まっています。変更を記録します。
git add .
git commit -m "uvでプロジェクトを作成し、テストを追加"
.venv は、.gitignore に入っているため、記録されません。一方、uv.lock は 記録します。同じ環境を、あとから別の場所で再現できるようにするためです。
別のPCや、GitHubから取得したあと
プロジェクトを git clone で取得したら、次のコマンドで、同じ環境を作れます。
cd プロジェクトのフォルダ
uv sync
uv.lock に書かれたとおりに、仮想環境とパッケージが整います。
Claude Codeと使うとき
Claude Codeに頼むときは、確認の方法を一緒に伝える と、うまくいきます。
src/py_sample に、2つの数を掛ける関数 multiply を追加して。
tests/ にテストも書いて、uv run pytest tests/ -v が通るまで直して。
プロジェクトの CLAUDE.md に、使うコマンドを書いておくと、毎回伝えなくて済みます。
# コマンド
- テスト: `uv run pytest tests/ -v`
- パッケージの追加: `uv add パッケージ名`(開発用は `uv add --dev パッケージ名`)
- 実行: `uv run py-sample`
よく使うuvのコマンド
| やりたいこと | コマンド |
|---|---|
| プロジェクトを初期化する | uv init |
| パッケージを追加する | uv add パッケージ名 |
| 開発用のパッケージを追加する | uv add --dev パッケージ名 |
| パッケージを削除する | uv remove パッケージ名 |
環境を、uv.lock のとおりに整える | uv sync |
| プログラムを実行する | uv run コマンド |
| テストを実行する | uv run pytest tests/ -v |
確認する
-
uv initで、pyproject.tomlなどが作られた -
uv add requestsで、.venvとuv.lockが作られた -
uv run py-sampleで、プログラムが動いた -
uv run pytest tests/ -vで、テストがPASSEDになった -
git commitで、変更を記録した