面倒な環境構築が一瞬で終わる。そう、DockerとVSCodeならね

# 目標
DockerとVSCodeで超簡単にPythonの開発環境を作成してみる。

## どんな人向け？？

* Dockerが好きな人
* VSCodeが好きで好きでたまらない人
* Pythonの環境構築を楽にやってみたい人

## どこまでやるのか

1. docker-composeでコンテナを立ち上げる
2. 立ち上げたコンテナ内にVSCodeのプラグイン`Remote - Containers`で接続
3. コンテナ内でpythonのスクリプトを実行しておしまい

## ファイル構成

```bash
.
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
└── src
    ├── hello.py
    └── student
        ├── student-mat.csv
        ├── student-merge.R
        ├── student-por.csv
        └── student.txt
```

## 各種ファイル

`Dockerfile`と`docker-compose.yml`は以下のようにしています。

詳しくは、[Dockerを使って機械学習の環境を作ろうとした話](https://qiita.com/penpenta/items/3b7a0f1e27bbab56a95f)に書いているので参考にしてください。


```dockerfile
FROM python:3.7.4
RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* \
    && pip install --upgrade pip
COPY . ${pwd}/
RUN pip install -r requirements.txt
```

```docker-compose
version: "3"
services:
  app:
    container_name: "python_sample"
    build:
      context: .
      dockerfile: ./Dockerfile
    ports:
      - 80:80
    tty: true
    volumes:
      - $PWD/src:/var/src
```

`requirements.txt`は機械学習で使いそうなライブラリを適当にピックアップしてます。

今回は、pandasとmatplotlibを使用してcsv（`src/student/student-mat.csv`）を読み込んで
データのグラフを保存することにします。

```requirements.txt
numpy
scipy
pandas
matplotlib
seaborn
```

```python=sample.py
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt

# csvの読み込み
sample_data_set = pd.read_csv('student/student-mat.csv', sep=';')

# グラフ化してみる
plt.hist(sample_data_set['age'], bins=[15,16,17,18,19,20,21,22])
# 縦軸と横軸に名前を
plt.xlabel('age')
plt.ylabel('count')
plt.savefig('tmp.png')
```


## コンテナ立ち上げ

ファイルが準備できたら、コンテナを立ち上げましょう
※　初回のコンテナ立ち上げ時には、少し時間かかります。

```bash
$ docker-compose up -d
Creating network "python_sample_default" with the default driver
Creating python_sample ... done
```

## コンテナに接続

コンテナが立ち上がったので以下のコマンドで接続っと....

```
$ docker exec -it ee4cf2 /bin/sh -c "[ -e /bin/bash ] && /bin/bash || /bin/sh"
```

このコマンド。。。打つのも眺めるのも嫌じゃないですか？？？

やってることは分かるけど、コンテナの中でもVSCode使いたいな〜使いたいなぁ〜。。。。

そこで！！！

[Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)です！！

実際に動かしてみましょう。

プラグインをインストールしたら

下記の画像の`１`の部分をクリックしましょう

`２`の`Remote-Container:Attach to Running Container...`を選択します

そして、コンテナ名が表示されるので自分の接続したいコンテナを選択します

<img width="1919" alt="スクリーンショット 2019-09-02 20.57.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190554/1fd12539-48a7-8ca9-655b-791c949b22ef.png">

接続が完了すると、下記の画像のよう現在接続しているコンテナの情報が`１`に表示されます

`2`でコンテナ内のフォルダを開きます

`3`でコンテナ内のフォルダ構成が追えるので、対象のフォルダを探して開きましょう

<img width="1919" alt="スクリーンショット 2019-09-02 20.59.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190554/da120a94-a3bd-df73-cd50-6d678e3d16a7.png">

フォルダが開き終わったら、VSCodeのTerminalを開いてPythonのスクリプトを実行です！
（TerminalはDockerコンテナで開いた扱いになってるので、そのまま実行できます）

<img width="1917" alt="スクリーンショット 2019-09-02 21.01.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190554/30093327-df86-e45b-7758-07efddb3d660.png">

## まとめ
DockerとVSCodeでとても簡単に開発環境が構築できました。

後半は少し駆け足気味だったかも。。

ホスト環境を汚さずに、自分の好きなエディタで開発できるのは、とても楽しいことだと思います。

他にも、golangとかもimageを取得してコンテナ立ち上げれば同じように直ぐに環境が手に入ります。

https://github.com/microsoft/vscode-remote-try-go

ではでは、お読みいただきありがとうございました！！

質問や訂正などがありましたら、よろしくお願いします。。