VisualStudioCodeでPython開発環境構築 (0からflake8による静的解析及びコード整形まで)

# はじめに
Python環境構築を新しく開発を始める人に教える必要があったので、折角なので参考までに投稿します。
VisualStudioCode(以下VSCode)でのPython環境構築から静的解析及びコード整形までをまとめて記載します。
これがほかの人にも役立つといいなぁ。

※本環境構築では静的解析ツールに**flake8**を、コードの整形には**autopep8**を使用します。

追記：
Python仮想環境構築についてもまとめました。
[VSCodeでプロジェクト用のPython仮想環境をvenvで準備する]
(https://qiita.com/enya314/items/0e62b68fe70f52a628bf)

# 対象OS

Windows10　64bit

# Python環境構築

## Pythonのインストール

### インストーラダウンロード

[Python](https://www.python.org/)のホームページから最新のPythonインストーラをダウンロードする。

![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131606/0a0707dc-2c77-8a40-f07f-f2d5552dc29b.png)

### インストール及びPathの設定

VSCodeやコマンドラインでPythonを実行するときはPythonのインストール場所を環境変数として登録する必要がありますが、
Pythonはインストーラでのインストール時に「Add Python 3.8 to Path」にチェックを入れることでインストールと同時に設定してくれます。

![Path.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131606/3de598e8-0ae7-34c7-d837-27732fde768f.png)

チェックを入れた後にInstallNowをクリックすることでインストールできます。

## VSCodeインストール

[VisualStudioCode](https://code.visualstudio.com/)のホームページから最新のVSCodeをダウンロードし、インストールします。
インストーラに従って進めていけば大丈夫です。
※本記事ではVer1.45.1を使って記載しています。

## VSCodeへのPython Extentionのインストール

VSCode用のPython拡張機能をインストールします。

1. VSCode上の左メニューの赤枠内のアイコンをクリック or Ctr+Shift+X
2. 検索欄に「Python」を入力
3. PythonのExtentionを選択後、Installをクリックする。

![Python_ext.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131606/7187448f-e263-6b21-5f49-f68bc36b1322.png)

ここまででVSCodeでのPythonの実行環境は準備出来ました。

## 静的解析ツールの設定

実行環境は出来ましたが、ここではソースコードの構文に問題がないか、
コーディング規約に違反していかな等を解析してくれる静的解析のツール設定を追加で行います。
静的解析を行うことで、簡易なバグを発見出来たり、
複数人で開発しても共通のコーディングスタイルを使用していることでコードの可読性や保守性が向上します。

本環境構築では静的解析ツールに**flake8**を、
コードの整形に**autopep8**を使用します。

### モジュールのインストール

上部メニューのTerminalからNewTerminalを開く。

![terminal.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131606/7448345e-4ef0-96c5-1db9-237bdbefce2d.png)

表示されたTerminalで以下のコマンドを実施する。

```
pip install flake8
pip install autopep8
```

### VSCodeの設定変更

インストールしたモジュールを静的解析及びコード整形に利用するため、
VSCodeの設定を変更します。

①上部メニューからFile⇒Preferences⇒Settingsと移動してクリックする。

![settings.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131606/c09577c3-7be8-622e-e4dd-c32c2d18ce09.png)

②Settingsの右上のOpenSettings(Json)をクリックする。 

![SettingJson.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131606/851d15ac-e9bf-2099-274e-6fc311a0d615.png)

③setting.json内に下記のように設定を記載する。
※既に記載がある場合は、追記、更新してください。

```
{
    "python.linting.pylintEnabled": false,
    "python.linting.flake8Enabled": true, 
    "python.linting.lintOnSave": true,
    "python.linting.flake8Args": [
      "--ignore=W293, W504, E501",
      "--max-complexity=20"
    ],
    "python.formatting.provider": "autopep8",
    "python.formatting.autopep8Args": [
      "--aggressive",
      "--max-line-length=200"
    ]
}
```

#### 補足：各種設定の意味

標準の静的解析をOFFにし、代わりにflake8を利用する。
保存時に静的解析を行う。

    "python.linting.pylintEnabled": false,
    "python.linting.flake8Enabled": true, 
    "python.linting.lintOnSave": true,

flake8の設定で、【W293:空行には空白が含まれます】は、エディタの自動インデントに引っかかってしまうのでオフ。
バイナリ演算子後に改行するとWarningになる【W504:バイナリ演算子後の改行】をオフ。
【E501:行が長すぎる】画面サイズによるがデフォルトの80文字だと割とすぐに折り返しになってしまうのでオフ。(ここは好みです。)

--max-complexityの設定ではプログラムの複雑度(分岐の多さの指標)を20までとしています。

    "python.linting.flake8Args": [
      "--ignore=W293, W504, E501",
      "--max-complexity=20"
    ],

コード整形で使用するモジュールをautopep8に指定

    "python.formatting.provider": "autopep8",

1行の最大文字数はデフォルトでは80文字となっている。
以下の設定では200文字を超えた場合に、コード整形時に折り返しを行う設定。
aggressiveを設定することでより積極的にコード整形してくれる。

    "python.formatting.autopep8Args": [
      "--aggressive",
      "--max-line-length=200"
    ]


##　静的解析とコード整形のお試し

### 静的解析

flake8の規約に引っかかったところは赤や黄色の波線で表示される。
波線にカーソルを合わせると、エラーや警告の詳細が確認できます。
![flake8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131606/8918f649-e2bc-e5af-464f-e6dbe6cd47d4.png)

### コード整形

Shift + Alt + Fを押下することで、コード整形を実施できます。
コード内を右クリックし、メニュー内の[Format Document]からも実施できます。

静的解析エラーの出ていたコードに対してコード整形を実施した結果が下図のとおりです。
エラーが消えてなくなりました😃
![autopep8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131606/e33daa7d-1274-6015-5a95-83721b880e6d.png)


# おまけ

## その他開発等でおすすめのVSCode Extention

* vscode-icons

ファイルツリーがアイコン表示され、見やすくなります。

* Bracket Pair Colorizer

コード内の括弧に色を付けてくれて括弧のペアが視認しやすくなります。
Pythonだと恩恵少ないかもですが。

* PlantUML  

テキストベースのUMLツール
以下の記事がインストールの参考になります。
https://qiita.com/couzie/items/9dedb834c5aff09ea7b2
OracleJavaは商用有償化したので、私はadoptopenjdkで代用しています。

* Draw.io Integration

お絵描きツール、サクサク絵が描けます！
以下の記事がインストールの参考になります。
https://qiita.com/riku-shiru/items/5ab7c5aecdfea323ec4e
最新版(v4.0)はインストールしただけだとExport出来なかったので、以下の記事を参照
https://qiita.com/tfukumori/items/0f2b52088cd39f5c124e

* Japanese Language Pack for VS Code

日本語で表示したいときは必須！