Windows10(WSL)で、django2のモダン開発入門記　①導入

#Django2.0を学ぶ。
今後の仕事で必要になりそうなため、Django2.0を学んでおく。お勉強を兼ね，最近リリースされたpython3.7とpipenv, version 2018.7.1を使って、なるべくモダンに開発してみたい。

##前提
- 開発マシンはwindows10
- リリース先はheroku
- データベースはpostgres+redis

※redisを使う理由は、「[開設後３週間で収益１０万円を得た個人開発サイトでやったことの全部を公開する](https://qiita.com/jabba/items/1a49e860a09a613b09d4)」という人気エントリーの影響を受けてのこと。

（エントリーから抜き書き）
>Herokuの無料Dynoは弱力だ。さらにサーバーの置き場所はUSかヨーロッパ。
HerokuのRedis（無料プラン）には２５Mのキャッシュが置けるのでここにデータを全部置く。
全てのレスポンスはRedisキャッシュからとしてHerokuログ上では5ms以内とする。
データベースが更新された際には、自動でその内容をRedisに書き込む処理を入れる。
PostgresqlやMySQLの無料枠は小さ過ぎ。MongoDBは500Mまで無料。

ふむふむ。

###開発環境は、WSL(ubuntu/debian)上に構築
git/herokuの扱いなどでwindowsならではの辛みを避けるため、WSL（Windows Subsystem for Linux）をストアから導入する。私の場合はubuntu/debian。python3.7とpipenvの導入方法については[こちら](https://qiita.com/Nimimal/items/72c2e2a6a566d1f5d2a2)をどうぞ。

#ローカルでdjangoを動かす。

##1) pipenvを開始し開発環境に入る。
pipenvに慣れていないので、基本的なところから確認しておこう。
> 注　私のマシンでは以下のaliasでwindowsのDドライブに入って作業している
> alias cdd='cd /mnt/d/deb' 

pythonのバージョンに変更がない場合、pipenv install（初回）した後に、pipenv shellで開発環境に入る。

```
/mnt/d/deb$ pipenv install
Installing dependencies from Pipfile.lock (a65489)...
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/0 — 00:00:00
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.

/mnt/d/deb$ pipenv shell
Launching subshell in virtual environment…
 . /home/kmry/.local/share/virtualenvs/deb-mRcDauaS/bin/activate

```

##2) django等を導入
ミニマムは，pip install django。
その他，目的に応じライブラリを入れていく（最初は必要なし）。
入れたライブラリはpip listで確認。現時点の開発環境では，以下のような感じ。

```
/mnt/d/deb$ pip list
Package         Version
--------------- -------
Cython          0.28.4
Django          2.0.7
numpy           1.14.5
pandas          0.23.3
pip             10.0.1
python-dateutil 2.7.3
pytz            2018.5
redis           2.10.6
setuptools      40.0.0
six             1.11.0
wheel           0.31.1
```
ちなみに、開発環境からexitして、pip listすると、グローバル環境のpipライブラリが確認できる。

```
$ pip list
Package          Version
---------------- ---------
certifi          2018.4.16
pip              10.0.1
pipenv           2018.7.1
setuptools       39.0.1
virtualenv       16.0.0
virtualenv-clone 0.3.0
```
pipenv（2018.7.1）が存在することが分かる。
再度pipenv shellで開発環境に戻れる。

##3) djangoをローカルで動かす。
今どきのフレームーワークである、Djangoを立ち上げるのは簡単だ。
アプリ名を決めて、startprojectして，runserverするだけ。
WSL上のdjangoは，ホスト機のwindows10からはlocalhostとして見えるため、
ブラウザで動作確認することもたやすい。

```
/mnt/d/deb$django-admin.py startproject als_proj1
/mnt/d/deb$cd als_proj1
/mnt/d/deb/als_proj1$ python manage.py runserver

Performing system checks...

System check identified no issues (0 silenced).

You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

July 21, 2018 - 05:15:45
Django version 2.0.7, using settings 'als_proj1.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
[21/Jul/2018 05:16:03] "GET / HTTP/1.1" 200 16348
[21/Jul/2018 05:16:03] "GET /static/admin/css/fonts.css HTTP/1.1" 200 423
[21/Jul/2018 05:16:03] "GET /static/admin/fonts/Roboto-Regular-webfont.woff HTTP/1.1" 200 80304
[21/Jul/2018 05:16:03] "GET /static/admin/fonts/Roboto-Bold-webfont.woff HTTP/1.1" 200 82564
[21/Jul/2018 05:16:03] "GET /static/admin/fonts/Roboto-Light-webfont.woff HTTP/1.1" 200 81348
Not Found: /favicon.ico
[21/Jul/2018 05:16:03] "GET /favicon.ico HTTP/1.1" 404 1975

```
ということで、ブラウザから，以下のコマンドでdjangoにアクセスできる。
http://127.0.0.1:8000/

![d2.PNG](https://qiita-image-store.s3.amazonaws.com/0/16455/5da6922b-4138-b0e1-8485-246e3bd9546a.png)

ただ立ち上げただけなので、一旦停止（CONTROL-C）

##4) フォルダ構成の確認
treeを入れて、フォルダ構成を確認しておこう。

```sh
/mnt/d/deb$ tree .
.
├── Pipfile
├── Pipfile.lock
└── als_proj1
    ├── als_proj1
    │   ├── __init__.py
    │   ├── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    ├── db.sqlite3
    └── manage.py
```

PipfileとPipfile.lockは、本開発環境向けのpipenv関連ファイル。
als_proj1フォルダはdjango2.0の初期構成。

#次回はpostgres導入

次回はpostgresを導入。WSLはwindowsから見ると１アプリに過ぎないため、postgresはwindows版の方を導入したい。