VS Code での Python のフォーマット
フォーマット(整形)を行うことで、ソースコードが人間にとって読みやすくなります。行の間隔、インデント、演算子周りのスペースといった特定のルールや慣習を適用することで、コードは視覚的に整理され、理解しやすくなります。例は autopep8 のページで確認できます。なお、フォーマットを行ってもコード自体の機能には影響しません。
Linting(リンティング)は、コード内の一般的な構文エラー、スタイルエラー、機能的な誤り、および型破りなプログラミング習慣を分析することで、エラーを防ぐのに役立ちます。フォーマットとリンティングにはわずかに重複する部分がありますが、これら2つの機能は補完的な関係にあります。
フォーマッタを選択する
VS Code Marketplace で、好みのフォーマッタ拡張機能を検索してください。
Microsoft は以下のフォーマット拡張機能を提供しています
| フォーマッタ | 拡張機能 |
|---|---|
| autopep8 | https://marketplace.visualstudio.com/items?itemName=ms-python.autopep8 |
| Black formatter | https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter |
コミュニティによって提供されているフォーマット拡張機能
| フォーマッタ | 拡張機能 |
|---|---|
| Ruff | https://marketplace.visualstudio.com/items?itemName=charliermarsh.ruff |
| yapf | https://marketplace.visualstudio.com/items?itemName=eeyore.yapf |
さらに、インポートのソートをサポートしているフォーマット拡張機能は以下の通りです
| フォーマッタ | 拡張機能 |
|---|---|
| Ruff | https://marketplace.visualstudio.com/items?itemName=charliermarsh.ruff |
| isort | https://marketplace.visualstudio.com/items?itemName=ms-python.isort |
注: 上記の表や Marketplace でお好みのフォーマッタが見つからない場合、拡張機能を通じてサポートを追加することができます。Python Extension Template を使用して、新しい Python ツールを VS Code に統合することが可能です。
デフォルトのフォーマッタを設定する
フォーマット拡張機能をインストールしたら、以下の手順に従って VS Code で Python ファイルのデフォルトフォーマッタとして選択できます
- VS Code で Python ファイルを開きます。
- エディタ上で右クリックし、コンテキストメニューを表示します。
- ドキュメントのフォーマット方法... (Format Document With...) を選択します。
- ドロップダウンメニューから デフォルトのフォーマッタを構成... (Configure Default Formatter...) を選択します。
- リストからお好みのフォーマッタ拡張機能を選択します。
または、ユーザーの settings.json ファイル内の [python] スコープの下に "editor.defaultFormatter" を設定することで、すべての Python ファイルのデフォルトフォーマッタとして設定することもできます。settings.json は、基本設定: ユーザー設定 (JSON) を開く (Preferences: Open User Settings (JSON)) コマンドで開くことができます。
例えば、Black Formatter をデフォルトのフォーマッタとして設定するには、ユーザーの settings.json ファイルに次の設定を追加します
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter"
}
フォーマット拡張機能をインポートソーターとして設定するには、ユーザーの settings.json またはワークスペースの settings.json ファイル内の [python] スコープの下にある "editor.codeActionsOnSave" に設定を追加します。これらの settings.json ファイルは、それぞれ 基本設定: ユーザー設定 (JSON) を開く コマンドと 基本設定: ワークスペース設定 (JSON) を開く コマンドを使用して開くことができます。これにより、すべての Python ファイルで保存時にインポートのソートが有効になります。
例えば、Ruff をお好みのインポートソーターとして設定するには、ユーザーの settings.json またはワークスペースの settings.json ファイルに次の設定を追加します
{
"[python]": {
"editor.codeActionsOnSave": {
"source.organizeImports.ruff": "explicit"
}
}
}
コードをフォーマットする
コードをフォーマットするには、エディタを右クリックして ドキュメントのフォーマット (Format Document) を選択するか、キーボードショートカット ⇧⌥F (Windows Shift+Alt+F, Linux Ctrl+Shift+I) を使用します。
また、ユーザーの settings.json ファイルに以下の設定を追加して、保存時のコードフォーマットを有効にすることもできます
"[python]": {
"editor.formatOnSave": true
}
一般的なフォーマット設定
サポートされている設定の詳細については、各フォーマット拡張機能の README を参照してください。以下の設定は、ほとんどのフォーマット拡張機能でサポートされています
| 設定の接尾辞 |
デフォルト値 | 説明 |
|---|---|---|
| args | [] |
フォーマッタに渡される引数。各引数は配列内の別々の文字列として渡す必要があります。 例えば black-formatter.args: ["--line-length", "100"] |
| importStrategy | useBundled |
useBundled に設定すると、拡張機能に同梱されているバージョンのツールを使用します。fromEnvironment に設定すると、最初に選択した Python 環境から読み込もうとし、失敗した場合は同梱されたバージョンにフォールバックします。 |
| path | "" |
フォーマットに使用するフォーマッタバイナリへのパス。注: このオプションを使用すると、フォーマットの速度が低下する可能性があります。 |
| interpreter | [] |
Python 実行可能ファイルへのパスを設定すると、拡張機能はそのパスを使用してフォーマッタサーバーとそのサブプロセスを起動します。 |
| showNotifications | オフ |
拡張機能によって通知が表示されるタイミングを制御します。サポートされている値は off、always、onError、および onWarning です。 |
フォーマットのトラブルシューティング
フォーマットに失敗した場合は、以下の原因を確認してください
| 問題 | 解決策 |
|---|---|
| Python ファイルに対して複数のフォーマッタが利用可能です。 | 上記のセクションの手順に従って、デフォルトのフォーマッタを設定してください。 |
| "ドキュメントのフォーマット方法..." オプションが利用できません。 | コンテキストメニューにこのオプションが表示されない場合は、VS Code にフォーマット拡張機能がインストールされていないか、有効になっていない可能性があります。フォーマッタを選択するセクションを参照して、Python フォーマット拡張機能をインストールする方法を確認してください。 |
| フォーマッタのカスタム引数が正しくありません。 | 適切な <formatter>.path 設定に引数が含まれていないこと、および <formatter>.args に個々の最上位引数要素のリストが含まれていることを確認してください。 |
| "非推奨のリンティングまたはフォーマット設定があります" という通知が表示されます。 | この通知が表示される場合、VS Code に python.linting や python.formatting などの設定が残っています。リンティングとフォーマットのサポートがツール拡張機能に移行されたため、これらの設定は Python 拡張機能ではサポートされなくなりました。 |
| Black Formatter を使用すると、選択範囲のフォーマット コマンドが失敗します。 | black はコードの一部のみをフォーマットすることをサポートしていません。この制限を回避するには、貼り付け時のフォーマットを無効にし、formatOnSave を設定して次の設定でファイル全体をフォーマットするようにしてください: "[python]": {"editor.formatOnPaste": false, "editor.formatOnSaveMode": "file"}。 |
| フォーマット拡張機能がインストールされているのにフォーマットが動作しません。 | コード内の構文エラー、サポートされていないバージョンの Python の使用、フォーマッタの設定ミスなど、さまざまな理由でフォーマットが失敗することがあります。フォーマッタ拡張機能の出力チャネルを確認して、なぜフォーマットが失敗したのかを理解してください(コマンドパレットで 出力: 出力にフォーカス (Output: Focus on Output) コマンドを実行し、フォーマット拡張機能のチャネルを選択します)。 |
注: 上記のリストにお好みのフォーマッタがない場合、拡張機能を通じてサポートを追加できます。Python Extension Template を使用すると、新しい Python ツールを簡単に VS Code に統合できます。
次のステップ
- デバッグ - ローカルおよびリモートでの Python のデバッグ方法を学習します。
- テスト - テスト環境を構成し、テストを検出、実行、およびデバッグします。
- 基本的な編集 - 強力な VS Code エディターについて学習します。
- コードナビゲーション - ソースコードを素早く移動します。
- Python Extension Template - お気に入りのリンターを VS Code に統合するための拡張機能を作成します。