Python

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

Django heroku
記事内に商品プロモーションを含む場合があります
ウマたん
ウマたん
本記事では、PythonのDjangoを使って簡易的なWebアプリケーションを作成し、さらにそれをHeokuというサービスにデプロイしていく方法についてまとめていきます!Djangoは簡単にWebアプリケーションを作成できるフレームワークであり、慣れれば誰でも簡単に扱うことが可能です!

こんにちは!

データサイエンティストで最近はDjangoの開発に没頭中のウマたん(@statistics1012)です!

Pythonには有名な2大フレームワーク、FlaskDjangoがあるのですが、どちらも非常に使いやすく簡単にPythonでWebアプリケーションを作成することが出来てしまうのです。

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

そんな苦労を解消してくれるのがHerokuというサービス!

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

Djangoの特徴

Django(引用元:https://docs.djangoproject.com/ja/3.0/

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

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

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

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

ロボたん
ロボたん
そんなに多くの企業に使用されているんだねー!!
ウマたん
ウマたん
Djangoが扱えると多くのサービスを開発できるよ!

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

Django利用企業(引用元:https://stackshare.io/Django)

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

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

macとsurface
Flaskでできることを確認しながら簡単なWebアプリの実例を作ってみよう!当サイト【スタビジ】の本記事では、Pythonの軽量WebアプリケーションフレームワークであるFlaskを使って簡単なWebアプリケーションを作成していきたいと思います。Pythonを開発言語としても使えるようになると、幅が広がりますよー!...

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

Flask Django
Flask vs Django!PythonのWebアプリケーションフレームワークを徹底比較!当サイト【スタビジ】の本記事では、PythonのWebアプリケーションフレームワークである「Flask」と「Django」の違いを徹底的に比較していきます!なんとなーく分かっているようで分からない2つのフレームワークの違いをこの機会にしっかりおさえておきましょう!...

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

Goal

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

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

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

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

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

仮想環境作成

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

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

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

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

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

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

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

source [環境名]/bin/activate
source myvenv/bin/activate

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

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

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

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

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

Django==3.1.5
django-heroku==0.3.1
gunicorn==20.0.4

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

pip install -r requirements.txt

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

pip freeze > requirements.txt

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

プロジェクトの作成

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

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

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

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

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

Django

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

【変更前】

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

【変更後】

LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'

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

python manage.py runserver

 

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

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

Django チュートリアル

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

Appを作成

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

ロボたん
ロボたん
プロジェクトとアプリケーションの違いは以下って??

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

プロジェクトとアプリの違いは何でしょうか? アプリとは、ウェブログシステム、公的記録のデータベース、小規模な投票アプリなど、何かを行う Web アプリケーションです。プロジェクトは、特定のウェブサイトの構成とアプリのコレクションです。プロジェクトには複数のアプリを含めることができます。 アプリは複数のプロジェクトに存在できます。
(引用元:Django公式サイト

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

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

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

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

python manage.py startapp app

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

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

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

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

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

python manage.py migrate

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

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

urls.pyを変更

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

【変更前】

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

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

【変更後】

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はデフォルトでは作成されていないので、自分で作ります。

from django.urls import path
from app import views

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

views.pyを修正

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

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

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

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というファイルを作成します。

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

app/templates/app/index.html

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

ロボたん
ロボたん
なんでこんな階層になるのー??
ウマたん
ウマたん
これはテンプレートのミスマッチをなくすためなんだ!

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

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

<!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 manage.py runserver

をしてみましょう!

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

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

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

Coding

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

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

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

heroku
herokuを使ってPythonのflaskで作ったアプリケーションをデプロイする方法と注意点!当サイト【スタビジ】の本記事では、PythonのWebフレームワークであるFlaskを使って作成したWebアプリケーションをインターネット上に公開するためにHerokuというサービスを使ってデプロイしていきます。Herokuを使えば簡単にWebアプリケーションを公開することが可能なんです。...

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

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

ngrok
ngrokの使い方解説!Pythonで作ったアプリを外部公開してみよう!当サイト【スタビジ】の本記事では、ngrokの使い方を解説していきます!ngrokを使うとローカル環境で作成したWebアプリをグローバルに公開できる便利ツールです!ぜひ使い方をマスターしていきましょう!...

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

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

Procfile
runtime.txt

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

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

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

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

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

python-3.8.6

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

 

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

import django_heroku
django_heroku.settings(locals())

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

herokuにデプロイ

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

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

herokuサイトに移動し、アカウントを作成してください

heroku

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

$brew tap heroku/brew && brew install heroku

Windowsの場合はこちらからダウンロードしてください。

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

heroku login

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

heroku

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

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

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

heroku create [アプリ名]
heroku create django-test1111

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

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

git add .

git commit -m "1"

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

Git 勉強
【入門】Gitの基本や勉強方法についてまとめておく!当サイト【スタビジ】の本記事では、Gitの基本と勉強方法についてまとめていきます!Gitはコードやドキュメントのバージョンを管理する上で非常に重要なツールです。Gitについて理解しておくことで開発効率が大きく変わるのでぜひおさえておきましょう!...

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

git push heroku master

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

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

Django チュートリアル

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

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

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

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

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

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

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

Djangoを勉強する方法

pc python

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

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

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

UdemyのDjangoコース

Udemy コース
【オススメ度】
【レベル】初級~中級
【価格】1200円〜

Djangoの勉強に是非活用してほしいのがUdemy

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

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

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

【実践】ビジネスケースとつなげてPythonで出来ること5つを学べる3日間集中コース

Udemy python
【オススメ度】
【講師】僕自身!今なら購入時に「66FLEHE87LQ6」という講師クーポンコードを入れると94%OFFになりますのでぜひご受講ください!
【時間】3.5時間
【レベル】初級~中級

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

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

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

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

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

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

Twitterアカウント(@statistics1012)にメンションいただければ1500円になる講師クーポンを発行いたします!

\30日以内なら返金無料/

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

なかなか自分一人で進める自信のない人、モチベーションが続かない人はぜひ当メディアが運営する「スタビジアカデミー」という教育サービスを検討してみてください!

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

スタアカトップ
【価格】ライトプラン:1280円/月
プレミアムプラン:149,800円
【オススメ度】
【サポート体制】
【受講形式】オンライン形式
【学習範囲】データサイエンスを網羅的に学ぶ
実践的なビジネスフレームワークを学ぶ
SQLとPythonを組みあわせて実データを使った様々なワークを行う
マーケティングの実行プラン策定
マーケティングとデータ分析の掛け合わせで集客マネタイズ

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

このコースではDjangoで画像生成のアプリを構築していきます。OpenAIのDALL・EのAPIを使っていきますよー!

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

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

PyQのDjango講座

PyQ トップページ

公式サイト:https://pyq.jp

【オススメ度】
【レベル】初級
【価格】3040/月〜

PyQはPythonに特化したサービスです。

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

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

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

以下の記事でPyQの体験を基に詳しくレビューしています。

【体験談】PyQの評判は?3か月本気でPythonを勉強してみたので徹底レビュー!PyQはPythonを学ぶ上で非常にオススメで評判の高いサービスです。ただ、他のサービスとの違いが分かりにくいのも事実。そこで当サイト【スタビジ】では、実際にPyQを3か月体験した僕がPyQのメリット・デメリット・評判について徹底的にレビューしていきます!...

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

Django 学習
Djangoの学習におすすめのサイトと勉強を進める注意点 こんにちは! データサイエンティストのウマたん(@statistics1012)です! Pythonを使ってWebア...
ウマたん
ウマたん
自分に合った勉強方法を選ぼう!

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

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

ロボたん
ロボたん
Djangoをなんとなーく理解することができたよ!
ウマたん
ウマたん
ここからしっかりDjangoを学んで自分のものにしていこう!

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

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

Webアプリ開発
【入門初心者向け】PythonでWebアプリを作ってみた!開発方法徹底解説!当サイト【スタビジ】の本記事では、PythonのWebアプリケーションフレームワークを用いてWebアプリを開発していく方法を徹底解説していきます。実際にDjangoでの実装とFlaskでの実装をおこなっていったあと、勉強法についても見ていきましょう!...

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

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

Python独学勉強法
【Python独学勉強法】Python入門を3ヶ月で習得できる学習ロードマップ当サイト【スタビジ】の本記事では、過去僕自身がPythonを独学を駆使しながら習得した経験をもとにPythonを効率よく勉強する方法を具体的なコード付き実装例と合わせてまとめていきます。Pythonはできることが幅広いので自分のやりたいことを明確にして勉強法を選ぶことが大事です。...

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

Python おすすめ スクール
【2022年最新】Python学習に最適なオンラインスクールおすすめ6選当サイト【スタビジ】の本記事では、実際にスクールに通ったりWebサービスを利用したりしながらPythonを習得した僕がおすすめするオンラインメインのスクールを紹介していきます。正直Python学習スクールは乱立し過ぎていてどれを選べばよいのか難しい!そんな人にぜひ読んで欲しいです...
スタビジアカデミーでデータサイエンスをさらに深く学ぼう!

スタアカサービスバナースタビジのコンテンツをさらに深堀りしたコンテンツが動画と一緒に学べるスクールです。

プレミアムプランでは私がマンツーマンで伴走させていただきます!ご受講お待ちしております!

スタビジアカデミーはこちら