Djangoに０から入門

#はじめに

本記事では、Python初心者でもDjangoでWeb開発をスタートするために必要な環境構築の手順をまとめました。ただし、筆者がDjangoに関する知識がほぼ0の状況から作成した内容であるため、技術的に誤った記述をしている可能性があることをご承知おきください。

#目次
- [環境構築](#環境構築)
  - 開発環境
  - Pythonインストール 
  - Djangoインストール
  - PyCharmインストール
- [簡単なアプリケーション作成](#簡単なアプリケーション作成)
  - Djangoプロジェクトを作成
  - PyCharmの設定をする
  - Webアプリケーションの動作確認
  - アプリケーションを作成する
  - ページにアクセス
- [おわりに](#おわりに)
- [参考文献](#参考文献)

##■環境構築
###◇開発環境
| 種別        | 名称 (バージョン)       |
|:-----------|:--------------------|
| OS         | macOS               |
| 言語        | Python 3.9.5        |
| フレームワーク | Django 3.2.3        |
| IDE        | PyCharm 2021.1.1 CE |

###◇Pythonをインストール
今後の開発を考えて、パッケージマネージャーであるHomebrewでPythonをインストールします。

####●Homebrewをインストール
[Homebrew公式サイト](https://brew.sh/index_ja)に掲載されているインストール用のコードをコピーし、ターミナルに貼り付けて実行します。

下記コマンドでバージョン確認し、問題なければインストール完了。

```
brew -v
```

*参考*
- [Homebrewのインストール - qiita](https://qiita.com/zaburo/items/29fe23c1ceb6056109fd)

####●pyenvをインストール
brewコマンドでpyenvをインストールします。

```
brew install pyenv
```

次にpyenvの設定をします。

```
echo $SHELL
```
上記コマンドの出力結果によって設定方法が異なる。

・/bin/bashが出力された場合

```
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile 
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
 echo 'eval "$(pyenv init --path)"' >> ~/.bash_profile 
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
```

・/bin/zshが出力された場合
（Homebrew以外でpyenvをインストールした場合は少し異なる）

```
echo 'eval "$(pyenv init --path)"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc 
source ~/.zshrc
```

*参考*
- [pyenv - github](https://github.com/pyenv/pyenv#homebrew-on-mac-os-x)
- [【Python超入門講座】Macの開発環境を構築しよう【初心者向け】 - youtube](https://www.youtube.com/watch?v=DJUEA9wiCgY&t=662s)


####●Pythonをインストールする
pyenvでPythonをインストールするメリットは、プロジェクトごとに複数のバージョンのPythonを切り替えて使用できることである。

インストール可能なバージョンを確認する。

```
pyenv install --list
```

Python 3.9.5 をインストールする場合は、

```
pyenv install 3.9.5
```

インストールされているバージョンを確認するには、

```
pyenv versions
```

バージョン 3.8.5 と 3.9.5 をインストールした場合は以下のような出力になります。

```
  system
* 3.8.5
  3.9.5
```

✳︎がついているバージョンが現在選択されており、切り替えるには下記のコマンドを打ちます。なお、systemは標準でインストールされているものなので今回は気にしなくて大丈夫です。

```
pyenv global 3.9.5
```

とすると、下記のようになります。切り替えのオプションとしてglobalのほかに、localとshellがありますので、気になる方は参考欄を参照してください。

```
  system
  3.8.5
* 3.9.5
```

最後にPythonのバージョンを確認しておきます。

```
python -V
```

ここで、先ほど選択したバージョンが表示されていればPythonのインストールは完了です。

*参考*
- [pyenv、virtualenv、pip、anacondaの違いを説明します](https://oversleptabit.com/archives/2195)
- [pyenvを使ってPythonの複数のバージョンを使い分ける](https://www.yoheim.net/blog.php?q=20170204)

###◇Djangoをインストール
####●Pythonで仮想環境を作成する
プロジェクトの実行環境を用意するために仮想環境を作成する。実行環境を分ける理由は、システムが使うPython環境に影響を与えないこと、同じモジュールのバージョンを使い分けられることなどが挙げられる。

仮想環境を作成するには下記のコマンドを打ちます。仮想環境名は任意に書き換えて下さい。

```
python -m venv 仮想環境名
```

仮想環境ディレクトリに移動し、仮想環境に入ります。

```
cd 仮想環境名
source bin/activate
```

仮想環境に入ると、コマンドラインが下記のようになります。

```
(仮想環境名) $ 
```

仮想環境を抜けたい場合は、次のコマンドを打つだけです。（**これからモジュールを仮想環境にインストールするので仮想環境を抜けた方は入り直して下さい。必ずです。**）

```
deactivate
```

####●Djangoをインストールする
では、いよいよDjangoをインストールします。

```
最新バージョンをインストール
pip install django

バージョンを指定してインストール
pip install django==3.2.3
```

pipコマンドを使用すると、pipをアップグレードするよう警告が出てくることがありますが、その際は素直にアップグレードして下さい。pipアップグレード後、念のために上記コマンドを再入力して下さい。

インストールされたバージョンを確認して、

```
python -m django --version
```

問題なければDjangoインストール完了です。


*参考*
[仮想環境: Python環境構築ガイド - python.jp](https://www.python.jp/install/windows/venv.html)

###◇PyCharmをインストール
[PyCharmダウンロードサイト](https://www.jetbrains.com/ja-jp/pycharm/)からインストーラーをダウンロードする。無料版のCommunity Editionで十分快適に利用できます。ダウンロード後、インストールを完了して下さい。

##■簡単なアプリケーション作成
###◇Djangoプロジェクトを作成する
先ほど作成した仮想環境ディレクトリ直下にDjangoプロジェクトを作成する。サンプルとしてプロジェクト名はhello_appとしていますが、任意に書き換えて下さい。（初学者向けの補足ですが、基本的にコマンドは仮想環境下で実行して下さい。）

```
django-admin startproject hello_app（プロジェクト名）
```

###◇PyCharmの設定をする
次にPyCharmを開いて、作成したプロジェクトディレクトリ(仮想環境ディレクトリ直下のhello_app）を開き、以下の手順で設定する。

1. PyCharmメニューの「Preferences…」をクリック
2. 左側の一覧内の「Project: Djangoプロジェクト名」をクリック
3. 「Python Interpreter」クリック
4. 右側のPython Interpreter選択箇所にある「歯車」をクリックし「Add」をクリック
5. 「Existing environment」を選択し、Interpreterの「…」をクリック
6. 「仮想環境ディレクトリ/bin/python」を選択してOKをクリック
7. もう一度右下にあるOKをクリック
8. PyCharm内のTerminalを開いて、初めから仮想環境に入れていることが確認できたら設定完了です。

Windowsの方は少し異なる部分がありますので、適宜調べながら設定して下さい。

###◇Webアプリケーションの動作確認
PyCharm上のターミナル（今後、特に説明がない場合はPyCharm上のターミナルを指す）で下記コマンドを打ち、

```
python manage.py runserver
```

ブラウザで下記にアクセスする。

```
http://localhost:8000/
```

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1576152/069dbea7-d4c8-73e1-5518-5af525a44596.png" width=50%>

このような画面が表示されていたらOKです。
Webアプリケーションを停止させるにはターミナルで「ctrl + c」を入力するだけですが、基本起動したままでも大丈夫です。

###◇アプリケーションを作成する
Webアプリケーションの起動を確認できたので、次はブラウザにHello Worldを表示させようと思います。

####●Djangoアプリケーションを作成する
Djangoアプリケーションを作成していきます。アプリケーション名は任意ですが、今回はサンプルとしてhelloとします。

```
python manage.py startapp hello（アプリケーション名）
```

実行後、helloアプリケーションディレクトリが追加され、下記のようなディレクトリ構造になっているかと思います。反映されない場合はPyCharmをリフレッシュなり再起動して下さい。

```
hello_app
├── hello_app
│　　　　　　├── (以下略)
│
├── hello (←新規作成される)
│   ├── migrations
│   ├── __init__.py
│   ├── (以下略)
│
├── manage.py
├── (以下略)
```

####●画面表示の処理を作成
ここからは実際にプログラムを書いていきます。

まず、helloディレクトリ内のviews.pyを下記のように編集します。

```python:views.py
from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello World")
```

書かれている内容をざっくり説明すると、index関数が呼び出されるとクライアント(Webブラウザ)に「Hello World」をレスポンスする(送り返す)といった処理になってます。

####●ルーティングを設定
続いて、ブラウザでアクセスするURLによって画面表示の処理を変えるためにルーティング設定をします。

hello_appディレクトリ内のurls.pyを下記のように編集します。

```python:urls.py
from django.contrib import admin
from django.urls import path
import hello.views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/', hello.views.index),
]
```

「hello/」の部分がURLを設定していて、そこにアクセスすると「hello.views.index」（さっき書いた画面表示の処理）が呼び出されるよ、という仕組みです。

####●ページにアクセス
それでは「Hello World」が画面に表示されるか確認しましょう。

Webアプリケーションを停止させている方は、下記コマンドで起動するのを忘れずに。

```
python manage.py runserver
```

ブラウザで下記にアクセスしましょう。

```
http://localhost:8000/hello/
```

↓のように「Hello World」が表示されていれば成功です。

---
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1576152/9ef4c5fc-3acc-8509-f352-ba8031930840.png" width=50%>

（↑スクショ貼り付けたけどブラウザ表示領域がわかりにくい。。。）

---

先ほどの動作確認の時のように「http\://localhost:8000/」にアクセスすると下記のエラーが出るので、注意して下さい。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1576152/b06a9c82-33c7-a47c-bcfa-a477cf7b6ed8.png" width=80%>

（補足ですが、「http\://localhost:8000/」にルーティングしたい場合は、urls.pyのurlpatternsの内容を下記に変更して下さい。）

```python:urls.py
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', hello.views.index),
]
```

#おわりに
SNSで色んな方々（2名）の影響を受け、今勉強していることを発信してみることに。
書き始めた当初はもう少し踏み込んだ内容まで書くつもりだったのですが、キリがなさそうだったので入門するまでのところで一旦切り上げました。（続編も投稿予定ですが時期的にいつになるのやら。笑）

普段、技術的な内容とかはMacのメモアプリにツラツラ書いてるんですが、いざQiitaなどで公開するとなると「いい加減な情報は記載できないプレッシャー」を感じて情報整理を始めたんですけど、なんとなく理解した気になってたところとか後回しにしてたところが浮き彫りになって、そこを理解するために参考書読み漁ったりネットサーフィンで大変でした。（情報整理は普段からしとけっていう教訓を得ました。笑）
そうこうして整理した知識は定着が段違いなので、今回は情報発信することの重要性を知る良いきっかけになったと思います。

最後になりましたが、本記事をお読みいただきありがとうございます。
初投稿なので至らぬ点など沢山あるかと思いますが、お手柔らかにご質問、ご指摘等頂けたらと思います。

#参考文献
- [Python Django3超入門　掌田 津耶乃 (著)](https://www.amazon.co.jp/Python-Django3%E8%B6%85%E5%85%A5%E9%96%80-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798061921/ref=sr_1_3_sspa?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=django&qid=1626164422&sr=8-3-spons&psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUEyUUpSVjNLUzM3SUhIJmVuY3J5cHRlZElkPUEwNTkxMDg1MzVWWko3Nkk4WVA3RCZlbmNyeXB0ZWRBZElkPUFYVTRCWENRTTRPSE0md2lkZ2V0TmFtZT1zcF9hdGYmYWN0aW9uPWNsaWNrUmVkaXJlY3QmZG9Ob3RMb2dDbGljaz10cnVl)
- [動かして学ぶ! Python Django開発入門　大高 隆 (著)](https://www.amazon.co.jp/%E5%8B%95%E3%81%8B%E3%81%97%E3%81%A6%E5%AD%A6%E3%81%B6-Python-Django%E9%96%8B%E7%99%BA%E5%85%A5%E9%96%80-NEXT-ONE/dp/4798162507/ref=tmm_pap_swatch_0?_encoding=UTF8&qid=1626164422&sr=8-6)