Python学習チャンネル by PyQ

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

Django最新バージョン4.2(LTS)がリリースされました

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

4月3日にDjango 4.2がリリースされました。

今回のバージョンはLTS(long-term support)で、2026年4月までサポートされます。
現在Django 3.2(LTS)を使っているプロジェクトも、バージョンアップを計画するタイミングが来たと言えるでしょう。

Django 4.2にはさまざまな更新がありますが、ここでは以下の新機能をピックアップして紹介します。

  • Psycopg 3 support
  • Comments on columns and tables
  • Custom file storages
  • In-memory file storage

また、「サポートが終了するデータベース」についても取り上げます。

より詳しく知りたい方はDjango 4.2のリリースノートをお読みください。

Django 4.2 リリースの概要

名称Django
リリースバージョンDjango 4.2
リリース日2023年4月3日
サポートしているPython3.8、3.9、3.10、3.11
リリースノートhttps://docs.djangoproject.com/en/4.2/releases/4.2/

※アップデートの際はBackwards incompatible changes(後方互換性のない変更)に十分注意してください

Django 4.2で追加された新機能

Django 4.2で追加された機能のうち4つをピックアップして紹介します。

Psycopg 3 support

PythonでPostgreSQLに接続する場合、よく使われるドライバーがpsycopgです。

このpsycopgには2系統あり、1つは昔から使われてきた psycopg2 です。

もう1つは psycopg2 の完全な再実装である psycopg3 です。
こちらは asyncio ベースの非同期操作など、PythonやPostgreSQLの新しい機能を使えるようになっています。

DjangoでもデータベースにPostgreSQLを使う時は、psycopgをインストールする必要がありますが、これまでは psycopg2 のみをサポートしていました。

それがDjango 4.2では、 psycopg3 も使えるようになりました。

Djangoのデータベースバックエンドであるdjango.db.backends.postgresqlは、psycopg2psycopg3 の両方をサポートします。

そのため、psycopg3へのアップグレードは、psycopg2をアンインストールしてpsycopg(psycopg3のパッケージ名はpsycopg)をインストールするだけで済みます。

なお、psycopg2は将来的に非推奨になり、削除される可能性があります。

Comments on columns and tables

MySQLやPostgreSQLなど、データベースによってはカラムやテーブルにコメントが書けます。

Django 4.2 で追加されたField.db_commentMeta.db_table_commentを使うことで、カラムやテーブルにデータベースレベルでコメントが書けるようになりました。

サンプルコードは以下のとおりです。

from django.db import models


class Question(models.Model):
    text = models.TextField(db_comment="Poll question")
    pub_date = models.DateTimeField(
        db_comment="Date and time when the question was published",
    )

    class Meta:
        db_table_comment = "Poll questions"

調査などでデータベースに接続した時に、もしカラムやテーブルの意味がわからなくても、コメントがあれば助かりますね。

また、データベースからテーブル定義書やER図を自動生成する場合などにも活用できそうです。

Custom file storages

settingsファイルに、新しく STORAGES が追加されました。

STORAGES を使うと、複数のストレージバックエンドの設定をまとめて記述できます。

たとえば、これまで DEFAULT_FILE_STORAGESTATICFILES_STORAGE で以下のように設定していたとします。

DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"
STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage"

これが STORAGES を使うことで、以下のように記述できます。

STORAGES = {
    "default": {
        "BACKEND": "storages.backends.s3boto3.S3Boto3Storage",
    },
    "staticfiles": {
        "BACKEND": "whitenoise.storage.CompressedManifestStaticFilesStorage",
    },
}

なお、これにより DEFAULT_FILE_STORAGESTATICFILES_STORAGE は非推奨になったため、Django 4.2 にバージョンアップする時は STORAGES を使うよう修正しましょう。

In-memory file storage

インメモリのファイルストレージ django.core.files.storage.InMemoryStorage が追加されました。

たとえば以下のようにテスト用のsettingsファイルに設定することで、ファイルストレージを使ったテストの時間短縮が期待できます。

STORAGES = {
    "default": {
        "BACKEND": "django.core.files.storage.InMemoryStorage",
    },
}

サポートが終了するデータベース

サポート期間が終了するデータベースは、Djangoでもサポートされなくなります。

サポート切れが近いデータベースを使っている場合、Djangoのバージョンアップと合わせて、データベースのバージョンアップも計画しましょう。

サポート期間が終了するデータベースは、以下のとおりです。

Dropped support for MariaDB 10.3

MariaDB 10.3のサポート期間は2023年5月で終了します。Django 4.2ではMariaDB 10.4以降がサポートされます。

Dropped support for MySQL 5.7

MySQL 5.7のサポート期間は2023年10月で終了します。Django 4.2ではMySQL 8以降がサポートされます。

Dropped support for PostgreSQL 11

PostgreSQL 11のサポート期間は2023年11月で終了します。Django 4.2ではPostgreSQL 12以降がサポートされます。

まとめ

Django 4.2の更新内容をピックアップして紹介しました。

Django 3.2のサポートは2024年4月までです。Django 3.2を使っているプロジェクトは、Django 4.2へのバージョンアップを計画しましょう。

なお、具体的なバージョンアップの方法は、アップグレードの手引き を参考にしてください。

Copyright ©2017- BeProud Inc. All rights reserved.