# PythonのDjangoを使ってWebアプリを実装しHerokuでデプロイしていくステップと勉強法

> 本記事では、PythonのDjangoを使って簡易的なWebアプリケーションを作成し、さらにそれをHeokuというサービスにデプロイしていく方法についてまとめていきます！Djangoは簡単にWebアプリケーションを作成できるフレームワーク…

- URL: https://toukei-lab.com/django
- 公開: 2022.11.29 / 更新: 2025.01.09
- サイト: スタビジ（https://toukei-lab.com）

:::talk{who="umatan"}
本記事では、PythonのDjangoを使って簡易的なWebアプリケーションを作成し、さらにそれをHeokuというサービスにデプロイしていく方法についてまとめていきます！Djangoは簡単にWebアプリケーションを作成できるフレームワークであり、慣れれば誰でも簡単に扱うことが可能です！
:::

こんにちは！

データサイエンティストで最近はDjangoの開発に没頭中のウマたん([@statistics1012](https://twitter.com/statistics1012?lang=ja))です！

Pythonには有名な2大フレームワーク、**[Flask](/python-flask)・[Django](/django-study)**&#x304C;あるのですが、<mark>どちらも非常に使いやすく簡単にPythonでWebアプリケーションを作成することが出来てしまうのです。</mark>

ただ、Webアプリケーションを開発してもそれを実際に世の中に公開するところに苦労することが多いです。

そんな苦労を解消してくれるのが[**Heroku**](https://jp.heroku.com/)というサービス！

この記事では、<mark>PythonのDjangoというWebフレームワークを使ってWebアプリケーションを作成し、それをHerokuにデプロイしていくステップを解説していきます！</mark>

## Djangoの特徴

![Django](/wp-content/uploads/2020/04/django.jpg)（引用元：<https://docs.djangoproject.com/ja/3.0/>）

まずは、簡単にDjangoの特徴について解説していきます。

Djangoは<mark>2005年に開発されたDjangoのWebアプリケーションフレームワークで、デフォルトでWeb開発に必要な機能が一通り入っています。</mark>

Djangoは元々ニュースサイト管理のためにアメリカで開発されたフレームワークで、名前はギタリストから取ったそうです。

大規模サービス開発に向いていて2000企業ほどの企業に利用されています。

:::talk{who="robotan"}
そんなに多くの企業に使用されているんだねー！！
:::

:::talk{who="umatan"}
Djangoが扱えると多くのサービスを開発できるよ！
:::

UGC型のインスタグラムやピンタレストなどに主に利用されています。

![Django利用企業](/wp-content/uploads/2020/04/django-company-min.jpg)(引用元：<https://stackshare.io/Django>)

Djangoのドキュメントは以下です。

:::ref
[Djangoの公式ドキュメント](https://docs.djangoproject.com/ja/3.0/)
:::

ちなみにDjangoより後に開発されたWebフレームワーク**Flask**も簡易的にWebアプリケーションを作成できるのでオススメです。

<https://toukei-lab.com/python-flask>

DjangoとFlaskの違いについては簡単に以下の記事でまとめていますのでよければチェックしてみてください！

<https://toukei-lab.com/flask-django>

## DjangoでWebアプリケーション開発のチュートリアル

![Goal](/wp-content/uploads/2017/11/Goal-amico.png)

それでは早速Djangoを使ってWebアプリを開発していきましょう！

と言っても一旦Hello worldを出力するところまでのチュートリアルです。

Pythonは入っている前提で話を進めていきます。

以下のステップでおこなっていきましょう！

:::warn
OS：MAC\
開発エディター：Visual studio code
:::

### 仮想環境作成

まずは、好きな名前のフォルダを作成しフォルダのディレクトリに遷移しましょう！

そして以下のコマンドをVisual studio code上のターミナルに記載して仮想環境を作っていきます。

```python
python -m venv [環境名]
```

```python
python -m venv myvenv
```

これでmyvenvという仮想環境を作ることが出来ました。

仮想環境は開発するアプリケーションによってPythonのライブラリのバージョンを管理するために作ります。

続いて仮想環境に入っていきます。

以下のコマンドで仮想環境に入ることが出来ます。

```python
source [環境名]/bin/activate
```

```python
source myvenv/bin/activate
```

### 必要なライブラリをインストール

仮想環境に入ったら、requirements.txtというファイルを作成し必要なライブラリをインストールしていきます。

これは、ライブラリを一括でインストールするためのファイルです。

厳密にはrequirements.txtである必要はありませんが、慣習でrequirements.txtが使われることが多くなっています。

必要最低限のライブラリを記載しておきましょう

:::box
Django==3.1.5

django-heroku==0.3.1

gunicorn==20.0.4
:::

以下のように記述することで、記載したライブラリをインストールすることができました。

```python
pip install -r requirements.txt
```

ちなみに以下のように記述することで現在の環境のライブラリを一括でrequirements.txtに記述して保存することができます。

```python
pip freeze > requirements.txt
```

普段使っている環境から新しい環境に同様のライブラリを適用される場合はこのように記述するとよいでしょう。

### プロジェクトの作成

さて、ここから実際にDjangoでWebアプリ実装をおこなっていきます！

まずDjangoのプロジェクトを作成していきます。

mysiteという名称で作っていきましょう！

```python
django-admin startproject [プロジェクト名] .
```

```python
django-admin startproject mysite .
```

これにより以下のようにMysiteディレクトリが出来ます。

![Django](/wp-content/uploads/2021/02/84db38f5462338b36e00ec0c2f440832.png)

続いて、settings.py以下の部分を以下のように変更しておきましょう！

【変更前】

```python
LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'
```

【変更後】

```python
LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'
```

さて、それでは以下のようにサーバーを起動させてみましょう！

```python
python manage.py runserver
```

:::box
Starting development server at http\://127.0.0.1\:8000/
:::

ターミナルに出力されたURLを開き以下のように表示されたらひとまず成功です。

![Django　チュートリアル](/wp-content/uploads/2021/02/3570efdfb4656ed360a6391ac951f8f1.jpg)

サーバーの起動はCtrl+Cで停止で止めることが可能です。

### Appを作成

プロジェクトが立ち上がったのが確認できたのでアプリケーションを作成していきましょう！

:::talk{who="robotan"}
プロジェクトとアプリケーションの違いは以下って？？
:::

プロジェクトとアプリケーションの違いは以下です。

> プロジェクトとアプリの違いは何でしょうか？ アプリとは、ウェブログシステム、公的記録のデータベース、小規模な投票アプリなど、何かを行う Web アプリケーションです。プロジェクトは、特定のウェブサイトの構成とアプリのコレクションです。プロジェクトには複数のアプリを含めることができます。 アプリは複数のプロジェクトに存在できます。\
> （引用元：[Django公式サイト](https://docs.djangoproject.com/ja/3.1/intro/tutorial01/)）

複数のアプリケーションを束ねる存在がプロジェクトであるイメージです。

以下のコマンドでアプリケーションを作成していきます。

```python
python manage.py startapp [アプリケーション名]
```

appという名前で作成しておきましょう！

```python
python manage.py startapp app
```

appのディレクトリが出来ているはずです。

続いて、アプリケーション名をsettings.pyのINSTALLED_APPSに記載しましょう！

今回はappという名前のアプリを作成したので、以下のように記述します。

```python
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app',
]
```

続いてデータベースのセットアップを行っていきます。

```python
python manage.py migrate
```

これによりデータベースが作成されます。

migrationsというフォルダが作成されているかと思います。

### urls.pyを変更

Mysiteのurls.pyを開いて一部設定を変更します。

【変更前】

```python
from django.contrib import admin
from django.urls import path

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

【変更後】

```python
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include("app.urls")),
]
```

この部分の意味はトップドメインに遷移した場合はappフォルダのurls.pyファイルを参照してねという意味です。

さて続いて、その参照元となっているapp/urls.pyを作成していきましょう。

app/urls.pyはデフォルトでは作成されていないので、自分で作ります。

```python
from django.urls import path
from app import views

urlpatterns = [
    path('', views.IndexView.as_view(), name='index'),
]
```

### views.pyを修正

views.pyはappのファイルの中でユーザーのコールに対してどのテンプレートを出すかなど司令塔の役割をします。

サッカーで言うミッドフィルダーみたいな役割のファイルです。

ここには、以下のように記述します。

```python
from django.views.generic import TemplateView

class IndexView(TemplateView):
    template_name = 'app/index.html'
```

Djangoには簡単に表示をしてくれるテンプレートが用意されており、今回はその中からTemplateViewを使います。

ここでは、後ほど作成するapp/index.htmlを呼んでいます。

### templatesフォルダにhtmlファイルを作成

templatesフォルダを作成し、そのさらに配下にappというフォルダを作成しましょう！

そしてその下にindex.htmlというファイルを作成します。

すなわちディレクトリ構造は以下のようになっています。

:::box
app/templates/app/index.html
:::

この時アプリケーション名appと一致させたディレクトリ名にしましょう！

:::talk{who="robotan"}
なんでこんな階層になるのー？？
:::

:::talk{who="umatan"}
これはテンプレートのミスマッチをなくすためなんだ！
:::

> Django は、名前がマッチした最初のテンプレートを使用するので、もし *異なる* アプリケーションの中に同じ名前のテンプレートがあった場合、Django はそれらを区別することができません。そのため、Django に正しいテンプレートを教えてあげる必要がありますが、一番簡単な方法は、それらに *名前空間を与える* ことです。アプリケーションと同じ名前をつけた *もう一つの* ディレクトリの中にテンプレートを置いたのは、そういうわけなのです。\
> （引用元：[Django公式サイト](https://docs.djangoproject.com/ja/3.1/intro/tutorial01/)）

index.htmlには表示したいhtmlを記載してあげましょう！

```text
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>app</title>
</head>
<body>
    <h1>Hello World!</h1>
</body>
</html>
```

これで本当に基本的なアプリケーションが作成できました。

改めて

```python
python manage.py runserver
```

をしてみましょう！

Hello worldがしっかり表示されたら成功です。

ここまで出来れば、後はアプリケーションに肉付けをしていくだけです。

## Djangoで作ったWebアプリケーションをHerokuにデプロイ

![Coding](/wp-content/uploads/2017/11/Coding-amico.png)

さて、続いて先ほどのアプリケーションはローカル環境で実装しました。

このアプリケーションを一般にデプロイするためにHerokuというサービスを利用していきます。

Herokuでのデプロイ方法は詳しくは以下の記事も参考にしてみてください。

<https://toukei-lab.com/heroku-python>

他にもアプリケーションを外部公開する方法にngrokを使う方法もあります。

以下の記事で解説しているので、チェックしてみて下さい。

<https://toukei-lab.com/ngrok>

### ファイルの準備とsettings.pyの修正

必要なファイルは以下です。

:::memo
Procfile\
runtime.txt
:::

Procfileには以下のように記述します。

```python
web: gunicorn [プロジェクト名].wsgi
```

```python
web: gunicorn mysite.wsgi
```

プロジェクト名を記載してgunicornを動かしましょう！

これはDjangoをローカルで起動させる時にmanage.py runserverの役割をやってもらうイメージです。

続いてruntime.txtには以下のように記述します。

```python
python-3.8.6
```

現在使っているPythonのバージョンをここに記載するようにしましょう！

またsettings.pyに以下のように追記しましょう！

```python
import django_heroku
django_heroku.settings(locals())
```

:::warn
settings.pyの最下部に記載しておかないとデプロイ失敗する可能性があります。
:::

### herokuにデプロイ

それではここからherokuにデプロイしていきます。

当たり前ですが、herokuのアカウント作成とインストールが必要になります。

[herokuサイト](https://jp.heroku.com/)に移動し、アカウントを作成してください

![heroku](/wp-content/uploads/2019/12/heroku2-min-scaled.jpg)

アカウントを作成し、ログインした後は以下のコマンドでインストール（Mac）

```text
＄brew tap heroku/brew && brew install heroku
```

Windowsの場合は[こちら](https://devcenter.heroku.com/articles/heroku-cli#download-and-install)からダウンロードしてください。

さて、ターミナル上で以下のコマンドを打つことでherokuにログインすることが出来ます。

```python
heroku login
```

キーを押してしばらくするとherokuのブラウザが開きます。

![heroku](/wp-content/uploads/2019/12/heroku-min-scaled.jpg)

ブラウザ上からログインしましょう！

さてローカルで実装したファイルをherokuの環境にコミットしていきますよー！

まずherokuのアプリケーションを作成していきます。

```python
heroku create [アプリ名]
```

```python
heroku create django-test1111
```

今回はdjango-test1111という名前のアプリケーションにしました。

続いて以下のコマンドでローカルで実装したファイルをコミットしていきましょう！

```python
git add .

git commit -m "1"
```

gitを理解しなくてもHerokuデプロイはできますが、出来れば理解しておきたいので興味のある方は以下の記事を読んでみて下さい。

<https://toukei-lab.com/git-learning>

さらに最後に以下のコマンドでherokuへのデプロイが完了します。

```python
git push heroku master
```

masterブランチではなくて別のブランチを切って作業している場合はmasterの代わりにそのブランチ名を入れてください。

少し時間がかかりますが、HerokuアプリのURLが表示されると思うのでそちらをクリックしてアプリを開きましょう！

![Django　チュートリアル](/wp-content/uploads/2021/02/d59f416b3397c6fc24e4f301ec65376e-e1612529352102.png)

Hello worldと表示されたら成功です。

:::warn
collectstaticが失敗しているよーと怒られることがあります。

もしcollectstaticが必要ないのであれば、Herokuのsettings＞Config VarsからDISABLE_COLLECTSTATIC=1を環境変数として設定してあげましょう！

また、リモートレポジトリにherokuがないよーと怒られることがあります。

そんな時は以下のようなコマンドでherokuを追加してあげましょう！

```text
git remote add heroku https://git.heroku.com/[アプリケーション名].git

git remote add heroku https://git.heroku.com/django-test1111.git
```
:::

## Djangoを勉強する方法

![pc python](/wp-content/uploads/2019/08/Work-time-amico-min.png)

ここまでで本当に初歩の初歩であるHello worldを出力するまでですが、<mark>DjangoによるWebアプリケーションを作成してHerokuによってデプロイする方法について見てきました。</mark>

この流れが一旦把握できれば、後は肉付けしていくだけで複雑なWebアプリケーションも作成可能です。

ここからより複雑なWebアプリケーションをDjangoを勉強する方法について紹介していきます。

### UdemyのDjangoコース

![Udemy コース](/wp-content/uploads/2020/03/udemy-course-min.jpg)

<table class="table">
<tbody>
<tr>
<th>【オススメ度】</th>
<td><span class="stars" role="img" aria-label="5点中5点" data-value="5"></span></td>
</tr>
<tr>
<th>【レベル】</th>
<td><span>初級～中級</span></td>
</tr>
<tr>
<th>【価格】</th>
<td><span>1200円〜</span></td>
</tr>
</tbody>
</table>

Djangoの勉強に是非活用してほしいのが[Udemy](https://www.udemy.com/courses%2Fsearch%2F%3Fsrc%3Dukw%26q%3DDjango)！

Udemyは世界最大の教育プラットフォームで世界中の様々なプロフェッショナルが良質なコンテンツを公開しており、それを買い切りで**1200円ほど**から受講できるサービスです。

<mark>購入後も30日間返金無料ですので安心して講座を購入することが出来ます。</mark>

特に以下のコースがオススメです！

#### [【実践】ビジネスケースとつなげてPythonで出来ること5つを学べる3日間集中コース](https://www.udemy.com/course/python-can/?referralCode=2CBAD21040FF57199084)

[![Udemy python](/wp-content/uploads/2020/04/Udemy-me2-min-1024x554.jpg)](https://www.udemy.com/course/python-can/?referralCode=2CBAD21040FF57199084)

<table class="table">
<tbody>
<tr>
<th>【オススメ度】</th>
<td><span class="stars" role="img" aria-label="5点中5点" data-value="5"></span></td>
</tr>
<tr>
<th>【講師】</th>
<td>僕自身！今なら購入時に「NZWCLGF4BTZENY6E」という講師クーポンコードを入れると90%オフ以上の割引価格になりますのでぜひご受講ください！</td>
</tr>
<tr>
<th>【時間】</th>
<td><span>3.5時間</span></td>
</tr>
<tr>
<th>【レベル】</th>
<td><span>初級～中級</span></td>
</tr>
</tbody>
</table>

手前味噌ですが、<mark>Pythonでアプリを構築するのにオススメなコースを僕自身が出しています！</mark>

Pythonで出来ることのうち以下の5つを網羅して学んでいきます。

:::box
**・データ集計・加工・描画**\
**・機械学習を使ったモデル構築**\
**・Webスクレイピング**\
**・APIの利用**\
**・Webアプリケーション開発**
:::

データ集計・加工・描画と機械学習モデル構築に関しては[Kaggle](/kaggle)というデータ分析コンペティションのWalmartの小売データを扱いながら学んでいきます。

[Webスクレイピング](/python-scraping)とAPI利用と[Webアプリケーション開発](/python-webapp)に関しては、楽天の在庫情報を取得してSlackに自動で通知するWebアプリケーションを作成して学んでいきます。

Pythonで何ができるのか知りたい！という方には一番はじめにまず受けていただきたいコースです！

Twitterアカウント([@statistics1012](https://twitter.com/statistics1012?lang=ja))にメンションいただければ1500円になる講師クーポンを発行いたします！

＼30日以内なら返金無料／

::button[このコースを見てみる]{href="https://www.udemy.com/course/python-can/?referralCode=2CBAD21040FF57199084"}

### スタビジアカデミーのDjangoコース

なかなか自分一人で進める自信のない人、モチベーションが続かない人はぜひ当メディアが運営する「[スタビジアカデミー](https://toukei-lab.com/achademy/)」という教育サービスを検討してみてください！

:::box
**AIデータサイエンス特化スクール「スタアカ」**

![スタアカトップ](/wp-content/uploads/2021/11/2bc9f22d0f8dfe24080b83884b7a5ec6-1024x576.jpg)
:::

<table class="table">
<tbody>
<tr>
<th>【価格】</th>
<td>ライトプラン：1280円/月<br>
プレミアムプラン：149,800円</td>
</tr>
<tr>
<th>【オススメ度】</th>
<td><span class="stars" role="img" aria-label="5点中5点" data-value="5"></span></td>
</tr>
<tr>
<th>【サポート体制】</th>
<td><span class="stars" role="img" aria-label="5点中4点" data-value="4"></span></td>
</tr>
<tr>
<th>【受講形式】</th>
<td>オンライン形式</td>
</tr>
<tr>
<th>【学習範囲】</th>
<td>データサイエンスを網羅的に学ぶ<br>
実践的なビジネスフレームワークを学ぶ<br>
SQLとPythonを組みあわせて実データを使った様々なワークを行う<br>
マーケティングの実行プラン策定<br>
マーケティングとデータ分析の掛け合わせで集客マネタイズ</td>
</tr>
</tbody>
</table>

ここではAIやデータサイエンスにまつわる様々なコースを展開していて、Djangoを使ったアプリ開発のコースもございます！

:::box
[スタアカ：DjangoでAIアプリを作ってみよう](https://toukei-lab.com/achademy/?sfwd-courses=django-ai)

[![スタアカDjango](/wp-content/uploads/2022/11/cb752139aefe3278a41f8e039ca612f5.jpg)](https://toukei-lab.com/achademy/?sfwd-courses=django-ai)
:::

このコースではDjangoで画像生成のアプリを構築していきます。OpenAIの[DALL･E](/dalle)のAPIを使っていきますよー！

独学で学ぶライトなプランと現役データサイエンティストがメンターとして付きながら質問もし放題のプランがあるので挫折せず進めることができます！

ご受講お待ちしております！

### PyQのDjango講座

[![PyQ　トップページ](/wp-content/uploads/2019/09/python-title.jpg)](https://af.moshimo.com/af/c/click?a_id=1419635\&p_id=1166\&pc_id=1793\&pl_id=20541\&guid=ON)

公式サイト：[https://pyq.jp](https://af.moshimo.com/af/c/click?a_id=1419635\&p_id=1166\&pc_id=1793\&pl_id=20541\&guid=ON)

<table class="table">
<tbody>
<tr>
<th>【オススメ度】</th>
<td><span class="stars" role="img" aria-label="5点中4点" data-value="4"></span></td>
</tr>
<tr>
<th>【レベル】</th>
<td>初級</td>
</tr>
<tr>
<th>【価格】</th>
<td>3040/月〜</td>
</tr>
</tbody>
</table>

[PyQ](https://af.moshimo.com/af/c/click?a_id=1419635\&p_id=1166\&pc_id=1793\&pl_id=20541\&guid=ON)はPythonに特化したサービスです。

完全オンライン学習サービスで、<mark>定額制で全ての講座を受講することができます。</mark>

実際に手を動かすことをかなり重視しているので、<mark>楽しくモチベーションを保ちながら進めることが可能</mark>です。

網羅的にPythonのコースがあるので、もちろんDjangoのコースもしっかり用意されています。

以下の記事で[PyQ](https://af.moshimo.com/af/c/click?a_id=1419635\&p_id=1166\&pc_id=1793\&pl_id=20541\&guid=ON)の体験を基に詳しくレビューしています。

<https://toukei-lab.com/pyq-review>

以下の記事でDjangoの学習にオススメなサイトを学習の際の注意点についてまとめていますので是非目を通しておいてください！

<https://toukei-lab.com/django-study>

:::talk{who="umatan"}
自分に合った勉強方法を選ぼう！
:::

## Djangoで実装したWebアプリをHerokuで実装　まとめ

最後までご覧いただきありがとうございます！

Djangoで実装したWebアプリをHerokuで実装することで、<mark>Webアプリケーションを0から作り世の中に発信していく道筋</mark>が見えてきましたね！

:::talk{who="robotan"}
Djangoをなんとなーく理解することができたよ！
:::

:::talk{who="umatan"}
ここからしっかりDjangoを学んで自分のものにしていこう！
:::

ぜひさらに深くDjangoを勉強して自分の作りたいWebアプリケーションを作成していきましょう！

以下の記事でPythonでのWebアプリ開発についてFlaskでの実装とあわせてまとめています！

<https://toukei-lab.com/python-webapp>

最近ではPythonのWebアプリのフレームワークで「[Streamlit](/streamlit)」や「[Gradio](/gradio)」がデータサイエンスの分野でよく利用されているのでチェックしてみて下さい！

:::related
・[StreamlitでWebアプリを開発してみよう！](/streamlit)\
・[GradioでWebアプリを開発してみよう！](/gradio)\
・[PythonのWebフレームワーク比較](/python_web_framework)
:::

以下の記事でPythonの勉強法についてまとめています！

<https://toukei-lab.com/python-learn>

また、以下の記事でPythonのスクールについてまとめています！

<https://toukei-lab.com/python-school>