[MacOS]Djangoの環境構築手順

## はじめに
久しぶりにDjangoを使おうとしたら、構築方法をすっかり忘れてしまっていたため、環境構築手順とプロジェクトのディレクトリ構成についてまとめます。  

## 目次
- [環境構築の手順](#環境構築の手順)
  - [1. ディレクトリ構成](#1-python３のインストール)
  - [2. 開発環境構築](#2-仮想環境の設定)
  - [3. Djangoのインストール](#3-djangoのインストール)
  - [4. プロジェクトの作成](#4-プロジェクトの作成)
  - [5. 環境設定の変更](#5-環境設定の変更)
  - [6. データベースのセットアップ](#6-データベースのセットアップ)
  - [7. 開発サーバの起動](#7-開発サーバの起動)
- [ディレクトリ構成](#ディレクトリ構成)
- [さいごに](#さいごに)
- [参考記事](#参考記事)

## 環境構築の手順
MacOSでPython3を使用した、Djangoの環境構築手順について解説していきます。

### 1. Python３のインストール
以下のコマンドを実行し、現在のバージョンを確認します。  
もし `Python 3.x.x` のようにPython3系のバージョンが表示されなければ、インストールを行いましょう。

```sh
python -V 
```

以下のコマンドを実行し、Python3.12をインストールします。

```sh
brew install python3.12
```  

インストールしたpython3.12の実行ファイルのシンボリックリンクを作成します。  

```sh
ln -s /usr/local/opt/python@3.12/bin/python3.12 /usr/local/bin/python3
```

これによって、pythonコマンドが実行できるようになります。`python3 -V` コマンドを実行し、`Python 3.12.x` のようにメジャーバージョンとマイナーバージョンが `3.12` と表示されていたらインストール成功です。
<br/>

### 2. 仮想環境の設定
python3の標準機能である「venv」を使用して任意の名前で仮想環境を作成します。
ここでは「divenv」の名前で作成しています。

```sh
python3 -m venv divenv
```

これによって、仮想環境ごとにインストールするパッケージを管理することができます。
- [**-m**](https://misprochef.com/posts/python-m-option/)：Pythonが持つモジュールを実行するためのオプション  
- [**venv**](https://qiita.com/shun_sakamoto/items/7944d0ac4d30edf91fde)：仮想環境を作成するPythonの標準モジュール  
<br>
「.gitignore」ファイルを作成し、各ファイルをgitの管理化から外します。  

```sh
divenv
db.sqlite3
__pycache__
```

仮想環境を実行します。  

```sh
source divenv/bin/activate
```

ターミナルに「divenv」と表示さていれば、仮想環境内にいることになります。  
<br/>

### 3. Djangoのインストール
「requirements.txt」ファイルを作成し、下記を記載します。

```sh
echo "Django==5.0" >> requirements.txt
```

「requirements.txt」ファイルにパッケージを記載することでまとめてインストールすることができます。  
Pythonパッケージは [PyPI](https://pypi.org/project/Django/5.0/) で管理されています。  

<br/>

パッケージをインストールします。
```sh
pip3 install -r requirements.txt
```
- [**-r**](https://packaging.python.org/ja/latest/guides/installing-using-pip-and-virtual-environments/)：このオプションを与えることで「requirements.txt」に記載されているパッケージを全てインストールすることができます。  
<br/>

### 4. プロジェクトの作成
任意の名前でプロジェクトを作成します。ここでは「app」の名前で作成します。  
末尾に `.`をつけることで、カレントディレクトリ直下にプロジェクトが作成されるようになります。

```sh
django-admin startproject app .
```

コマンドを実行することで、「app/」「manage.py」「db.sqlite3」が作成されます。  
<br/>

### 5. 環境設定の変更
タイムゾーンと言語のデフォルト設定を日本に変更します。  

app/setting.py
```py
LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'
```
- [LANGUAGE_CODE](https://docs.djangoproject.com/en/5.0/ref/settings/#language-code)：言語のデフォルト値を変更することができます。
- [TIME_ZONE](https://docs.djangoproject.com/ja/5.0/topics/i18n/timezones/#default-time-zone-and-current-time-zone)：タイムゾーンのデフォルト値を変更することができます。
<br/>

### 6. データベースのセットアップ
プロジェクト作成時にデフォルトで設定されたマイグレーション情報をデータベースに反映させます。

```sh
python3 manage.py migrate
```
<br/>

### 7. 開発サーバの起動
開発サーバーを起動させます。

```sh
python3 manage.py runserver
```

「[http://127.0.0.1:8000/](http://127.0.0.1:8000/)」にアクセスし、以下の画面が表示されればDjangoの環境構築は成功です。  

![スクリーンショット 2024-03-24 0 38 13](https://github.com/dai-gi/djanog-introduction/assets/59759668/7f246a34-7090-4200-be67-36f043e8c7e2)
<br/>

## ディレクトリ構成
完成系のディレクトリ構成になります。

```plaintext
.
├── app
│   ├── __pycach__
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── divenv
├── .gitignore
├── README.md
├── manage.py
├── db.sqlite3
└── requirements.txt
```
**app/**  
Djangoアプリケーション全体を管理するためのフォルダ
<br/>

**_ _ pycach _ _ /**  
コンパイルされたモジュールのキャッシュが「.pyc」ファイルとして管理される。
これにより、プログラムの実行速度が速くなる。
<br/>

**_ _ init _ _.py**  
「app/」をPythonのモジュールとして認識させる役割を持ち、また、「app/」がインポートされた際に初期化したい処理を記述する場所としても機能する。
<br/>

**asgi.py**  
非同期通信を行うための設定ファイル。
<br/>

**settings.py**  
Djangoアプリケーションの設定ファイル。
<br/>

**urls.py**  
ルーティングを設定するためのファイル。
<br/>

**wsgi.py**  
WEBサーバとAPサーバ間の通信を仲介する設定ファイル。
<br/>

**divenv/**  
仮想環境を管理するフォルダ。
<br/>

**manage.py**  
Djangoアプリケーションを操作することができる実行ファイル。
<br/>

**db.sqlite3**  
SQLiteデータベースの実体。Djangoではデフォルトのデータベースとして設定されている。
<br/>

**requirements.txt**  
pythonパッケージをまとめてインストールするためのファイル。

## さいごに
この記事が何かの一助になれれば幸いです。また、記事に間違いや改善点などありましたら、ぜひコメントをしていただけると嬉しいです。  

## 参考記事
https://rightcode.co.jp/blog/become-engineer/django-diary-app-make-built-environment

https://docs.djangoproject.com/ja/5.0/intro/tutorial01/#

https://www.python.jp/install/macos/install_python.html

https://www.cfxlog.com/python-requirements-txt/