Visual Studio Code の Python 開発環境を整える。pylint（構文チェック）、pytest（単体テスト）、docstring まわり

# 開発ツールのインストール
## Visual Studio Code
Visual Studio Code をインストールしていない場合は、以下のサイトからダウンロードしてインストールする。
https://code.visualstudio.com/
## Anaconda
Pythonをインストールしていない場合は、以下のサイトから Anaconda もしくは Miniconda をダウンロードしてインストールする。（本記事の中では Python 3.6 の Anaconda をインストール）
https://www.anaconda.com/download/
https://conda.io/miniconda.html
# Visual Studio Code の環境設定
## Visual Studio Codeを実行
以下のコマンドでフォルダを作成した後にVisual Studio Codeを起動する。

```
mkdir hello
cd hello
code .
```

![01.png](https://qiita-image-store.s3.amazonaws.com/0/32580/7c365da6-a5cc-f9a2-f8f8-98c92524a876.png)

## python 拡張機能のインストール
Control + Shift + x もしくは、左の「拡張機能」のアイコンをクリックして、python の拡張機能をインストールする。python の拡張機能は、pythonで検索すると出てくるので、以下の Microsoft が管理するものを使用する。
![02.png](https://qiita-image-store.s3.amazonaws.com/0/32580/ada2646c-02d7-5c7d-1e6c-8696abe2247f.png)

### python 環境の選択
Control + Shift + p でコマンドパレットに "python select interpreter"を入力して、python の環境を選択する。
![03.png](https://qiita-image-store.s3.amazonaws.com/0/32580/340380c5-d075-cf17-49a8-52acb776bbc7.png)
Pythonの環境は [Visual Studio 2017](https://www.visualstudio.com/) や [Azure Machine Learning Workbench](https://docs.microsoft.com/ja-jp/azure/machine-learning/service/quickstart-installation) などのアプリケーションによりインストールされる環境も表示される。アプリ開発で使用する Python 環境を選択する。
![04.png](https://qiita-image-store.s3.amazonaws.com/0/32580/988d2de4-3146-cf1c-c306-348ae87d5490.png)
Anacondaをインストールした後、"conda create" で作成した環境 "py35" を選択する。

```
conda create -n py35 python=3.5
```

なお、Anaconda Promptでにより以下のコマンドを使用すると作成されたPython環境を一覧表示することができる。

```
conda info -e
```

Anaconda PromptでPython環境を選択する場合は、activateを使う。

```
activate py35
```

![05.png](https://qiita-image-store.s3.amazonaws.com/0/32580/70265972-dd3a-babc-302e-817dcf00f617.png)

## 構文チェックのために pylint をインストール
Visual Studio Code の python 拡張機能では、標準で pylint を使用しているため、"py35"環境で pylint をインストールする。

```
activate py35
conda install pylint
```

念のため、Visual Studio Code の Reload Window（Control + Shift + p で Reload Window）を実行して、動作を確認してみる。プログラムを書いてセーブしたときにチェックされる。
![06.png](https://qiita-image-store.s3.amazonaws.com/0/32580/9abbd834-85a4-4bb5-87dd-58d216336023.png)

## 単体テストのために pytest をインストール
Visual Studio Code の python 拡張機能では、unittest と pytest と Nose を使うことができる。既定の設定では全て無効になっているため、既定の設定をワークスペースの設定で書き換える。ユーザ設定（Control + Shift + p で Open User Settings）を開いてワークスペースの設定タブを選択後、"python.unitTest.pyTestEnabled"をtrueににした設定を追加する。（既にほかの設定が入っている場合、上の行の","を忘れないように）

```
{
    "python.pythonPath": "C:\\Users\\kenta\\AppData\\Local\\conda\\conda\\envs\\py35\\python.exe",
    "python.unitTest.pyTestEnabled": true
}
```

https://docs.pytest.org/en/latest/

![07.png](https://qiita-image-store.s3.amazonaws.com/0/32580/3030a28b-b287-305d-0e93-8c42f2f3e3f6.png)
"py35"環境にpytestをインストールする。

```
activate py35
conda install pytest
```

### pytest.iniを作成する
pytestの設定を行うため、helloフォルダにpytest.iniを作成する。test_から始まるファイルや、クラス名がTestから始まるもの、関数がtest_で始まるものをpytestで実行する。

```python:pytest.ini
[pytest]
testpaths = .
python_files = test_*.py
python_classes = Test
python_functions = test_
```

### 単体テスト実行
テストコードを書いたら、Control + Shift + p でRun All Unit Testsを実行して単体テストコードを実行することができる。なお、テストコードを自動で見つけるため、エディタ内のRun Testをクリックすることにより、テストを行うことができるようになる。
![09.png](https://qiita-image-store.s3.amazonaws.com/0/32580/67ef29bb-f49d-8213-1112-a427133ed30a.png)

```python:word.py
def repeat(count = 2, word = 'hello'):
    """repeat the word specified times.
    
    Keyword Arguments:
        count {int} -- specified times (default: {2})
        word {str} -- repeat word (default: {'hello'})
    
    Returns:
        str -- repeated words
    """
    words = []
    for i in range(count):
        words.append(word + '!')
    return ' '.join(words)

def main():
    hello = repeat(3, 'hello')
    print(hello)

if __name__ == '__main__':
    main()
```

```python:test_word.py
import pytest

import word

def test_repeat_01():
    assert word.repeat(2, 'test') == 'test! test!'

def test_repeat_02():
    assert word.repeat(0, 'test') == ''

def test_repeat_03():
    assert word.repeat(-10, 'test') == ''
```

## docstringの拡張機能をインストール
Control + Shift + x もしくは、左の「拡張機能」のアイコンをクリックして、autoDocstring の拡張機能をインストールする。関数定義の下段で"""を記入後にエンターを押すと、引数と戻り値から自動的に docstring を書いてくれる。
![10.png](https://qiita-image-store.s3.amazonaws.com/0/32580/4860aeae-dea3-3394-14b1-fca1c2d16c9b.png)

# さいごに
まだ色々できるので、時間があるときにメモを増やしていきたいですー。