🔍
【Python】コード品質を保ための環境構築@Vscode
はじめに
pythonでの開発時していると、「関数の入力の型が合っているかわからない」「いつの間にか不要なimportがある」などコードが煩雑になっていくことがあると思います。
気をつけたいと思う一方で、そこまで考えていると開発が進まなかったりします。
そこで、簡単な設定でvscodeが自動的に品質を保てる方法を紹介します!
対象読者
- pythonで開発をしている人
- コード品質を考えていた人
- 複数人で開発する必要がある人
記事を読むメリット
- 一定の品質を保ったコードを書ける
結論
- 簡単な設定でVscodeにコードチェックをしてもらえる!
環境構築
手順
- プロジェクトを作成し、pyproject.tomlを作成
- pyproject.tomlにruffの設定を追加(以下のコードをコピペでok)
- vscodeに必要な拡張機能を追加
- 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