🔍

【Python】コード品質を保ための環境構築@Vscode

2024/12/13に公開

はじめに

pythonでの開発時していると、「関数の入力の型が合っているかわからない」「いつの間にか不要なimportがある」などコードが煩雑になっていくことがあると思います。
気をつけたいと思う一方で、そこまで考えていると開発が進まなかったりします。
そこで、簡単な設定でvscodeが自動的に品質を保てる方法を紹介します!

対象読者

  • pythonで開発をしている人
  • コード品質を考えていた人
  • 複数人で開発する必要がある人

記事を読むメリット

  • 一定の品質を保ったコードを書ける

結論

  • 簡単な設定でVscodeにコードチェックをしてもらえる!

環境構築

手順

  1. プロジェクトを作成し、pyproject.tomlを作成
  2. pyproject.tomlにruffの設定を追加(以下のコードをコピペでok)
  3. vscodeに必要な拡張機能を追加
  4. vscodeのsettings.jsonで必要な設定を追加(以下のコードをコピペでok)

1. プロジェクトを作成し、pyproject.tomlを作成

新しくプロジェクトを始める場合は以下を実行してください。

uv init [プロジェクト名]

2. pyproject.tomlにruffの設定を追加

pyproject.tomlに以下を追記してください。

[tool.ruff]
target-version = "py312" # バージョンを指定する
lint.select = [ # 有効にするルールを指定
    "E",    # pycodestyleによるエラー
    "W",    # pycodestyleによる警告
    "F",    # pyflakesによるエラー
    "I",    # isortによるインポート順序チェック
    "B",    # flake8-bugbearによる潜在的なバグやコードの匂いの検出
    "C4",   # flake8-comprehensionsによる内包表記の最適化
    "UP",   # pyupgradeによるコードのアップグレードサジェスト
    "N",    # 命名規則(naming convention)のチェック
    "D417", # 引数のドキュメントがない場合のチェッ
    "PT",   # pytest関連のコードスタイルチェック
]
lint.ignore = [ # 無視するルールを指定
    "E501", # 行が長すぎる(Blackがこの問題を処理するため無視)
    "B024", # 抽象クラスに抽象メソッドが含まれない(Mockを使った場合の警告を無視)
    "B008", # デフォルト引数に関数呼び出しを使用(特定のシナリオで必要な場合があるため無視)
    "W191", # タブによるインデント(Pythonでは推奨されないが特定の状況で無視)
    "N801", # クラス名の命名規則(命名の自由度を高めるために無視)
]
include = ["*.py", "*.pyi", "**/pyproject.toml", "*.ipynb"]
[dependency-groups]
dev = [
    "ruff>=0.8.0",
]

3. vocodeに拡張機能を追加

Vscodeにpython、ruff、pylanceの拡張機能を追加してください。

4. Vscodeの設定ファイルを作成

pyproject.tomlと同じ階層のディレクトリに.vscode/settings.jsonを作成し、以下を記載してください。
.vscode/settings.jsonで管理することでプロジェクトごとに設定ができます。

{
    "python.testing.pytestArgs": [ // pytestの実行時に使用する引数
        "tests",
        //"--cov=src",
        //"--cov-branch",
        //"--cov-report=xml",
        //"--cov-report=html",
        "-v"
    ],
    "python.testing.unittestEnabled": false, // ユニットテストを無効化
    "python.testing.pytestEnabled": true, // pytestを有効化
    "editor.formatOnSave": true, // ファイル保存時に自動でコードをフォーマット
    "python.languageServer": "Pylance", // pythonサーバーの指定
    "files.exclude": { // 非表示にするファイルやディレクトリの指定
        "**/.git": true,
        "**/.svn": true,
        "**/.hg": true,
        "**/CVS": true,
        "**/.DS_Store": true,
        "**/Thumbs.db": true,
        "**/.venv": true,
        "**/.pytest_cache": true,
        "**/.ruff_cache": true,
        "**/__pycache__": true
    },
    "coverage-gutters.coverageReportFileName": "htmlcov/**/index.html", // カバレッジレポートのHTMLファイルのパスを指定
    "coverage-gutters.showLineCoverage": false, // 行単位のカバレッジ表示を無効化
    "coverage-gutters.showRulerCoverage": false, // エディタのルーラーでのカバレッジ表示を無効化
    "editor.codeActionsOnSave": { // ファイル保存時に自動で以下のコードアクションを指定
        "source.fixAll": "explicit", // コードを全修正
        "source.organizeImports": "explicit" // インポートの整理
    },
    "python.analysis.diagnosticMode": "workspace", //  診断モードを設定
    "ruff.format.args": [ // Ruffで使用するフォーマット引数を設定
        "--config=pyproject.toml"
    ],
    "python.analysis.typeCheckingMode": "basic", // 型チェックモードを設定
    "python.analysis.autoImportCompletions": true, // 自動インポート補完を有効
    "notebook.formatOnSave.enabled": true // upyter Notebookのセル保存時に自動フォーマットを有効
}

以上の手順の後、pyproject.tomlで仮想環境を立てるとvscodeが自動的に構文を検出、フォーマトを行ってくれるようになります!

まとめ

コード品質を保つための環境設定を紹介しました。
あくまで僕がコードを書いていく上で扱いやすい設定をしている箇所もあるため、参考程度にご利用ください!

Discussion