Python学習チャンネル by PyQ

Pythonのオンライン学習プラットフォームPyQのオフィシャルブログです

Django の最新バージョン、Django 6.0 を紹介します

こんにちは。PyQサポートです。

Django 6.0 が、2025年12月3日にリリースされました。

この記事では、Django 6.0 の リリースノートから、「What’s new in Django 6.0(Django 6.0 の新機能)」の主要な内容を紹介します。

Django 6.0 の注目すべき新機能は以下の4つです。

  • Content Security Policy support:CSPのサポート
  • Template Partials:テンプレートパーシャル(部分テンプレート)
  • Background Tasks:バックグラウンドタスク
  • Adoption of Python’s modern email API :Pythonの最新のメールAPI導入

また、Python 対応バージョンの変更や、後方互換性のない変更点についても触れます。


Django 6.0 リリースの概要

名称Django
リリースバージョン6.0
リリース日2025年12月3日
サポートしているPython3.12, 3.13, 3.14
リリースノート(開発版)https://docs.djangoproject.com/en/dev/releases/6.0/

Django 6.0 では Python 3.12 以上のみがサポートされます。
これにより、Django 5.2が Python 3.10 / 3.11 をサポートする最後のシリーズとなります。


Django 6.0 の新機能

1. Content Security Policy support(CSPサポート)

DjangoでContent Security Policy(CSP)が標準で扱えるようになりました。
SECURE_CSPSECURE_CSP_REPORT_ONLY にポリシーを設定することにより、CSPポリシーを適用できます。
設定したポリシーは ContentSecurityPolicyMiddleware によりヘッダーとして追加されます。

Content Security Policy(CSP)とは

Web アプリケーションに読み込ませる スクリプト・スタイル・画像などの 許可するリソース をブラウザに明示する仕組みです。
たとえば、外部から意図しないスクリプトが実行される XSS(クロスサイトスクリプティング)のような攻撃を軽減する目的があります。

参考: MDN - コンテンツセキュリティポリシー(CSP):https://developer.mozilla.org/ja/docs/Web/HTTP/Guides/CSP

設定例

from django.utils.csp import CSP

SECURE_CSP = {
    "default-src": [CSP.SELF],
    "script-src": [CSP.SELF, CSP.NONCE],
    "img-src": [CSP.SELF, "https:"],
}

この設定により、送出されるヘッダーは次のようになります。

default-src 'self'; script-src 'self' 'nonce-SECRET'; img-src 'self' https:

CSP の詳細や、ビューごとの上書き方法などは、リリースノートから参照できます。


2. Template Partials(テンプレートパーシャル)

DjangoのTemplate Partials(テンプレートパーシャル)は、テンプレート内の一部を、名前を付けてカプセル化し再利用しやすくする機能です。

Template Partialsは、従来のテンプレート継承や{% include %}タグでは難しかった、テンプレートファイル内でのコンポーネントのモジュール化を実現します。

  • 再利用性の向上: 複数の場所で同じUIコンポーネント(例:ボタン、カードのフッターなど)を使用する場合に、コードの重複を防ぎます。
  • メンテナンス性の向上: 複雑なテンプレートを小さな論理的な単位に分割し、コードを読みやすく、管理しやすくします。

タグ: Django 6.0で標準機能として追加される新しいテンプレートタグは以下の2つです。

  • {% partialdef 名前 %}:再利用可能な断片(パーシャル)を定義します。
  • {% partial 名前 %}:定義したパーシャルをレンダリングします。

3. Background Tasks(バックグラウンドタスク)

Django 6.0にはTasks フレームワークが追加され、HTTP リクエストとは別の処理をバックグラウンドで実行できるようになります。
メール送信やデータ処理など、リクエスト中に待つ必要のない重い処理を専用のバックグラウンドワーカーに任せることが可能になります。

タスクは task() デコレータで定義します。

from django.core.mail import send_mail
from django.tasks import task

@task
def email_users(emails, subject, message):
    return send_mail(subject, message, None, emails)

定義したタスクは、設定されたバックエンドを通して実行キューに追加できます。

email_users.enqueue(
    emails=["user@example.com"],
    subject="You have a message",
    message="Hello there!",
)

設定は TASKS で行い、開発・テスト向けのバックエンドが 2 種類付属します。

注意点:

  • Django 自体にはタスクを実行するためのワーカーメカニズムは提供していません。
  • 実行には外部プロセス・サービスが必要です。

TASKS の詳細は、リリースノートから参照できます。


4. Adoption of Python’s modern email API (Pythonの最新メールAPI導入)

Django 6.0では、メール処理が Python の最新メールAPIであるmodern email API(email.message.EmailMessage)を標準として採用しました。
これにより、内部で利用されていた旧来の MIME ベースのレガシーAPI から、より扱いやすい modern email API へ移行しています。

modern email API は Unicode を自然に扱えるよう設計されており、構造もシンプルです。これにともない、EmailMessage.message() の戻り値は email.message.EmailMessageの インスタンスになりました。

通常の利用では影響は少ないものの、旧 API に依存したカスタマイズを行っている場合は挙動が変わる可能性があります。


後方互換性のない変更(ピックアップ)

Python 3.11 以前のサポート終了

Python 3.12 以降がサポート対象です。

MariaDB 10.5 のサポート終了

MariaDB 10.6 以降が必要になります。

データベースバックエンドAPIの変更

DatabaseOperations.return_insert_columns() などがリネームされました。

DEFAULT_AUTO_FIELD のデフォルト変更

デフォルトが AutoFieldBigAutoField になります。
Django 3.2 以降の警告(models.W042)に対応していない場合は注意が必要です。


まとめ

Django 6.0 の主な新機能として、CSPのサポート、テンプレートパーシャル、バックグラウンドタスク、PythonのメールAPI導入が追加されました。
また、Python 3.12 以降のみのサポートとなるため、既存プロジェクトではバージョンアップ計画が必要です。

Django 6.0 には他にも多数の改善があります。
気になる方はぜひ リリースノート をご確認ください。

Copyright ©2017- BeProud Inc. All rights reserved.