📌 はじめに

Pythonで開発を行うにあたり、リンタやフォーマッタ、パッケージマネージャ等のツールの選定は非常に重要な問題です。一方で歴史的な経緯もあり、沢山の選択肢から何を選ぶべきか情報がまとまっていないように感じました。この記事では2021年9月時点でモダンと言えるであろう開発環境を紹介します。基本的にはシェアが高いこと、著名なパッケージで使用されていることを主な選定理由としており、また特定のエディタに依存しないことを前提とします。

本記事で紹介する内容は一つのテンプレートに近く、必要に応じてカスタマイズするもよし、そのまま使ってもよし、として参考になればと思います。(CI/CDについてはPythonとは独立した問題なので触れません。またドキュメント生成はSphinxを推しますが、必須ではないので今回は割愛します。)

以下に紹介する内容+αをコマンド一発で構築するpypjコマンドについてはこちら: 📄モダンなPython開発環境をpypjコマンドで構築する

GitHub - edge-minato/pypj: Python project kick starterhttps://github.com

📄 要約

"モダン"な開発環境を箇条で列挙すると下記の通りです。以降、それぞれのツールについて触れます。

🔖 "モダン"な開発環境の概要

便利かつ最新の仕様を反映しているツールを選定するがまず第一です。加えて、pyproject.tomlに設定類/依存関係を集約すること が一つのポイントです。pyproject.tomlPEP518にて定義された仕様で、より具体的には従来requirements.txtsetup.pyといったファイルに散乱していた情報を一箇所に集めることができよりスマートになります。リポジトリのルートディレクトリはゴチャゴチャしがちなので、整理されていると嬉しいですよね。

参考* PEP518 - Specifying Minimum Build System Requirements for Python Projects

✅ Python: CPython3.9

Pythonの実装は様々ありますが、特に理由がなければオリジナルの実装であるCPython(誤解を恐れずに言えば"普通のPython")を使うのが無難でしょう。

バージョンについては3.6系のサポートは2021-12-23にEoLを迎えるため、3.7系かそれより新しいバージョンを使用するべきです。加えて、パッケージの依存関係等で制約がない限りは基本的に新しいバージョンを使用することをおすすめします。

補足: 3.10系が2021-10-04にリリース予定です。ただしリリース直後は各種パッケージが未対応であることがあるため、しばらくは3.9系を使うのが無難かもしれません。

また、オプショナルなツールとして、Pythonのバージョン管理にはpyenv (≠pyvenv)を使うことをおすすめします。(Node.jsでいうところのnに該当します) ※複数のPythonバージョンとパッケージの取り扱い、仮想環境についてはPEP582で議論されていますが、現時点ではまだDraftです。