こんにちは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日 |
サポートしているPython | 3.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
は、psycopg2 と psycopg3 の両方をサポートします。
そのため、psycopg3へのアップグレードは、psycopg2
をアンインストールしてpsycopg
(psycopg3のパッケージ名はpsycopg
)をインストールするだけで済みます。
なお、psycopg2
は将来的に非推奨になり、削除される可能性があります。
Comments on columns and tables
MySQLやPostgreSQLなど、データベースによってはカラムやテーブルにコメントが書けます。
Django 4.2 で追加されたField.db_comment
やMeta.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_STORAGE
と STATICFILES_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_STORAGE
と STATICFILES_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へのバージョンアップを計画しましょう。
なお、具体的なバージョンアップの方法は、アップグレードの手引き を参考にしてください。