WSL 2 + Python + VSCode で環境を整える [ 機械音痴 ( 自称 ) 後輩の挑戦！！ ]

しろいのです。
記事執筆時現在、フリーター。
かつてはどこかの会社でインフラエンジニアの端くれをしていました。

バイト先の後輩にプログラミングを教えることになってしまったため、
開発環境を整え競技プログラミングに挑戦するためのチュートリアルを書きます。

今回は、**環境構築編**です。

Windows 10 上で不自由なく、Linux と Python を使った開発ができる環境を構築します。

正直、機械音痴を自認する方には超ハードコアな内容かと存じますが、気持ちを強く持っていきましょう。


## 経緯、そしてなぜ競技プログラミングなのか？
**あんまり大事じゃないので読み飛ばしてもOK**

* 後輩氏、大学の教職課程で情報教育論を受けた際、プログラミング学習の大切さを悟る
* だが、特に作りたいアプリのアイデアはなく、とりあえずアプリが動く仕組みを学びたい
* ~~筆者にパッケージとして成立したアプリを制作するスキルがないため、趣味で少々嗜む競プロでお茶を濁したい~~
    * ~~筆者が AtCoder 茶色だけに！ガハハ~~

## 誰が為の記事か
* ( メイン ) Windows 10 の PC をお持ちで、かつプログラミングを手軽 ( 感想は個人差 ) に始めてみたいぞって人
    * ( サブ ) 競技プログラミングはやらんけど、WSL 2 および Ubuntu 他 Debian 系 OS の Python をベーシックに導入したい人

~~正直、この機会に自分の環境構築手順をおさらいしつつ更新したかったってのは多分にあるね~~


## 前提とする環境
* Windows 10 ( 近い未来に Version 2004 にアップデートされます ) が快適に動くパソコン

以上、とても簡単！
<br>

## 導入したもの
~~WSL2使うならDocker使えばとかそういう指摘が来るのは想定してる。わかってるぞ。~~
~~構築と検証のスケジュールが足らなかったから使い慣れたものでやらせていただくぞ。~~

* WSL 2 ( Ubuntu 20.04 LTS )
    * pyenv / pipenv
* VSCode
    * Remote-WSL

<br>
<br>
<br>

# 以下、手順

### BIOSから仮想化機能を有効にする
いきなり機械音痴には難易度が高い。グーグル能力が試されるが、この記事を読んでいるギークなあなたならきっと大丈夫。
ていうかマザーボードのメーカーによって画面が違いすぎるから、ここには書けないんだよね。
後輩氏の PC はきっと筆者が操作してクリアします。

<br>
<br>

### Windows 10 を Version 2004 にアップデートする
Windows 10 を起動して、
ファイル名を指定して実行 ( Winキー + R )で、`winver`と入力して実行、出てきた画面に

```
Microsoft Windows
バージョン **** (OSビルド *****.***)
```
**バージョン2004 (OSビルド 19041.264)かそれ以上**の記載があれば次の手順に。
そうでなければ、[メディア作成ツール](https://www.microsoft.com/ja-jp/software-download/windows10)を使用してアップデートする。
PC本体を再起動する。
先の手順でもう一度バージョンを確認し、目的を果たしていればOK。

<br>
<br>

### Windows Subsystem for Linux 2 ( WSL 2 ) を導入する
#### Linux とは？
[ウィキペディア](https://ja.wikipedia.org/wiki/Linux)より
>Linuxとは、狭義にはUnix系オペレーティングシステムカーネルであるLinuxカーネルを指し、
>広義にはそれをカーネルとして周辺を整備したシステム全体のことをいう。 

よく知らない人のために暴論 1000% のテキトーぶっこいておくと、Windows の兄弟みたいなやつ。
WSL 2 ってやつを入れると、ビッグブラザー Windows 10 の膝の上でリトルブラザーたるペンギンがウェイウェイと元気に私らを助けてくれます。
( ~~詳しく知りたければググって~~ )

導入は[公式ドキュメント](https://docs.microsoft.com/ja-jp/windows/wsl/install-win10)を参考に。

Win キーを押し、`power`と入力すると Windows PowerShell が出てくると思われるので、「管理者として実行する」をクリック。
以下のコマンドを実行する。

```powershell:PowerShell(管理者)
# Windows Subsystem for Linux を有効にする
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

# "仮想マシン プラットフォーム" のオプション コンポーネントを有効にする
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```
PC を再起動。

[WSL 2 Linux カーネルの更新](https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel)をしなくちゃならないらしいので、
ダウンロードして実行。


さらにさらに以下のコマンドを PowerShell で実行。

```powershell:PowerShell(管理者)
# WSL 2 を既定のバージョンとして設定する
wsl --set-default-version 2
```

これで、あなたの Windows PC 上でペンギンくんが元気に泳ぐ日も近い。

<br>
<br>

### Ubuntu 20.04 LTS を導入する
こんにちは、今日からお世話になります、イカしたペンギンだぜ、Bro。

1. Win キーを押し、`store`と入力すると Microsoft Store が出てくると思われるので、開く。

1. " Ubuntu "と検索窓に打つと、検索結果に " Ubuntu 20.04 LTS " があるはずなので、インストールする。

1. インストールが完了次第、Win キーを押したとき、アプリ一覧に " Ubuntu 20.04 LTS " がいるはずなので、起動する。

1. ダイアログに従ってユーザー名をパスワードを決める。 ( ログインに使用するので、以後忘れることなかれ )

以降、このペンギンに向かって命令します。
~~訳 : WSL2 のウィンドウにコマンドを打ち込んで実行してください。~~

<br>
<br>

### Pyhon ( pyenv / pipenv ) を導入する
ペンギンの首にヘビを装備させます。最強です。

参考は @e-a-st 様より、[Windows10(WSL)で、2018年的Pythonプロジェクト（①pyenv/pipenvの導入）](https://qiita.com/e-a-st/items/72c2e2a6a566d1f5d2a2) 。
>アップデート版、[2020年のPythonプロジェクトのはじめかた(windows wslとmac共通化編)](https://qiita.com/e-a-st/items/0be2ca1fb1745e1882b5) も執筆されています。
>ご興味のある方はこちらも参照されたし。

~~この程度の使い途なら pyenv / pipenv 要らないだろ、っていうツッコミも、知ってる。~~
~~正直私もまだ使い方よくわかってないけど使えてるからこれでいいやって節がある。すまん。~~

<br>

まずは Ubuntu 20.04 本体のアップデートから。
<>内はキー操作。

```bash:WSL2
sudo apt update
# 初回の sudo コマンド実行時は WSL 2 のユーザーのパスワードを聞かれるので、
<入力しても表示されないのを、打ち間違えていないと信じながら入力して> <Enter>

sudo apt upgrade
# ほんとにアップグレードすんのかい？みたいなことを聞かれるので
Y <Enter>
```

git を導入。( git がデフォルトで導入されていない環境向け。今回の手順では不要の想定。)

```bash:WSL2
sudo apt install git
```

pyenv を導入。

```bash:WSL2
# ダウンロードしてきて
git clone https://github.com/yyuu/pyenv.git ~/.pyenv

# 必要な設定を書き込んで
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc

# 設定を更新して
source ~/.bashrc

# 導入完了の確認
pyenv
```

依存関係のある build-essential などを導入。!

```bash:WSL2
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev
sudo apt-get install libffi-dev
```

pyenv で 執筆時点の AtCoder 準拠、Python ( 3.8.2 ) をビルドし、デフォルトに設定する。

```bash:WSL2
pyenv install 3.8.2
pyenv global 3.8.2
```

pipenvを導入。

```bash:WSL2
pip install --upgrade pip
pip install pipenv
```

<br>
<br>

### VSCode を導入する
[ダウンロードページ](https://azure.microsoft.com/ja-jp/products/visual-studio-code/)へ行き、ダウンロードボタンを押す。
![2020-08-27_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314492/8b6a267a-d90d-1078-b150-5cabb4fa1fcd.jpeg)
あとはよしなにインストール。

<br>
<br>

#### 拡張機能 "Remote-WSL" を導入する
VSCode の初回起動時、WSL 2 がインストールされていると、自動で Remote-WSL がサジェストされる。
`Install` ボタンを押す。
![2020-08-28 (7)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314492/f71c0a8a-8e05-d3e2-c084-f8f916959c08.jpeg)

完了すると、左下に Remote のメニューを表示するボタンが表示されるので、押す。
![2020-08-28 (8)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314492/1ea988f8-96df-9202-d112-bd42ff777a1a.jpeg)

画面上部に表示されたメニュー中、`Remote-WSL:New Window`を押す。
![2020-08-28 (9)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314492/d537c332-9878-382d-df13-f586c14f84c9.jpeg)

左下に、Ubuntu 20.04 に接続している表示が出ていれば完了！
そのまま、Python 用の拡張もインストールしてしまいましょう。
![2020-08-28 (10)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314492/ba2354d9-afca-3635-6b85-0ed543bf20fc.jpeg)

インストール後、画面がリロードされる旨のメッセージが表示されるので、`OK`を押す。
![2020-08-28 (11)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314492/b93e310a-d3c6-0121-0656-4ecd88c43427.jpeg)

<br>
<br>

# 環境構築完了！お疲れさまでした！！
長かったですね。
これにて、Windows 10 PC 上で Linux と Python を不自由なくゴリゴリ弄れる環境が整いました。
あとは待望のフル Linux カーネルとよろしくやるなり、pyenv / pipenv と戯れるなり、各々の目的を果たしてくださいませ。

次回は競技プログラミング実践編 ( まだ書き終わってません！ ) です。
(2020/12/30追記 : 書かないかも！！！ゴミ！！！！)
書いたコードを AtCoder にコマンドラインから提出したり、
オンラインの保存先として GitHub のリポジトリを作ってコミットするまでやります。

よろしくお願いいたします。


<br>
<br>

#