🌿

Rye + VSCode で開発環境を整えてみる

2023/06/11に公開

最近話題のPythonパッケージマネージャー Rye
この記事ではRye + VSCodeの開発環境を整えていきます。

https://github.com/nowa0402/rye_template

構築前に

前提

以下がインストールされていること。

  • vscode
  • Rye

Ryeのインストールは公式を参照。

Github

https://github.com/mitsuhiko/rye

docs

https://rye-up.com/

Ryeの基本操作は以下記事がわかりやすいです。
https://zenn.dev/watany/articles/f69db9e33d4427

フォーマッター・リンター

今回は以下フォーマッター・リンターを採用しました。

Ruffはflake8やisortの機能が使用できる静的コード解析ツールです。
https://beta.ruff.rs/docs/

設定記述方針

Ryepyproject.tomlで管理をしています。
フォーマッター・リンターの設定はpyproject.tomlに可能な限り記述しました。


構築

rye init {project_name}で初期化した以下のディレクトリ構成から進めます。

.
├── README.md
├── pyproject.toml
└── src
    └── {project_name}
        └── __init__.py

必要なフォーマッター・リンターを開発パッケージとして追加します。

rye add --dev mypy ruff

変更内容を環境に反映させます。

rye sync

requirements-dev.lock,requirements.lock, .venvが作成されます。

.
├── .venv
├── README.md
├── pyproject.toml
├── requirements-dev.lock
├── requirements.lock
└── src
    └── {project_name}
        └── __init__.py

この状態からvscodeの設定やpyproject.tomlの設定の記述を行います。

VSCode側の設定

拡張機能

必要な拡張機能を入れます。

必須

今回の構築で必須の拡張機能です。

Name ID
Python ms-python.python
Pylance ms-python.vscode-pylance
Ruff charliermarsh.ruff
Mypy matangover.mypy

推奨

必須ではありませんが、あると便利な拡張機能です。

Name ID
autodocstring njpwerner.autodocstring
even-better-toml tamasfe.even-better-toml

even-better-tomlpyproject.tomlの記述で役立ちます。

settings.json

settings.jsonに設定を記述します。
ルーラーの改行文字数に合わせて設定してもらえば良いと思います。

.vscode/settings.json

{
  // ルーラー
  "editor.rulers": [80, 88],

  // python path
  "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",

  "[python]": {
    "editor.codeActionsOnSave": {
      // isortの並び替えをRuffで実行
      "source.organizeImports": true
    },
    // RuffのFormatter機能を有効化する
    "editor.defaultFormatter": "charliermarsh.ruff",
    "editor.formatOnSave": true
  },

  // 拡張機能ではなく、pip install した場合に指定してください
  "ruff.path": ["${workspaceFolder}/.venv/bin/ruff"],
  "mypy-type-checker.path": ["${workspaceFolder}/.venv/bin/mypy"]
}

記述内容を見ていただければ分かると思いますが、settings.jsonには各フォーマッター・リンターの詳細設定を記述していません。
次項のpyproject.tomlに記載していきます。

pyproject.toml側の設定

pyproject.tomlに各詳細設定を記述します。
必要そうな項目を列挙しました。
Ruffは公式ドキュメントのルールから使用するものだけピックアップしました。
何を設定したら良いか迷ったら下記をコピーしてカスタマイズしてください。

pyproject.toml

[project]
name = "my_project"
version = "0.1.0"
description = "Add a short description here"
authors = []
dependencies = []
requires-python = ">= 3.8"

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[tool.rye]
managed = true
dev-dependencies = [
    "mypy",
    # black互換のformatterが0.1.2以降
    "ruff>=0.1.2"
]

[tool.hatch.metadata]
allow-direct-references = true

[tool.mypy]
strict = true
ignore_missing_imports = true
disallow_untyped_decorators = false
disallow_untyped_calls = false

[tool.ruff]
select = [
    "F", # pyflakes
    "E", # pycodestyle
    "W", # pycodestyle warnings
    "I", # isort
    "D", # pydocstyle
]
ignore = []
# 1行の最大文字数
line-length = 88

extend-ignore = [
    "D105", # undocumented-magic-method
    "D107", # undocumented-public-init
    "D205", # blank-line-after-summary
    "D415" # ends-in-punctuation
]

[tool.ruff.lint.pydocstyle]
# docstringをgoogle styleにする
convention = "google"

[tool.ruff.per-file-ignores]
# 個別設定
# __init__.pyは未使用インポートを許容
"__init__.py" = ["F401"]

設定反映

設定記述後、vscodeの画面をリロードすれば反映されているはずです!
sample

今回構築した設定の最終ディレクトリ構成です。

.
├── .vscode
│ └── settings.json
├── .venv
├── README.md
├── pyproject.toml
├── requirements-dev.lock
├── requirements.lock
└── src
    └── {project_name}
        └── __init__.py

以上で設定完了です。お疲れ様でした!!

参考文献

GitHubで編集を提案

Discussion