VS Code で Python をフォーマットする
フォーマットは、ソースコードを人間が読みやすくします。行間、インデント、演算子周りのスペースなど、特定のルールと規則を適用することで、コードは視覚的に整理され、理解しやすくなります。autopep8 のページで例を見ることができます。フォーマットはコード自体の機能には影響しないことに注意してください。
リンティングは、一般的な構文、スタイル、機能のエラーや、慣例にとらわれないプログラミング手法についてコードを分析することで、エラーの防止に役立ちます。フォーマットとリンティングには多少の重複がありますが、この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 拡張機能テンプレート を使用して、新しい Python ツールを VS Code に統合できます。
デフォルトのフォーマッターを設定する
フォーマッター拡張機能をインストールしたら、以下の手順で VS Code の Python ファイルのデフォルトのフォーマッターとして選択できます。
- VS Code で Python ファイルを開きます。
- エディターを右クリックしてコンテキストメニューを表示します。
- 「ドキュメントのフォーマット形式を選択...」 を選択します。
- ドロップダウンメニューから 「既定のフォーマッターの構成...」 を選択します。
- リストからお好みのフォーマッター拡張機能を選択します。
または、ユーザー settings.json ファイルの [python] スコープの下に "editor.defaultFormatter" を設定することで、すべての Python ファイルのデフォルトのフォーマッターとして設定できます。settings.json は 「設定: ユーザー設定を開く (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"
}
}
}
コードをフォーマットする
コードをフォーマットするには、エディターを右クリックして 「ドキュメントのフォーマット」 を選択するか、キーボードショートカット ⇧⌥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 |
拡張機能が通知を表示するタイミングを制御します。サポートされている値は 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 の使用、フォーマッターの構成が正しくないなど、さまざまな理由でフォーマットが失敗する可能性があります。フォーマッターが失敗した理由を理解するには、フォーマッター拡張機能の出力チャネルを確認してください (コマンドパレットで 「出力: 出力にフォーカスする」 コマンドを実行し、フォーマッター拡張機能チャネルを選択します)。 |
注: 上記に記載されていないお好みのフォーマッターが見つからない場合は、拡張機能を通じてサポートを追加できます。Python 拡張機能テンプレートを使用すると、新しい Python ツールを VS Code に簡単に統合できます。
次のステップ
- デバッグ - Pythonをローカルおよびリモートでデバッグする方法を学びます。
- テスト - テスト環境を構成し、テストを発見、実行、デバッグします。
- 基本的な編集 - 強力な VS Code エディターについて学習します。
- コード ナビゲーション - ソースコード内をすばやく移動します。
- Python 拡張機能テンプレート - お気に入りのリンターを VS Code に統合する拡張機能を作成します。