WSL+PycharmでDjangoを書きたかった

#はじめに
Macのターミナルを利用して開発を行っていたが、Mysqlの設定ファイルを弄ったところ、どうやら、Mysqlはインストールされているが、Mysqlは起動しないという謎のバグが起きた。
そこで、家で眠っていたWindowsを引っ張りだして開発をしようというのが始まりだ。
最初はVirtualBoxにubuntu18.04を入れて開発していたが・・・**遅い！！**
Macのターミナルで開発していたときと比較したときに**あまりにも遅かった**ので、最近良くなってきている？と言われているWSLを導入した結果、何かうまくいったので、個人的備忘録程度に、記事を書くことにした。
（ということですので、不備などございましたら、コメントしていただけると幸いです。）
###開発環境
Windows10
Pycharm Pro版
Cmder
WSL
Ubuntu 18.04 LTS
Python3.6.5

#目次
1.はじめに
2.目次
3.WSLの導入
4.Pythonの導入
5.Djangoプロジェクトの作成
6.Pycharmの設定
7.まとめ

#WSLの導入
###WSLを有効にする
WSLを利用するために、**Windows Subsystem for Linux**という機能を有効にする。
####CUIで導入
PowerShellを**管理者権限**で開いて、以下を打ち込むと有効になる。

```PowerShell
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
```

####GUIで導入
**アプリと機能**の中にある関連設定の**プログラムと機能**を開く
そこにある**Windowsの機能の有効かまたは無効化**を開くと**Windows Subsystem for Linux**があるので、それのチェックボックスをオンにする。
オンにすると、再起動を求められるので、一旦再起動する。
###WSLのパッケージをストアから導入する
WSLを有効化したので、**Microsoft Store**から、Linuxパッケージを導入する。
今回は、**Ubuntu 18.04 LTS**をインストールすることにする。
###インストール後の初期設定
ストアからインストールすると、**Ubuntu 18.04**というアプリがあるので、それを開く。
初回起動時には、ファイルを展開するために数分かかる。
ファイルを展開後、**WSL内のユーザの作成**を求められるので、好みのユーザ名とパスワードを入力する。
時間があるのであれば、アップデートとアップグレードをしても良いだろう。
**（初回起動時とは比較にならないくらい時間がかかるので注意）**

```Ubuntu18.04
Enter new UNIX username:好きな名前
Enter new UNIX password:好きなパスワード
Retype new UNIX password:上で入力したパスワード
$ sudo apt update //←は時間があるときにやろう
$ sudo apt upgrade //←は時間があるときにやろう
```

apt-getじゃダメなのかという意見がありそうだが、Ubuntu14.04以降はaptを推奨されているらしいので、今回はaptを利用する。
###sshの設定
**最低限、Djangoが書ければ良いという人はここを読み飛ばしても大丈夫です。**
個人的にターミナルソフト（私の場合は**Cmder**）から動かしたかったので、Ubuntu側のssh接続を許可する設定を行う。

```Ubuntu18.04
$ sudo vi /etc/ssh/sshd_config
//56行目辺り
# PasswordAuthentication no
↓
PasswordAuthentication yes 
```

###ターミナルソフトからssh接続
これでCmder上で、以下のコマンドを打つと接続できる。

```cmd
$ bash
//これを打つと、$からUSERNAME@DESKTOP-hogehoge:/mnt/c/Users/USERNAME$になる
$ sudo service ssh start
$ ssh 127.0.0.1
USERNAME@127.0.0.1's password: Ubuntu18.04で初期設定したパスワードを入力
```

#Pythonの導入
今回は、**Pyenv**+**Virtualenv**で**Python**を導入する。
Pyenv+Virtualenvを使わない方法は以下の記事を参考にしてください。
https://yuta0508.hatenablog.com/entry/2018/05/06/104400


###Gitのインストール
Pyenvをインストールするためには、**Git**をインストールする必要がある

```Ubuntu18.04
$ sudo apt install -y git
```

###Pyenvのインストール
PyenvのリポジトリをGitHubからクローンする。

```Ubuntu18.04
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
```

クローンした後、以下のモノを.bashrcに書き込む。

```Ubuntu18.04
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
```

その後、.bashrcを再読み込みすることで、追記した設定を適用する。

```Ubuntu18.04
$ source ~/.bashrc
```

設定を適用した後、以下が表示されたらPyenvの設定は終了。

```Ubuntu18.04
$ which pyenv
/home/USERNAME/.pyenv/bin/pyenv
```

###Virtualenvのインストール
virtualenvのリポジトリをクローンする。

```Ubuntu18.04
$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
```

クローンした後、以下のモノを.bashrcに書き込む。

```Ubuntu18.04
$ echo 'eval "$(pyenv virtualenv-init -)"'
```

###Pyenv+VirtualenvでPythonの環境を作成する
はじめに、Pyenvで利用できるバージョンを確認する。

```Ubuntu18.04
$ pyenv install --list
```

利用したいバージョンをインストールする。
（今回は、3.6.5というバージョンをインストールする）

```Ubuntu18.04
$ pyenv install 3.6.5
```

その後、```pyenv virtualenv [version] <virtualenv_name>```というコマンドで**virtualenv_name**という環境が作成される。
今回は、3.6.5というバージョンで、new_3.6.5という名前の環境を作成する。

```Ubuntu18.04
$ pyenv vertualenv 3.6.5 new_3.6.5
```

作成した環境があるか確認する。

```Ubuntu18.04
$ pyenv versions
* system (set by /home/USERNAME/.pyenv/version)
3.6.5
3.6.5/envs/new_3.6.5
```

#Djangoプロジェクトの作成
###開発環境の設定
WSLはローカルと自動的マウントされるらしいので、Cドライブ直下にPythonプロジェクトを管理するフォルダを作成する。

```Ubuntu18.04
$ cd /mnt/c
$ mkdir <作成するディレクトリ名>
$ cd <作成したディレクトリ名>
```

作成したディレクトリ内で、先ほど作成したPython環境を利用したいので、その設定をする。

```Ubuntu18.04
$ pyenv local new_3.6.5
```

適用されたかどうかを確認する。

```Ubuntu18.04
$ pyenv versions
system
3.6.5
* 3.6.5/envs/new_3.6.5 (set by /home/USERNAME/.pyenv/version)
```

###Djangoプロジェクトの作成
今のままでは、Djangoプロジェクト作成することができないので、pipからdjangoをインストールする。

```Ubuntu18.04
$ pip install django
```

これで、Djangoプロジェクトを作成する準備ができたので、実際に作成してみる。

```Ubuntu18.04
$ django-admin startproject <作成したいプロジェクト名>
```

以下を打ち込んだ後、以下のリンクにアクセスして「The install worked successfully! Congratulations!」が表示されたらDjangoプロジェクトの作成に成功。

http://127.0.0.1:8000


```Ubuntu18.04
$ cd <作成したプロジェクト名>
$ python manage.py runserver
```

#Pycharmの設定
###Pycharmのインストール
次にWindowsにPycharmをインストールする。

以下は、公式サイトのダウンロードリンク。
https://www.jetbrains.com/pycharm/download/#section=windows
以下は、詳細な説明のリンク。
https://gammasoft.jp/python/pycharm-install-on-windows/

今回は、Windowsでの開発なので、**Windows**を選択して、ダウンロードする。
ダウンロードが完了したら、exeファイルを開いて、インストールする。
こだわりが無ければ、そのままEnterを押していれば良い。
インストールが完了したら、Pycharmアプリケーションを開く。
初期設定があるが、これもこだわりが無ければEnterを押していけば良い。
初期設定が終わると、以下の画面が表示される。

<img width="582" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/227124/b92173ec-4838-f944-c003-57cbd3ff5539.png">

表示された画面の右下に、**Configure**の中の、**Setteings**をクリックする。
開いた画面の左上に検索バーで「Interpreter」と検索すると、**Project Interpreter**があるので、それの歯車をクリックする。

<img width="582" alt="キャプチャ1.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/227124/70f02e7a-aaf3-7478-d63d-5d0e6773d9b2.png">

クリックすると、Add Remoteがあるので、それをクリックし、以下のように設定する。

<img width="431" alt="キャプチャ2.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/227124/5a00cabd-e5a5-26fb-4caf-915e8811c50f.png">

これでインタープリタの設定が完了する。

#まとめ
実際に、開発をするときの手順
（1. ```bash```を打つ）
（2. ```sudo service ssh start```でssh接続を可能にする）
（3. ```ssh 127.0.0.1```で接続する）
3.5. Pycharmで開発
4. ```cd \mnt\c\<作成したディレクトリ>\<作成したプロジェクト>```
5. Python manage.py runserver

※括弧はターミナルソフトを利用するときの手順

冒頭でも記載しましたが、何かありましたら、コメントしていただければと思います。
長い間お付き合いいただきありがとうございました。


#参考文献
http://www.atmarkit.co.jp/ait/articles/1608/08/news039.html
https://qiita.com/Ningensei848/items/b313e440444bbdf65876
https://linuxfan.info/package-management-ubuntu
https://qiita.com/Kodaira_/items/feadfef9add468e3a85b
https://qiita.com/shigechioyo/items/198211e84f8e0e9a5c18
https://gammasoft.jp/python/pycharm-install-on-windows/
https://pleiades.io/help/pycharm/using-wsl-as-a-remote-interpreter.html
http://iamnotmyself.com/2017/04/15/setting-up-powerline-shell-on-windows-subsystem-for-linux/