⚙️
Python 開発を行うための devcontainer.json 設定 2025年版
devcontainer.json
の customizations.vscode
の設定のベストプラクティスは
短期間ですぐ変わるので、
この記事では Python 開発を行うために自分が使っている
devcontainer.json
の設定とその根拠をまとめています
この設定で使う formatter や linter を一度にインストールして使う方法は
次の記事を参照お願いします:
.devcontainer/devcontainer.json
{
// name は何でも構いません
"name": "Existing Docker Compose (Extend)",
// root ディレクトリーの compose.yml から読み込むように、次の順に設定します
// - compose.yml 内の設定で使われている相対パスは
// 最初に読み込んだ compose.yml が基準となるため
// - 後に読み込んだ compose.yml の設定が先に読み込んだ設定を上書きするため
"dockerComposeFile": [
"../compose.yml",
"./compose.yml"
],
"service": "your-service-name-here",
// [Add dev container configuration files...] を選択すると追加される
// devcontainer.json のテンプレートでは
// `/workspaces/${localWorkspaceFolderBasename}` となっていますが、
// clone repository in container volume 方式の
// Developing inside a Container を行わない限り
// 次の設定で問題ありません:
// - VS Code + Docker Desktop デフォルトが親ディレクトリーをマウントする設定の理由
// https://zenn.dev/y_shinoda/articles/reasons-why-parent-folder-is-mounted-by-default
"workspaceFolder": "/workspace",
"customizations": {
"vscode": {
"extensions": [
// Google 検索の回数を減らすため
"GitHub.copilot",
// スペルミスを減らすため
"streetsidesoftware.code-spell-checker",
// pyproject.toml の文法チェックのため
"tamasfe.even-better-toml",
// Python コードのフォーマット / Lint の結果をコード上に表示するため
"charliermarsh.ruff",
// Python コードの VS Code 上での文法チェックやジャンプなどを可能にするため
"ms-python.python",
// Python コードの Lint の結果をコード上に表示するため
"ms-python.flake8",
// Python コードの型チェックの結果をコード上に表示するため
"ms-python.mypy-type-checker",
// Python コードの Lint の結果をコード上に表示するため
"ms-python.pylint",
// Python コードのセキュリティチェックの結果をコード上に表示するため
"pycqa.bandit-pycqa",
// Python コード保存時に docformatter を実行するため
"emeraldwalk.RunOnSave"
],
"settings": {
"[python]": {
// Python コードのフォーマットを Ruff で行わせるため
"editor.defaultFormatter": "charliermarsh.ruff",
// Python ファイル保存時に可能なフォーマットをすべて実行させるため
"editor.codeActionsOnSave": {
"source.fixAll": "explicit",
"source.organizeImports": "explicit"
},
// Python ファイル保存時に自動的にフォーマットさせるため
"editor.formatOnSave": true
},
// 拡張機能: pycqa.bandit-pycqa に
// pyproject.toml の設定内容で bandit を実行させるため
"bandit.args": [
"--configfile",
"pyproject.toml"
],
// プロジェクト中の専門用語を
// settings.json ではない独立したファイルに登録するため:
// - streetsidesoftware/vscode-spell-checker: A simple source code spell checker for code
// https://github.com/streetsidesoftware/vscode-spell-checker?tab=readme-ov-file#project--workspace-dictionary-using-vs-code-settings
"cSpell.customDictionaries": {
"project-words": {
"name": "project-words",
"path": "${workspaceRoot}/project-words.txt",
"description": "Words used in this project",
"addWords": true
}
},
// Python コード保存時に docformatter を実行するため
"emeraldwalk.runonsave": {
"commands": [
{
"match": ".*\\.py",
"cmd": "uv run docformatter --in-place ${file}"
}
]
}
}
}
}
}
Discussion