【Django入門】DjangoアプリをWeb開発環境で開発、公開するまでの手順-ステップ1(GitHub Codespaces、PaizaCloud)

※ 当サイトではアフィリエイト広告を利用しています。リンクは広告リンクも含みます。

この記事は約15分で読めます。

無料のWeb開発環境(PaizaCloudやGitHub Codespaces)でDjangoアプリを開発する簡単な手順になります。
この記事ではDjangoのプログラムの内容の詳しい解説はありません。
Djangoアプリをサーバーでデプロイ(公開)するために必要な知識と手順を簡単かつ詳細に解説していきます。
簡単なサンプルプログラムを用意してありますので、それを動かします。

私は学習を始めて日が浅い頃にこの記事を書き始めましたが、初心者目線の解説になっているのでわかりやすいと思います。(その後、経験を積んだので加筆・修正しています。)

初心者が開発環境を構築し、本番環境へデプロイできるようになることを目的にしています。(※Herokuに関しては2022/11月末から有料化したため、現在はRenderやVPS等の代替サービスをおすすめしています。)

また静的ファイルについて重点的に書いていますので
そこではまっている人にも参考になると思います。
完成品お名前.comVPSにデプロイ
完成品Renderデプロイ(表示するまで数分かかることがあります。毎月20日~月末は停止します。)
2回に分けてます。続きはこちら。

【Django入門】DjangoアプリをWeb開発環境で開発、公開するまでの手順-ステップ2(GitHub、Git、Render)
PaizaCloudまたはGitHub CodespacesからGitHubを経由してRenderへデプロイする方法です。GitとGitHubに関してはRenderへデプロイするための「コードの転送手段」として利用しますので、それぞれの詳し…

Herokuは無料プランがなくなってしまったので今はこちら(Renderなど)にデプロイしています。

Djangoの簡単なアプリ(Hello World!)作成からデプロイまでRenderで実践できます。

【Django入門】Render(無料プラン)のQuickstartsをWindows11でやってみる
RenderのQuickstarts/DjangoをpipとWindows11でやってみました。初心者は公式が書いてるやり方以外は、やらない方がいいと思います。しかし今回、私の環境では公式通りの手順でできないため、ご紹介するような形になって…

パソコンに開発環境(VS CodeやDocker等)を構築して開発することもできますが、最初にPaizaCloudやGitHub CodespacesなどのWeb環境でやってよかったのは、「開発環境構築の失敗」と「プログラムのバグ」の切り分けが容易な点です。開発の要領がわかるようになるので、自分のパソコンで開発環境構築するのも容易になります。何が必要で、なぜ必要なのかが理解できるようになります。

ローカル環境でやりたい場合は、こちら↓を参考にしてください。

【Docker】Windows11でプログラミング環境構築(Python、Django、Vue)
パソコン買ったのでプログラミング環境を整えました。その様子です。Python、Django、Vueの環境を設定していきます。Docker導入でハマった点と解決策をご紹介します。追記(2023/11):最近、Docker DesktopがWi…

2024年からは有料のVPSにもデプロイしています。

お名前ドットコムVPSへ移行への道

2024/4お名前.comのレンタルサーバーからVPSへ移行したときの記録になります。

広告
MINISFORUM日本公式ストア

Djangoを動かす環境比較

ローカル環境、PaizaCloud、GitHub Codespaces、Heroku/Renderを比較すると以下のようになります。

ローカル環境(Dockerなど)PaizaCloudGitHub CodespacesHeroku / Render等
開発環境構築多少難しい簡単非常に簡単公開のみ(開発環境なし)
サービスの一般公開できない有料一時プレビュー可能有料 / Renderは無料枠あり
コードの保存できる無料だと1日自動(GitHub連携)
パソコンスペックある程度必要関係ない関係ない関係ない
無料枠の特徴制限なし24時間でサーバー停止月120コア時間無料Herokuは有料
Renderは制限あり

無料、簡単、低スペックパソコンでもOKの観点から、まずはPaizaCloudGitHub Codespacesなどのクラウド開発環境で開発し、Git/GitHubを経由して公開する方法をおすすめします。
PaizaCloudの無料版は放置するとすぐ止まる欠点がありますが、GitHub
かなり使いづらいです。止まった時はこちらを参考にしてください。(土日、止まりっぱしの時がたまにあります。)

Codespacesならブラウザ上で本格的なVS Codeが立ち上がり、快適に開発できます。

使用するもの
無料登録:PaizaCloudまたはGitHubアカウント、Render等(公開用)
無料ダウンロード:Git(ローカル連携時)

大まかな流れです。

  1. PaizaCloud または GitHub Codespaces で開発・動作確認
  2. コードをGitHubに保存
  3. 公開用サーバー(Renderなど)へデプロイして公開

開発環境の構築(選択)

PaizaCloud、またはGitHub Codespacesのいずれか好きな方を選んで環境を構築します。こちら↓をご覧ください。

Pythonで作ったものを公開(デプロイ)、Webサービスの基礎すべて無料でやってみた!【Django】
PythonでWebサービスを作り無料サーバーにアップするところまで紹介します。パソコンにインストすることなく無料のWEBサービスのみ使用大手でよくある無料だけどクレジットカード登録しないとアカウントができないとかもない。Django(We…

無料登録と数クリックだけで完了します。

プロジェクト、アプリ作成、settings.py変更

ここからのコマンドや操作は、PaizaCloudでもGitHub Codespacesでも基本的に共通です。
コードをはりつけるときは「プレーンテキストで貼り付け」にしないとうまく動きません。

プロジェクト作成

ターミナル(PaizaCloudのターミナル、またはCodespacesのターミナル)で以下を入力します。

# Codespacesの場合、Djangoのインストールが必要です。PaizaCloudの場合、不要
pip install django
# hajimete_pjという名前でプロジェクトの作成
# 最後の半角スペース+.ピリオドは忘れないようにしてください。それがないとフォルダが1個余分に作られデプロイするときに困ります。
django-admin startproject hajimete_pj .

# 上記ピリオドを付けなかったときは、hajimete_pjディレクトリへ移動
cd hajimete_pj

PaizaCloudの場合の表示(上記ピリオドを付けなかったためにこうなってます。)

アプリ作成

# hajimete_appという名前でアプリ作成
python manage.py startapp hajimete_app

settings.py変更

エディタで `hajimete_pj/settings.py` を開きます。(上記ピリオドつけなかったとき `hajimete_pj/hajimete_pj/settings.py` )

以下のように2か所変更します。
・ホストを許可する
・アプリを追加
# ALLOWED_HOSTSの変更(開発環境やクラウド環境からのアクセスを許可)
ALLOWED_HOSTS = ['*']
# (settings.pyのDEBUG = Trueのときは[]でもエラーにならない場合がありますが、Falseにすると[]のままだとエラーになります。)

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'hajimete_app.apps.HajimeteAppConfig',      
]

補足説明1
'hajimete_app' だけでも動きますが、Djangoの公式チュートリアルで hajimete_app/apps.py にある class HajimeteAppConfig(AppConfig): のクラス名を追加する形式となっていたため、上記のように記述しています。

今後ファイルを変更したら各Window左上の保存をクリック。(Ctrl+Sでも保存できます。)
PaizaCloudの場合、
車両通行止めと同じマークが出ている場合は保存完了してます。
ディレクトリを追加したのに表示されていない場合は▼をクリックして1回閉じ▶をクリックすると出てきます。

今のディレクトリの状態はこうなってるはずです。上記ピリオドを付けなかったので、このようにhajimete_app/hajimete_appという表示になっています。

INSTALLED_APPS に追加するものは「アプリ」です。
アプリとは python manage.py startapp で作成されたディレクトリ全体を指します。
自分で作った自作Pythonファイル(例: jisaku.py)を追加したい場合、ここに書く必要はありません。
そういったファイルはアプリディレクトリ(hajimete_app)の下に配置し、views.py などから from . import jisaku という形で呼び出して使います。

関数の呼び出し方は、こちらの記事が参考になります。
Pythonで”TypeError: ‘module’ object is not callable”エラー

サンプルコード

プロジェクト(hajimete_pj)の urls.py を変更します。

hajimete_pj/urls.py:

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

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

アプリ(hajimete_app)のurls.pyは最初ないので
hajimete_app内に新規ファイルurls.pyを作成します。
中身を以下にします。
hajimete_app/urls.py:

from django.urls import path
from . import views

app_name = "hajimete_app"
urlpatterns = [ 
    path('', views.HajimeteView.as_view(), name="index"),
]

views.pyを変更します。
hajimete_app/views.py:

from django.shortcuts import render
from django.views import View

class HajimeteView(View):
    def get(self, request, *args, **kwargs):
        return render(request, "hajimete_app/index.html")

HTMLテンプレートを作成します。

  1. hajimete_app の下に templates ディレクトリを作成
  2. templates の下に hajimete_app ディレクトリを作成
  3. templates/hajimete_app の下に index.html ファイルを作成

中身を以下にします。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>初めてのDjango</title>
</head>
<body>
    <h2>初めてのDjango</h2>
</body>
</html>

動作確認

ターミナルで以下を実行します。

python manage.py runserver
  • PaizaCloudの場合: 右側の「8000」ボタンをクリックすると画面が表示されます。
  • GitHub Codespacesの場合: 画面右下に「ポート 8000 で動作するアプリケーション…」というポップアップが出るので「ブラウザで開く」をクリックします(または「ポート」タブから8000番の地球アイコンをクリック)。
  • ローカル環境の場合: http://127.0.0.1:8000/ にアクセスします。

「初めてのDjango」と表示されれば成功です!
確認できたらターミナルでCTRL+Cで停止してください。

目次へ

静的ファイルとは

次にDjangoを使う上で重要となる「静的ファイル」について体験します。

静的ファイルとはCSS、画像、JavaScriptファイルのことです。
静的ファイルは static というディレクトリの下に入れなければいけません。
なぜかというと、Djangoが動いているメインサーバーから静的ファイルを直接配信すると、負担が大きくなって全体の処理スピードが落ちてしまうためです。そのため、本番環境では静的ファイルだけを集めて別のWebサーバーや配信サービスから送る仕組みになっています。
そのため、アプリを作るときは static ディレクトリの下に静的ファイルを配置するルールになっています。

それでは静的ファイル(画像、CSS、JavaScript)を追加したサンプルコードを作ります。

css、img、js

hajimete_app ディレクトリの下に static ディレクトリを作成します。

static ディレクトリの中に以下のファイルを作成します:

  • main.css
  • main.js

以下の画像をダウンロードし、test.webp という名前で static ディレクトリ内に保存(またはアップロード)してください。
PaizaCloud、Codespacesの場合は、staticディレクトリを右クリックして「アップロード」クリック→用意したtest.webpをアップロード

いらすとやの画像を利用してます。


index.html、main.css、main.jsを以下のように書き換えてください。

index.htmlを貼り付けるとき「プレーンテキストで貼り付け」にしないと動かしたときに何も表示されなくなります。
index.html:

{% load static %}
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>初めてのDjango</title>
    <link rel="stylesheet" href="{% static 'main.css' %}">
</head>
<body>
    <div id="test">ボタンを押すと</div>
    <button id="btn">OK</button>
    <script src="{% static 'main.js' %}"></script>
    <br>
    <img src="{% static 'test.webp' %}" id="test-img">
</body>
</html>

main.css

#test{
    color: red;
    background-color: yellow;
}

main.js

'use strict';
const test = document.getElementById('test');
const btn = document.getElementById('btn');
btn.addEventListener('click', () => {
    test.textContent = 'JavaScriptが動いて書き換えた';
});

再度動作確認

ターミナルで Ctrl + C を押して一度開発サーバーを停止し、再度実行します。

python manage.py runserver

ブラウザでアクセスして、デザイン(CSS)が適用され、ボタンを押すとJavaScriptが動作し、画像が表示されることを確認してください。

補足3
今回は実験しやすいように static ディレクトリ直下にファイルを置きましたが、実際の開発では static/hajimete_app/css/main.css のようにアプリ名のサブフォルダを作るのが一般的です。その場合の指定は "{% static 'hajimete_app/css/main.css' %}" となります。

補足4
「HTMLは静的ファイルではないのか?」と思われるかもしれませんが、DjangoのHTMLには {% static %} などのDjango独自のタグ(動的処理)が含まれています。そのため、HTMLは static ではなく templates ディレクトリで管理されます。

静的ファイルを本番環境で扱う設定

本番環境で動かすには、settings.py の変更やライブラリの導入が必要です。
手順を順に説明していきます。
目次へ

STATIC_URL

index.html の冒頭にある {% load static %} は静的ファイルを使用するための宣言です。画像やCSSのパスは {% static 'test.webp' %} のように記述しました。

ブラウザで画像アドレスを確認すると、https://.../static/test.webp のようになっています。
settings.py にある STATIC_URL = '/static/' が、このURLパスの配信先設定です。

開発モード(DEBUG = True)のときは、Djangoが各アプリの static フォルダから自動的にファイルを探して返してくれます。
しかし、本番モード(DEBUG = False)に切り替えると、この自動探索機能がオフになります。

# 手順0: 本番モードのテスト(settings.py)
DEBUG = False

DEBUG = False にして画面をスーパーリロード(Shift + F5)すると、静的ファイルのリンクが切れてCSSや画像が表示されなくなります。

Whitenoiseの導入

静的ファイルは本番環境では専用サーバーから配信するのが理想ですが、WhiteNoise というライブラリを使うと、Django単体でも効率よく静的ファイルを配信できるようになります。

WhiteNoiseには主に以下の2つの役割があります:

  1. 圧縮・キャッシュ対応(Storage): 静的ファイルを事前にGzipやBrotliで圧縮し、ハッシュ付きファイル名を生成する。
  2. 配信機能(Middleware): DEBUG=False でもブラウザのリクエストに応じて最適な静的ファイルを送る。

設定手順

# 手順1: WhiteNoiseのインストール
pip install whitenoise
# 手順2: settings.py の編集

# ① MIDDLEWAREにWhiteNoiseを追加(SecurityMiddlewareの直下が推奨)
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware', # 追加
    'django.contrib.sessions.middleware.SessionMiddleware',
    ...
]

# ② STATIC_ROOTの設定と保存形式の設定(ファイル末尾に追加)
import os
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

# Django 4.2以降の現代的な書き方(STORAGES)
STORAGES = {
    "default": {
        "BACKEND": "django.core.files.storage.FileSystemStorage",
    },
    "staticfiles": {
        "BACKEND": "whitenoise.storage.CompressedManifestStaticFilesStorage",
    },
}
# ※旧バージョン(Django 4.1以前)の場合は以下のように指定していました:
# STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

STATIC_ROOTとcollectstatic

STATIC_ROOT は、分散している静的ファイルを1か所に集めるための出力先フォルダ(staticfiles)を指定する設定です。

# 手順3: 静的ファイルを1か所に集めるコマンドを実行
python manage.py collectstatic

コマンドを実行すると、プロジェクトルートに staticfiles ディレクトリが生成され、CSSや画像、さらにその圧縮版(.gz, .br)やハッシュ付きファイルが自動生成されます。

これで DEBUG = False の状態でも、WhiteNoise経由で静的ファイルが正しく配信されるようになります!


補足6
XFREEというサーバーから静的ファイル配信実験しようと思いましたが
画像が表示されませんでした。
右クリックして画像のリンクを確かめるとXFREEからになっています。
これは混合コンテンツが原因でhttps://のページにhttp://(XFREEはSSL対応なしのため)のコンテンツがあると
表示できないようにプラウザがしています。

無料レンタルサーバーの使い方【初心者向け】プログラミングしたものをサーバーにアップロードする方法
プログラミング勉強し始めてHTML、CSS、JavaScript、PHPで作ったものを実際にネットにのせて試したくはないですか?開発環境内だけで動作させても実際はどんな感じになるのか?サーバーにアップロードしてみましょう。無料でできます。勉…
アクセスカウンターの設置ができない原因は混合コンテンツ
ブログにアクセスカウンターを設置しようとしてググったら良さそうなのがあって、それをブログに貼り付けたら表示しないということはないでしょうか。原因の一つは混合コンテンツです。アクセスカウンターの設置ができない件を通して混合コンテンツについて具…
【Django入門】DjangoアプリをWeb開発環境で開発、公開するまでの手順-ステップ2(GitHub、Git、Render)
PaizaCloudまたはGitHub CodespacesからGitHubを経由してRenderへデプロイする方法です。GitとGitHubに関してはRenderへデプロイするための「コードの転送手段」として利用しますので、それぞれの詳し…

まとめと次のステップ

今回はPaizaCloudやGitHub Codespacesを使って、Webブラウザ上でDjangoの開発環境を構築し、静的ファイル(CSS/JS/画像)の扱い方やWhiteNoiseの設定までを実践しました。

次は作成したアプリを実際のWebサーバー(Render等)にデプロイして一般公開してみましょう。

続きはこちらの記事

MENTAやってます(ichige)
イチゲをOFUSEで応援する(御質問でもOKです)
目次へ

コメント

タイトルとURLをコピーしました