【EV3 MicroPython】VSCodeでpybricks-apiの自動補完ができるようにする

:::note info
インフォメーション
より簡単な設定手順をまとめたものを<a href="https://qiita.com/Sunrise98/items/732ddb179994dc83406c">こちらの記事</a>に再投稿しました．
（pybricksがpipに対応したため，パッケージの自動補完設定をするだけで簡単に入力補完ができるようになりました）
:::


LEGO Mindstorms EV3は，公式でPython（EV3 MicroPython=[pybricks](https://pybricks.com/)）に対応しており，Microsoft社のフリーの統合開発環境であるVSCode（Visual Studio Code editor）の拡張機能とEV3のファームウェアが公開されています[^1]．

VSCodeに拡張機能を追加するだけで簡単に使えるので，EV3を使ったテキストプログラミングの入門にオススメなのですが，コーディングするにあたって不満点が一つあります．それは，自動補完の機能がないということです．

ここでは，VSCodeでEV3MicropythonのAPIを自動補完するための手順を紹介します．

前提条件として，[Python3](https://www.python.org/downloads/)，[Git](https://git-scm.com/book/ja/v2/%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B-Git%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)がPCにインストールされており，かつ，VSCodeの拡張機能として，[Microsoft Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python)と[EV3MicroPython](https://marketplace.visualstudio.com/items?itemName=lego-education.ev3-micropython)がインストールされているものとします．（MacOSの場合は，[XCode](https://qiita.com/Targityen/items/3d2e0b5b0b7b04963750)のインストールも必要です）


#設定手順
1. 拡張機能[EV3MicroPython](https://marketplace.visualstudio.com/items?itemName=lego-education.ev3-micropython)からプロジェクトを新規作成します．

2. main.pyを開き，Pythonの拡張機能を立ち上げます（main.pyを開くと，VSCodeの画面左下に`Python extention loading...`と表示され，自動的に立ち上がります）．

3. ターミナル（Crl+Shift+\`）を立ち上げ，プロジェクト（フォルダ）の直下に.venvファイルをを作成します．

    ```:Macの場合
    python3 -m venv .venv
    ```

    ```:Windowsの場合
    py -3 -m venv .venv
    ```
4. VSCodeが`We noticed a new virtual environment has been created. Do you want to select it for the workspace folder?`と聞いてくるので，"yes"を選択します．

5. コマンドパレット（Cmd+Shift+PあるいはCrl+Shift+P）を開き， `Python: Create Terminal`を選択してPython Terminalを立ち上げます[^2]．

6. Python Terminalで，以下のコマンドを実行します．

    ```
    $ python -m pip install --upgrade pip
    $ pip install git+https://github.com/pybricks/pybricks-api@master
    ```

7. 最後に，プロジェクト内の.vscode/setting.jasonファイルを編集します．
    1. "python.linting.enabled"と"python.languageServer"をコメント化する．
    2. "python.pythonPath"を削除する．
    3. 画面左下に表示されているPythonのバージョンをクリックし，使用するPythonを選択する（"python.pythonPath"と，選択したPythonのPathが自動的に記述される）[^3]．

以下は，投稿者の.vscode/setting.jasonファイルの中身です（環境によって，PythonのPathは異なります）．

```json:.vscode/setting.jason
// Place your settings in this file to overwrite default and user settings.
{
	"files.eol": "\n",
	"debug.openDebug": "neverOpen",
	"python.pythonPath": "/Users/ユーザ名/.pyenv/versions/3.7.1/bin/python",
	// "python.linting.enabled": false,
	// "python.languageServer": "None",
}
```

#自動補完

Pythonファイルを開くと，VSCodeの画面左下に`Python extention loading...`と表示され，Python拡張機能が読み込まれます．
次に，`Analyzing in background...`と表示され，コードの分析が開始されます．
これらが完了すると，pybricksのAPIが自動補完されるようになります
（画像は，Motorクラスのインスタンスであるleft_motorを記述した際に，メソッドの候補が表示されている様子です）
![スクリーンショット 2020-03-27 14.25.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/207507/adf55e34-4489-a899-9adc-d631e85f1c01.png)


[^1]: https://education.lego.com/ja-jp/support/mindstorms-ev3/python-for-ev3
[^2]: Windowsでスクリプトの実行が無効となっている場合は，[こちらのサイト](https://qiita.com/Targityen/items/3d2e0b5b0b7b04963750)を参考にスクリプトの実行を有効にしてください．
[^3]: `Failed to set 'pythonPath'. Error: ファイルが変更されているため、フォルダー設定を書き込めません。'プロジェクト名' フォルダー設定ファイルを保存してから、もう一度お試しください。`と表示された場合は，指示にしたがってsetting.jasonを保存し，VSCodeを再起動してから再度試してみてください．