uvãšpipãæ¯èŒ â Pythonç°å¢ç®¡çã¯uvã«ç§»è¡ãã¹ãïŒã2026幎çã
uvã¯AstralãšããäŒç€Ÿãäœã£ãPythonåãã®æ°ããããã±ãŒãžãããŒãžã£ãŒã ããRustã§å®è£ ãããŠããŠãpipã®10ã100åéããšèšãããŠãããã ã2024å¹Žã«æ¬æ Œçã«æ³šç®ãããŠã2026幎ã®ä»ã§ã¯å€ãã®ãããžã§ã¯ãã§æ¡çšãããããã«ãªã£ããã
pipã£ãŠé ãã£ãã®ïŒãããŸãæ°ã«ããããšãªãã£ãããã
å°ããªãããžã§ã¯ãã ãšæ°ã«ãªããªããã©ãäŸåããã±ãŒãžãå€ããšçµæ§ãããããããšãã°TensorFlowãPyTorchãå«ãæ©æ¢°åŠç¿ãããžã§ã¯ãã ãš `pip install` ã§æ°åãããããšããããuvã ãšãããæ°ç§ãåæ°ç§ã«ççž®ãããããšãå€ããã ãä»®æ³ç°å¢ã®ç®¡çã忣ããŠããŠæéããããç¹ããpipããé¢åããšèšãããçç±ã®ã²ãšã€ã ãã
å ·äœçã«ã©ã®ãããéãã®ïŒæ°åã§èŠãŠã¿ããïŒ
Astralã®å ¬åŒãã³ãããŒã¯ã§ã¯ãå·ãã£ãã·ã¥ïŒååïŒã§pipã®çŽ8ã10åãæž©ãã£ãã·ã¥ïŒ2åç®ä»¥éïŒã§ã¯80ã100å以äžéãã±ãŒã¹ãããããããšãã°Django+é¢é£ããã±ãŒãžäžåŒã®ã€ã³ã¹ããŒã«ãpipã§30ç§ãããç°å¢ã§ããuvãªã3ã4ç§ã§çµãã£ããããããã®å·®ã¯CI/CDã§äœååãå®è¡ãããšããªãå¹ããŠãããã ã
ä»®æ³ç°å¢ã®ç®¡çã£ãŠã©ãéãã®ïŒä»ã¯ `python -m venv .venv` ããŠãã `source .venv/bin/activate` ããŠããã ãã©ã
uvã ãš `uv venv` ã§ä»®æ³ç°å¢ãäœããã®ã¯ãã¡ããã`uv run python script.py` ãšããã°ä»®æ³ç°å¢ã®activateããäžèŠã«ãªãããuvãèªåã§ `.venv` ãæ€åºããŠãã®äžã®Pythonã§å®è¡ããŠããããã ãæ¯å `activate` ããã®ãå¿ããŠãããïŒããã±ãŒãžããªãïŒãã£ãŠãªããã¹ãæžããã䟿å©ã ãã
Pythonã®ããŒãžã§ã³ç®¡çãuvã§ã§ããã®ïŒä»ã¯pyenvã䜿ã£ãŠããã ãã©ã
ã§ãããïŒ`uv python install 3.12` ã§Pythonæ¬äœãã€ã³ã¹ããŒã«ã§ãããã`uv python pin 3.11` ã§ãããžã§ã¯ãã®PythonããŒãžã§ã³ãåºå®ãã§ãããpyenvãå®å šã«çœ®ãæããããæ©èœãæã£ãŠããŠããŠããuväžæ¬ã§pipã»venvã»pyenvã®ä»äºãå šéšã§ããããšããã®ã倧ããªé åãªãã ã
poetryã£ãŠäœ¿ã£ãããšãããã ãã©ãuvãšã©ãéãã®ïŒ
poetry㯠`pyproject.toml` ã§äŸå管çãããŠããã人æ°ã®ããŒã«ã ããuvã `pyproject.toml` ã«å®å šå¯Ÿå¿ããŠããŠã`uv add requests` ãšæã€ã ãã§ `pyproject.toml` ãš `uv.lock` ãæŽæ°ããããpoetryãšã®å€§ããªéãã¯é床ãšãuvãå ¬åŒã®PEPæšæºã«å¿ å®ãªç¹ãpoetryã¯ç¬èªã®ããã¯åœ¢åŒã䜿ã£ãŠãããã©ãuvã¯PEP 723ãªã©æšæºã«åãããŠããããå°æ¥çãªäºææ§ãé«ããã ã
`uv run` ã¯ãããžã§ã¯ãã®ä»®æ³ç°å¢ã§ã¹ã¯ãªãããã³ãã³ããå®è¡ããããã®ãã®ã`uv tool` ã¯ruffãblackã¿ãããªCLIããŒã«ãã°ããŒãã«ã«ã€ã³ã¹ããŒã«ã»ç®¡çããããã®ãã®ã§ãpipxã®ä»£æ¿ã ããããšãã° `uv tool install ruff` ãšããã°ãã©ã®ãããžã§ã¯ãããã§ã `ruff check .` ã䜿ããããã«ãªãããã®äœ¿ãåãã§ãããžã§ã¯ãäŸåãšã°ããŒãã«ããŒã«ããããã«åé¢ã§ãããã ã
æ¢åã® `requirements.txt` ã¯ãã®ãŸãŸäœ¿ããã®ïŒ
䜿ãããïŒ`uv pip install -r requirements.txt` ã§ãã®ãŸãŸåããuv㯠`uv pip` ãµãã³ãã³ãã§pipã®ã»ãŒå šã³ãã³ãã«å¯Ÿå¿ããŠãããããæ¢åã®ã¹ã¯ãªãããã»ãšãã©å€ããã«ä¹ãæãããããã ãããŸãã¯pipã®ä»£ãããšããŠäœ¿ãããšããæ®µéçãªç§»è¡ãããããèšèšã«ãªã£ãŠãããã
GitHub Actionsã®CI/CDã§uvã䜿ããšã©ããªãã®ïŒ
å€§å¹ ã«é«éåã§ããããå ¬åŒã® `astral-sh/setup-uv` ã¢ã¯ã·ã§ã³ã䜿ãã°ãPythonã»ããã¢ããããããã±ãŒãžã€ã³ã¹ããŒã«ãŸã§uvã§çµ±äžã§ããããã£ãã·ã¥ãè³¢ããŠã`uv.lock` ãå€ãã£ãŠããªããã°ãã£ãã·ã¥ã䜿ãåããŠããããpipã䜿ã£ãã¯ãŒã¯ãããŒãšæ¯ã¹ãŠã€ã³ã¹ããŒã«ã¹ããããæ°åç§ãæ°åççž®ãããããšãå€ããŠãç¹ã«å€§ããªäŸåããªãŒãæã€ãããžã§ã¯ãã§å¹æã倧ãããã ã
ãããïŒuvã¯ãã€ããªåäœã§åãããããã«ãã¹ããŒãžãã«ãã§äœ¿ãããããã ã`COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv` ã®1è¡ã§uvãã³ããŒããŠãããšã¯ `RUN uv sync --frozen` ããã ããpipããéãã®ã§ãã«ãæéãççž®ããããã`--no-cache` ã䜿ããšuvã®äžæãã¡ã€ã«ãã€ã¡ãŒãžã«æ®ããã«æžããã€ã¡ãŒãžãµã€ãºãå°ããä¿ã¡ããããã ãã
ããŒã ã«ãuv䜿ãããã£ãŠææ¡ãããšããç§»è¡ã¯å€§å€ãªã®ïŒ
æ¯èŒçã¹ã ãŒãºã«ç§»è¡ã§ããããæ¢åã® `requirements.txt` ã `pyproject.toml` ããã®ãŸãŸäœ¿ãããã`uv pip` ã³ãã³ãã§pipãšåãæäœãã§ãããããŒã å šå¡ã®PCç°å¢ãå€ããã«ãCIã ãuvã«ããããšããæ®µéçãªå°å ¥ãã§ãããäžçªã®ããŒãã«ã¯ãæ°ããããŒã«ãèŠããå¿ççãªã³ã¹ãããããã§ãæè¡çãªãªã¹ã¯ã¯äœãæ¹ã ãã
poetryã»pipenvãšæ¯ã¹ãŠuvã¯ã©ãããäœçœ®ã¥ãã«ãªãã®ïŒ
poetryã¯ãäŸå管çïŒããã±ãŒãžã³ã°ïŒPyPIãžã®publishïŒããŸã§å«ã倿©èœããŒã«ãpipenvã¯ãpipïŒvenvãçµ±åããã·ã³ãã«ãªããŒã«ããuvã¯ãéåºŠãšæšæºæºæ ãéèŠãããªãŒã«ã€ã³ã¯ã³ããŒã«ããšããã€ã¡ãŒãžã ããPyPIãžã®publishæ©èœã¯uvã«è¿œå äžã§ã2026幎æç¹ã§ã¯ã»ãŒå¯Ÿå¿æžã¿ãpoetryããuvãžã®ä¹ãæããå¢ããŠããäž»ãªçç±ã¯éåºŠãšæšæºæºæ ã®2ç¹ã ãã
ãCI/CDã®é«éåããããããè€æ°ã®PythonããŒãžã§ã³ã管çããŠããããpyproject.toml察å¿ã§äŸå管çãæŽçãããããšãã人ã¯uvãžã®ç§»è¡ãããããã ããäžæ¹ããå°èŠæš¡ãªã¹ã¯ãªãããããŸã«æžãã ãããæ¢åã®pipã¯ãŒã¯ãããŒãå®å šã«å®å®ããŠããŠå€ããããªãããšããå Žåã¯pipã®ãŸãŸã§åé¡ãªãããã æ°èŠãããžã§ã¯ããªãuvãããã©ã«ãã«ããã®ã2026幎ã®ã¹ã¿ã³ããŒãã«ãªãã€ã€ãããã
2026幎ã®Pythonãšã³ã·ã¹ãã å šäœã®æµãã¯ã©ãå€ãã£ãŠããŠãã®ïŒ
倧ããªæµãã¯ãããŒã«ã®çµ±åãšæšæºåãã ããpyenvã»venvã»pipã»poetryãšåæ£ããŠãã圹å²ããuvã®ãããªãªãŒã«ã€ã³ã¯ã³ããŒã«ã«éçŽãããŠããæ¹åæ§ãæç¢ºã«ãªã£ãŠãããruffïŒRustã§å®è£ ãããé«éãªã³ã¿ãŒïŒãAstralãäœã£ãŠããŠããPythonéçºç°å¢ã®Ruståããšãèšããããããé床é¢ã§ã®é²åãé²ãã§ãããCPythonïŒå ¬åŒPythonïŒèªäœãuvã§ã®ã€ã³ã¹ããŒã«ãå ¬åŒããã¥ã¡ã³ãã§ç޹ä»ãå§ããŠããŠãuvã¯ãã¯ããæ°èããŒã«ãã§ã¯ãªãPythonãšã³ã·ã¹ãã ã®äž»æµã«ãªã£ãŠããŠãããã ã