環境を分離してDjangoの開発環境を作る（Python3系・Django2.1系）

## はじめに

この記事では、**環境を分離してDjangoの開発環境を整える**方法をまとめます。

この記事は、[【エラーは友達】Django基礎ハンズオン](https://elv.connpass.com/event/114810/)（2019/01開催）の環境構築参考記事です。
ハンズオンでは[Django Girls Tutorial](https://tutorial.djangogirls.org/ja/)をベースにブログアプリを作ります。
一緒に手を動かしてエラーを解決するハンズオンを通して、Djangoを使った開発でつまづかない状態を目指します。

2019/04/30
pip installのバージョン指定について修正・Anacondaでの開発環境の有効化について追記しました。

## 前提

- お使いのPCに**Python 3系（3.5以降）**がインストールされていることを前提にしています。
- この記事では**Django2.1系**をインストールします。
- PCのOSはWindowsまたはmacOSを想定しています。
- この記事に書かれているコマンドはすべてコマンドラインで実行してください。（**コマンドプロンプトやターミナルを操作**していきます）
- コマンドライン操作に慣れている場合、**10分程度**で環境構築が完了する見込みです。
- この記事ではpyenvに関しては扱いません。
- 筆者は普段venvを使って環境を分離し、Web開発や機械学習のプログラムを書いています。Anacondaは触ったことがある程度ですので、誤りがありましたらご指摘いただけますと大変助かります。

## 環境を分離するとは

環境を分離してDjangoの開発環境を整えることをオススメします。
一般に、Webアプリの開発では、アプリケーションごとに異なるバージョンのパッケージ[^1]を使うことになります。
**1台のPCで複数のバージョンのDjangoを使い分けることは、環境を分離することで実現できます。**
（環境を分離することで、Django1.11系を使った開発も、Django 2.1系を使った開発も、1台のPCで行えるということです）

環境を分離する方法は、Pythonをインストールした方法で異なると考えています。

- Python公式サイトからインストールした場合：**venvモジュールを使って仮想環境を構築**します
- Anacondaをインストールした場合：**`conda`コマンドを使って環境を分離**します

ハンズオンでは`errorfriends`ディレクトリの中でWebアプリケーションを開発します。
コマンドライン（Windowsではコマンドプロンプト[^2]、macOSではターミナル）を起動して、次のコマンドを1行ずつ実行してください。
（ホームディレクトリ直下に`errorfriends`ディレクトリを作ります）

```console
mkdir errorfriends
cd errorfriends
```

## Python公式サイトからインストールした場合

手順は以下の3つです。

1. 仮想環境を作る
2. 仮想環境を有効にする
3. Djangoをインストールする

### 仮想環境を作る

venvモジュールを使って`errorfriends`ディレクトリの中に仮想環境を作ります。
仮想環境には名前をつけられるので、`myvenv`という名前にします。
Django Girls Tutorialの[Djangoのインストール](https://tutorial.djangogirls.org/ja/django_installation/)をベースに進めます。

- Windowsの場合：`python -m venv myvenv`
- macOSの場合：`python3 -m venv myvenv`[^3]

### 仮想環境を有効にする

仮想環境が作成されたら、次のコマンドで有効にします。

- Windowsの場合：`myvenv\Scripts\activate`
- macOSの場合：`source myvenv/bin/activate`または`. myvenv/bin/activate`

仮想環境を有効にすると、コマンドラインの行の先頭に`(myvenv)`と仮想環境の名前が表示されます。

### Djangoをインストールする

仮想環境を有効にしたあとは、Djangoをインストールしましょう。
パッケージの管理（インストールなど）は`pip`コマンドで行います。
`pip`のバージョンを最新にしてから、Djangoをインストールします。[^4]（1行ずつ実行してください）

**修正**(2019/04/30)
`pip install Django~=2.1`から`pip install Django~=2.1.5`に修正
Django 2.2がリリースされた現在、`pip install Django~=2.1`ではDjango 2.2系が入ってしまうため。
（2.xの最新が入る指定をしていたことに気づき、2.1.xが入るように修正したということです）
`~=`の解釈の参考: https://packaging.python.org/tutorials/installing-packages/#installing-from-pypi

```console
pip install --upgrade pip
pip install Django~=2.1.5
```

Djangoがインストールされたことを確認しましょう。

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

インストールされたDjangoのバージョンが表示されます。（例：2.1.5）

### 開発する際に仮想環境を有効にする方法

コマンドラインを閉じて新しく起動すると仮想環境から抜けてしまいます。
再度有効にするには、**仮想環境を作ったディレクトリに移動し、仮想環境を有効にします**。

Windowsの例（1行ずつ実行してください）

```console
cd errorfriends
myvenv\Scripts\activate
```

macOSの例（1行ずつ実行してください）

```console
cd errorfriends
source myvenv/bin/activate
```

## Anacondaをインストールした場合

手順は以下の3つです。

1. Django開発用の環境を作る
2. Django開発用の環境を有効にする
3. Djangoをインストールする

### Django開発用の環境を作る

`errorfriends`ディレクトリの中で作業を進めていきます。（Python公式サイトからインストールした場合と作業ディレクトリを揃えるために実施します）
python.jpの[Conda コマンド](https://www.python.jp/install/anaconda/conda.html)を参考にしています。

Django開発用環境ではPython3.7系が使えるようにします。
名前は`myvenv`とします。

```console
conda create -n myvenv python=3.7
```
（もし、Python3.7系が使えない場合はPython3.6系を、Python3.6系も使えない場合はPython3.5系を使ってください）

### Django開発用の環境を有効にする

Django開発用環境`myvenv`に切り替えます。

```console
activate myvenv
```

環境を有効にすると、コマンドラインの行の先頭に`(myvenv)`と環境の名前が表示されます。

**追記**(2019/4/30)
`activate myvenv`でエラーが出る場合は`conda activate myvenv`を試してみてください

### Djangoをインストールする

Anacondaでは、パッケージの管理（インストールなど）は`conda`コマンドで行います。[^5]

```console
conda install django=2.1
```

Anacondaが管理しているパッケージの中からDjango2.1系がインストールされます。
もし万が一、AnacondaのバージョンによってはDjango2.1系が見つからないというような場合は`django=2.0`として実行してください。
（**ハンズオンではDjango2.0系以上で動作するコード**を使います）

Djangoがインストールされたことを確認しましょう。

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

インストールされたDjangoのバージョンが表示されます。

## 終わりに

私の考えるDjangoの環境構築手順は次のようになります。

- PythonをPython公式サイトからインストールしている場合、venvモジュールを使って仮想環境を構築し、`pip`でDjangoをインストール
- Anacondaをインストールしている場合、`conda`コマンドを使って環境の分離 & Djangoをインストール

[【エラーは友達】Django基礎ハンズオン](https://elv.connpass.com/event/114810/)では、この記事で構築した環境でブログアプリを開発していきます。

この記事の手順でお気づきのことがある場合は、コメントや[@ftnext](https://twitter.com/ftnext)までお知らせいただけると大変ありがたいです。

## 補足：Pythonのインストール

もしPythonのインストールから必要という方に対して、この記事では2つの方法を紹介します。

1. Python公式サイトからダウンロードしてインストールする
2. Anacondaをインストールする

PythonでWeb開発をしたいという場合、1と仮想環境で十分行えます。
Pythonでデータ分析や機械学習をしたいという場合、2が紹介されることが多い印象です。

python.jpの「[環境構築ガイド](https://www.python.jp/install/install.html)」の手順が詳しいので、そちらを案内します。
リンクの手順を参考にPythonをインストールしてみてください。

### Python公式サイトからインストールする

- Windowsの方はこちら：[Windows 環境のPython](https://www.python.jp/install/windows/index.html)
- macOSの方はこちら：[macOS環境のPython](https://www.python.jp/install/macos/index.html)

### Anacondaをインストールする

Anacondaは、Pythonとデータサイエンスで使うパッケージがまとまったものと理解しています。
Anacondaをインストールすることで、Pythonが使えるようになります。

- Windowsの方はこちら：[Windows 版のインストール](https://www.python.jp/install/anaconda/windows/install_anaconda.html)
- macOSの方はこちら：[MacOS 版のインストール](https://www.python.jp/install/anaconda/macos/install.html)

以上です。

[^1]: Pythonには数多くのパッケージがあります（ライブラリとも呼ばれるようです）。Djangoもパッケージの一つです。パッケージはお手元のPCにインストールすることで開発で使えるようになります。Web開発で使われるパッケージにはDjangoの他に、FlaskやTornadoなどがあります。Pythonには、Web開発向け用途だけでなく、データ分析向け、機械学習向けなど豊富なパッケージがあります。
[^2]: PowerShellでは仮想環境を有効にする際に実行ポリシーの変更というひと手間が必要です。そのため、この記事ではコマンドプロンプトをオススメしています。実行ポリシーの変更については[Python 入門者向けハンズオンテキスト中](https://github.com/pynyumon/pynyumon/blob/master/1_python_basics.md#windows%E3%81%AE%E5%A0%B4%E5%90%88)に詳しい手順があります。
[^3]: macOSでPython公式サイトからPython3系をインストールすると`python3`コマンドがPython3系と結びつきます。`python`コマンドはmacOSが使っているPython2系と結びついています
[^4]: `Django~=2.1`でDjango 2.1系の最新バージョンがインストールされるように設定しています。（2019/01の記事執筆時点では2.1.5が入りました）（**認識違いがありました**。2019/04/30の修正を参照ください）
[^5]: Anacondaでpipコマンドの使用は推奨されていません。もし使う場合は、リスクを考慮した上で**自己責任で**実施してください。「pip でインストールされるパッケージは Anaconda が管理するパッケージではないため、うかつに使用すると不具合が発生する場合があります。（python.jp [Conda コマンド](https://www.python.jp/install/anaconda/conda.html)より引用）」