Windows10 Pro×VSCode×Dockerでお手軽Pythonデータ分析環境構築

# 概要
環境構築、嫌いですよね？
私はエラーを出しまくって平気で数日かけてしまうダメ人間なので、発狂するレベルで嫌いです。
弱小ながらも一応エンジニアの私が発狂するような作業を一緒に分析業務を行う非エンジニアにやらせようとしたら、背後から刺されかねない。
というわけで、多少は流用できそうかなというレベルの表題のものを作ったので、備忘録も兼ねて載せます。

**非エンジニアにVSCode上でJupyter NotebookライクにPythonを書ける環境を提供する**

ことを目標としています。

## こんな人が読むと良いかも
- お手軽にPython環境を作りたい
- Visual Studio Codeをメインに使いたい
- 環境構築なんぞに労力を割きたくない
- 非エンジニアにも手軽にPythonを使ってデータ分析をしてもらいたい
- できることならマウスポチポチだけしかしたくない(させたくない)

(各ソフトウェアや技術詳細の説明はしていません)

# 前提環境
OS：Windows 10 Pro 64bit(Docker使用時にHyper-V機能を利用するため)

# 環境構築
大まかに、以下の流れ。
1. 環境のベースとなるフォルダ構成取得
2. Docker Desktop for Windowsのインストールとセットアップ
3. Visual Studio Codeのインストールとセットアップ
4. 環境作成

## 1. 環境のベースとなるフォルダ構成取得
GitHubにベースに使うフォルダ構成と必要なファイル群を用意したので、こちらをCloneするなりダウンロードするなりして任意のフォルダに配置(私の場合はCドライブ配下にGit用フォルダを作成)
https://github.com/m0p1nt/ds_base_env_for_vscode

お好みで`devcontainer.json`のname属性の値を変更。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244394/35ca3682-66c3-637f-af65-7ba1a9484627.png)


## 2. Docker Desktop for Windowsのインストールとセットアップ
環境構築はすでに他の投稿者さんがわかりやすい記事を書いてくださっているので、大まかな手順のみ(参考サイトは後述の補足にて)。

1) Hyper-Vの有効化
`コントロールパネル` -> `プログラムと機能` -> `Windows の機能の有効化または無効化`の項目群にある`Hyper-v`のチェックをオンにする(再起動を求められたら再起動する)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244394/c7069dff-8e93-856e-f0ce-fd851f185cfc.png)

2) [Docker Desktop for Windowsダウンロードサイト](https://hub.docker.com/editions/community/docker-ce-desktop-windows/)よりインストーラをダウンロードしてインストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244394/7d1992ce-3068-3d44-1437-081753bf68d1.png)

3) ドライブのマウント設定<br>
(1)Widndowsタスクバー右下Dockerアイコンより[Setting]で設定画面を開く(アイコンがない場合はDockerを起動してから再度確認)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244394/d1d7c252-3885-98e5-da23-e0c67115399b.png)<br>
(2)分析環境用のフォルダを配置したドライブに対するマウント許可にチェックを入れる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244394/c16b21ba-d581-58c8-51a6-c4cce62efedb.png)


## 3. Visual Studio Codeのインストールとセットアップ
1)[Visual Studio Codeダウンロードサイト](https://code.visualstudio.com/download)よりインストーラをダウンロードしてインストール

2)拡張機能`Remote - Containers`を追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244394/b361e3da-4302-f1fa-3d2c-002bdbe4f366.png)


## 4. 環境作成
1)VSCodeの画面左下の緑色のアイコンをクリックし、`Remote-Containers: Open Folder in Container...`を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244394/d4bfc681-86f9-07a7-f90c-d6cb0a78ddfc.png)

上記「1. 環境のベースとなるフォルダ構成取得」で配置したフォルダを選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244394/322c22b9-de18-97ef-a78a-105e857663a7.png)

新規画面が立ち上がり環境構築が始まるので数分待つとできあがり。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244394/40a40e7a-8612-aa5a-0ccf-52b29c525a06.png)

VSCode上でJupyter Notebookライクな使い方ができるので便利。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244394/7538e8ae-e9a8-4631-79c7-f977f5194ae2.png)

閉じるときは、左下の緑色のアイコンをクリックし、`リモート接続を終了する`を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244394/5f9ea694-1dea-8f12-a898-ee4af0f9d098.png)


## 補足
- Pythonライブラリを追加したくなったら
→VSCodeのターミナル上でpipコマンドでインストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244394/db9be969-ec26-57cd-63f9-315853c5e8b1.png)
他の人にライブラリの追加を反映させたい場合はVSCodeのターミナル上で、
`$ pip freeze > .devcontainer/requirements.txt`
でインストール済みのライブラリを一覧化できる。

- VSCodeの拡張機能を追加したくなったら
→`devcontainer.json`のextensions属性を編集する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244394/884de00d-6061-e4e8-f89a-f1aff2030a82.png)
名称は、拡張機能検索時に表示される下図の値が該当。
(例：拡張機能`Python`の場合)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244394/1db7d3f8-ac7d-cbde-b04f-816a3fe34576.png)


# 参考にしたもの
- [Microsoft vscode dev containers(フォルダ構成の参考)](https://github.com/microsoft/vscode-dev-containers/tree/master/containers/python-3)

- [【備忘録】【Docker奮闘記:1】Docker for Windows インストール(Docker Desktop for Windowsインストール参考)](https://qiita.com/manamiTakada/items/c1394e5e3358802a9446)