【Django】Webアプリ入門 Part2 AnacondaでDjango開発環境構築

#はじめに
この記事シリーズでは、Python、JavaScript歴1年の大初心者がどうにか頑張ってWebアプリを作ろうとする過程を克明に描き出したいと思います。
なるべく公式ドキュメントやいろいろなサイトを調べて間違いのないようにしますが、これは違うんじゃない？と思ったら是非コメントをください！！
**ほかのプログラマ・エンジニアの方の生の声をいただくことは初心者にとっては貴重な学習の機会になります！！**

#Part2でやること
[前回](https://qiita.com/sun-narumi/items/7ce75932c9d7c2b34ad0 "Pre")の記事ではDjangoがMTVモデルという形式で成り立っていることを確認しました。
今回の記事からはいよいよ実際の開発に取り掛かっていきたいと思います。
その初めとして、今回は開発環境を整えてフォルダの中身を見ていきたいと思います。
自分の環境でしか行ってませんが、Qiitaには様々な開発環境の記事があると思うのできっとあなたの環境に似ている記事もあると思います！

#環境
Windows
Anaconda3(python3.7)
conda
MySQL8.0(データベース)

大学の授業でAnacondaを入れたのでそのままAnaconda環境で建てようと思いました。（最近の理系大学生でpythonを始める人はAnacondaで始めることが多いと思います。）Anacondaとは科学技術計算（データサイエンスなど）に適したpythonの実行環境のことです。Anacondaでは`conda`というパッケージ管理ツールを使ってAnaconda Cloud にあるパッケージをインストールできます。しかしあとあとになって気付いたのですが、**Web系プログラミングのパッケージはAnaconda Cloudにない、または最新版がないことが多い**です。なのでpythonだけインストールして`pip`を使ってPyPIからインストールするほうが良いのかもしれません。

MySQLのインストールについてはほかのものを参照にしてください。一つだけ言いたいことは、**インストール後の初期設定時に認証方式選択画面があるのですが、そこで最新の認証方式でなく下の方の昔の認証方式を選んでください。**僕の場合はそれが原因でエラーが出て2~3時間を浪費しました。初期設定で最新の認証方式を選んでいても後から変えることができるので([こちら](https://www.petitmonte.com/database/mysql_authentication_plugin.html)を参照)安心してください

#仮想環境
仮想環境を構築してその中でパッケージをインストールすると、全体の環境を汚すことなくパッケージが使えます。
Anacondaで仮想環境を構築するときは`conda`コマンドを使います
`conda`はパッケージ管理ツールだけでなく仮想環境構築にも使えます。
しかも結構簡単に構築することができます。その手順を見てみましょう。

まずは仮想環境を作成します。`conda create -n 環境名`とすることで仮想環境が作られます。デフォルトではpythonが入っていない状態なので、仮想環境作成時に一緒にpythonをインストールしたい場合は`conda create -n 環境名 python=3.7`のようにバージョン指定とともにインストールすることができます。

次に仮想環境の中に入ります。これも簡単で、`conda activate 環境名`とすることで指定した環境に入ることができます。仮想環境に入ると、以下のインストールなどはすべてその環境の中だけで完結します。仮想環境から出たい場合は`conda deactivate`のようにします。
ここまでの流れを実際にやってみるとターミナルでは以下のように出ます。

```
(base) PS C:\Users\Panasonic\webaccountbook> conda create -n test-env python=3.7
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

~省略~

Proceed ([y]/n)? y

~省略~

Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate test-env
#
# To deactivate an active environment, use
#
#     $ conda deactivate

(base) PS C:\Users\Panasonic\webaccountbook> conda activate test-env
(test-env) PS C:\Users\Panasonic\webaccountbook>
```

#Djangoのインストールからアプリ作成
`conda`を使ってDjangoをインストールします。
[Anaconda Cloud](https://anaconda.org/)から探すことができますが簡単なので手順は省略します。
仮想環境に入って`conda install -c conda-forge django`を実行してインストールしてください。
Djangoでは、Djangoが動く環境を簡単に作ることができます。
Djangoではプロジェクトがあり、その直下にアプリケーションがあるという構造になっています。
プロジェクトはWebアプリケーション全体が持つ機能をすべて含んでおり、
その構成要素である機能がプロジェクト直下のアプリケーションとして存在します。

では、プロジェクトとアプリケーションを作ってみましょう。
まずはプロジェクトを作りたいディレクトリに移動して、
`django-admin startproject プロジェクト名`を実行します。
これでプロジェクトが作られます。とても簡単ですね！
次にアプリケーションを作ります。先ほど作ったプロジェクトに移動して、
`python manage.py startapp アプリケーション名`を実行します。
こうすることでアプリケーションができます。

#作られたファイルを見てみる
プロジェクトやアプリケーションを作ったときに、自動でファイルが作られます。
その構造を見てみましょう。以下のようになるはずです。


```
|- manage.py
│
├─my_app
│  │  admin.py
│  │  apps.py
│  │  models.py
│  │  tests.py
│  │  views.py
│  │  __init__.py
│  │
│  └─migrations
│          __init__.py
│
└─my_project
    │  asgi.py
    │  settings.py
    │  urls.py
    │  wsgi.py
    │  __init__.py
    │
    └─__pycache__
            settings.cpython-37.pyc
            __init__.cpython-37.pyc
```

ここで各ファイルについて軽く役割を確認しておきましょう。

* manage.py - コマンドラインで実行する形式でDjangoプロジェクトに対する様々な操作を提供する。
開発用サーバーをたてたり、データべースとモデルを結び付けたりするときに
`python manage.py コマンド`とすることで使う

プロジェクトを作成するとその直下にプロジェクトと同名のフォルダがもう一個作られます。
その中身について見てみます。

* wsgi.py,asgi.py - WSGIとはPythonでWebサーバとWebアプリケーションを接続する際の共通的な決まりのことで、wsgi.pyはその決まりに基づいてWebサーバーの設定を行います。ASGIとasgi.pyの関係も同様なのですが、ASGIはいずれWSGIの後を継ぐものとされています。

* settings.py - 様々な設定をここに書き込みます。プロジェクトのルートディレクトリ、使われる地域や言語、連携するデータベースの設定、使用するアプリケーション、静的ファイルの位置など、すべてここに書きます。

* urls.py - URLとビューをマッピングを指定します。WebサイトにはURLを指定してアクセスしますがそれはDjangoアプリでも同じです。普通の静的Webサーバーを使うときは、URLはhtmlファイル自体を指定して、Webサーバーからそのhtmlファイルを返してもらうという形をとりますが、Djangoの場合はURLとview関数が対応しています。あるURLをWebサーバーに渡すとurls.pyでのマッピング表に基づいてURLからview関数を呼び出し、view関数が生成するhtmlファイルを返します。

つぎにアプリケーション内のファイルについて見てみましょう。

*　apps.py - settings.py には使われているアプリケーションを設定する項目`INSTALLED_APP`があります。apps.py　内では`MyAppConfig`のようなクラスが定義されていると思いますが、settings.pyの`INSTALLED_APP`へのアプリケーション登録はこのクラスをもとに行います。

* tests.py - Djangoにはデータの作成・削除・更新・読み込みなどができているか自動でテストする仕組みがあります。tests.pyではそのテスト内容を記述します。初心者はテストを軽視する傾向がありますが動作保証のために書きましょう！(と言いつつ書いていません。もう少し簡単に書けたら...)

* views.py - Djangoの基本思想であるMTVのうち、V(View)にあたる部分はここで書きます。([前回参照](https://qiita.com/sun-narumi/items/7ce75932c9d7c2b34ad0))

* models.py - Djangoの基本思想であるMTVのうち、M(Model)にあたる部分はここで書きます。([前回参照](https://qiita.com/sun-narumi/items/7ce75932c9d7c2b34ad0))

* admin.py - Djangoは管理サイトを自動で作ってくれます。そのサイトで管理したいモデルなどをここで設定します。

アプリ直下のmigrationフォルダにはモデルの更新状況が記録されており、ここのファイルを参考にモデルからデータベースのレコードを作ります。

#まとめ
AnacondaでDjangoの開発環境構築を行った後、最初からあるファイルの役割について確認しました。とは言ってもまだ各ファイルについてぴんと来てないと思いますので、次回以降で実際にコードを書いていって慣れましょう！
次回はHello,Worldを表示させたいと思います！
ご感想やご意見がありましたら是非コメントしてください！