VSCodeで手軽にpythonを勉強したい人のための環境構築（for Mac）

## はじめに
「さぁ、Pythonの勉強をしよう」
と、思い立って環境を作るところから始めようと調べ始めると、
「Homebrewが…」「Pathを確認して…」「デフォルトのバージョンが…」などと
初心者の心を折ろうとする分岐がいくつも存在すると感じるのは私だけでしょうか？

色々やり方はあるかと思いますが、
私はシンプルにDockerとVisual Studio Code(以下、VSCode)の拡張機能を使って環境を作るのが
面倒なく楽なのではないかと感じましたので、それを記録として残しておきます。

もっとオススメがあるよ、という方はコメントいただければ幸いです。

## インストール
それぞれ公式サイトよりダウンロード、インストールします。

[Docker Desktop](https://www.docker.com/get-started)

[Visual Studio Code](https://code.visualstudio.com/)

Dockerは仮想マシンを作ることが出来るサービスです。
こちらは初めて使用する際はアカウントを作る必要があります。

VSCodeのインストールはこちらの記事がとてもわかり易いです。
[MacOSでVisual Studio Codeをインストールする手順](https://qiita.com/watamura/items/51c70fbb848e5f956fd6)

## VSCodeに拡張機能を入れる

1. VSCodeを開く。
2. 拡張機能から`Remote - Containers
`をインストールする。

<img width="400" height="80" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499855/8a89c75b-766f-47d1-86be-1e90b31dd420.png">

## ディレクトリとファイルを準備する

1. 新しくフォルダを作成する
2. .devcontainerという名前のフォルダを作る
3. その中にdevcontainer.jsonというファイルを作る
4. `1.`のフォルダにはDockerfileとdocker-compose.yamlという2つのファイルを作成する

## 各種設定ファイルを書く

### 1. Dockerfile
pythonのバージョンを3.9に指定しています。
VSCode内でソースコードを自動整形するための`autopep8`と、
コード解析ツールの`pylint`も一緒に入れておきます。

```Dockerfile:Dockerfile
FROM python:3.9
USER root

RUN apt-get update && apt-get -y install locales git wget unzip vim && \
    localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm

ARG DEBIAN_FRONTEND=noninteractive

RUN pip install -U pip && \
    pip install -U autopep8 && \
    pip install -U pylint

VOLUME /root/

```

### 2. docker-compose.yaml
後でVSCodeがこのファイルを見て`build`と`up -d`をしてくれます。

```yaml:docker-compose.yaml
version: "3.8"
services: 
  python3.9:
    build: 
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/root/
    working_dir: /root/
    tty: true
```

### 3. devcontainer.json
このファイルが無くても上記で出来る環境を使用できますが、
VSCodeから簡単に環境の中に入るにはこのファイルが必要です。

（※このファイルは`.devcontainer`フォルダの中に置いて下さい）
（Finderから隠しファイル表示を切り替えるには`command + shift + .(ピリオド)`で可能）

```json:devcontainer.json
{
	"name": "Python3.9",

	"dockerComposeFile": [
		"../docker-compose.yml"
	],

	"service": "python3.9",

	"workspaceFolder": "/root/",

	"settings": { 
		"terminal.integrated.shell.linux": null
	},

	"extensions": [
		"ms-ceintl.vscode-language-pack-ja",
		"ms-python.python",
		"oderwat.indent-rainbow",
		"almenon.arepl"
	]
}
```

`extensions`には、以下の内容の拡張機能を自動でインストールするようにしています。
* VSCodeを日本語化する「Japanese Language Pack」
<img width="400" height="auto" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499855/ab6a8cb0-7d12-c8db-f310-22aa2ca4a524.png">
* Pythonのための「Python」
<img width="400" height="auto" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499855/4ad534a2-e1e1-c076-5493-0c77a4b42e8c.png">
* インデントを見やすくする「indent-rainbow」
<img width="400" height="auto" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499855/1f4c1c36-695e-a01d-c08a-51dcbfbbc87b.png">
* リアルタイムでデバッグしてくれる「AREPL for python」
<img width="400" height="auto" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499855/83d48ae4-a8c1-d1a1-ff58-07398f8a5498.png">


## VSCodeから仮想環境を作成する

### 1. Remoteを開く
左下にある下記画像のようなアイコンを選択する
<img width="100" height="auto" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499855/483279b3-6268-2ebc-9f76-85c07d919388.png">

### 2. 「Open folder in Container」を選択する
<img width="400" height=auto" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499855/9754337c-e7b3-b782-f2ed-2fdd86a7c0df.png">

### 3. 上記に自分で作成したフォルダを選択する

### 4. 仮想マシンの準備がはじまる
<img width="400" height=auto" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499855/6bedfa82-c6f9-8091-c968-22aca232c62c.png">
「show log」をクリックすると、実際に`docker-compose up -d`などコマンドが実行されている様子がみられるので、裏で何が行われているか確認したい方は見ると良いでしょう。

うまく環境が構築されると、下記のような画面になります。
（私はテーマやアイコンの拡張なども入れているため、見た目は一部違うことがあります）
<img width="600" height=auto" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499855/dfa97777-6c0c-390d-758c-d789bdfaf8c6.png">


## Pythonが無事動くか確認する

せっかく導入した拡張機能の`AREPL`を併用して確認します。

### 1. `.py`ファイルを作って`AREPL`を起動する

ここでは`test.py`という名前のファイルを作りました。
作ったら、画像のように猫みたいなアイコンをクリックします。
<img width="400" height=auto" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499855/e63da46e-bc25-b28a-ba8f-288d99ff7ff7.png">

### 2. ソースコードを書いてみる
何でも良いので、ソースコードを書いてみましょう。
書いている間にリアルタイムで変数やprint文が表示されているのが確認できます。

画像内ではわざと定義していない変数をprintしようとしています。
一応エディタで下線を引いて教えてくれている状態ですが、
AREPLの画面ですでに`not defined`と教えてくれています。
<img width="600" height=auto" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499855/cedb9629-f3a9-2cf5-f5d6-c3402e667c60.png">

注意点としては、あまり重たい処理にはAREPLは向かないです。
例えば上記for文のrangeが10000を超えてくると、当然ですがかなり反映が遅くなります。
その状態でrangeの数を減らしても、前の実行が終わらないと反映されません。

本当に簡単な軽いプログラムで処理内容をできるだけすぐ見たい方におすすめですが、
そうではないなら、AREPLは使用しない方が良いかもしれませんね。

### 3. 自動整形を使ってみる
`option + shift + F`できれいに整えてくれます。

### 4. プログラムを実行してみる
`F5`でプログラムが実行できます。
が、下記のように毎回デバッグの種類を聞かれて「Python File」を選択するのも面倒です。

<img width="500" height=auto" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499855/dd546f3b-2868-c981-3d3b-018a188cb8a7.png">

そこで、.vscodeという隠しフォルダに、`launch.json`というデバッグの設定ファイルを作成します。
下記の表示から「launch.jsonファイルを作成します」を選択し、「Python File」を選択すれば、自動でそのファイルを作成してくれます。
<img width="400" height=auto" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499855/f4bd64b5-4eaf-5c60-e573-9ffc3cf0d3ee.png">

今度こそ`F5`を押すだけで、
下部のコンソール画面に実行結果が表示されます。
<img width="400" height=auto" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499855/527ffb9d-0322-10d4-045b-dc9ecafecb89.png">


## おわりに
VSCodeには他にも紹介しきれないくらいデバッグに便利な機能があります。
仮想環境には何をインストールしようが壊そうが、
実環境に影響なく、簡単に同じ環境を再生できるのが魅力的ですね。
初めてPython環境を作る方でこれを読んでいる方がいらっしゃいましたら、ぜひ試してみてくださいね。