概要
Python向けWebフレームワークDjangoの開発チームは8月5日、最新メジャーバージョン「Django 6.1」を正式リリースした。7月22日公開のリリース候補版を経て安定版として公開されたもので、発表はJacob Walls氏が行った。前バージョンのDjango 6.0はこれでメインラインサポートを終了し、最終マイナーバージョンとなる6.0.8が「セキュリティリリース」として前日の8月4日付で公開されている。6.0系は2027年4月まで、セキュリティ修正およびデータ損失に関する修正のみが提供される延長サポート期間に入る。Django 6.1自体のメインストリームサポートは2027年4月まで、拡張サポートは2027年12月までとなっている。
主な新機能
今回の目玉機能は3つある。1つ目は「モデルフィールドのフェッチモード」で、関連オブジェクトのオンデマンド取得挙動をFETCH_ONE(デフォルト、現在のインスタンスのみ取得)、FETCH_PEERS(同じQuerySetから取得した全インスタンスをまとめて取得)、FETCH_RAISE(アクセス時にFieldFetchBlocked例外を送出)の3モードから選べるようになった。FETCH_PEERSを使えばループ内で関連フィールドにアクセスしても追加クエリが1回にまとまるため、典型的なN+1クエリ問題を自動的に抑制できる。2つ目は「データベースレベルの削除オプション」で、ForeignKeyのon_deleteにDB_CASCADE・DB_SET_NULL・DB_SET_DEFAULTを指定すると、削除処理をPython側でオブジェクトを読み込まずSQLのON DELETE句で完結させられる。ただしこの場合pre_delete/post_deleteシグナルは発火しない点に注意が必要だ。3つ目は新しいメール設定の仕組み「MAILERS」で、辞書形式で複数のメールバックエンドを名前付きで定義し、send_mail(..., using="marketing")のように送信時に使い分けられるようになった。このMAILERSは将来的にEMAIL_BACKENDをはじめとする従来のメール関連設定を置き換える予定で、Django 7.0での完全移行が計画されている。
このほかにも、管理画面でのログイン後リダイレクト改善やFilteredSelectMultipleのグループ化対応、PBKDF2パスワードハッシャーの反復回数引き上げ(120万回→150万回)、JSONフィールドのNULLを明示的に表すJSONNull、UUID生成関数UUID4/UUID7、ビット演算集約BitAnd/BitOr/BitXor、CSPのnonceを自動出力するテンプレートタグなど、細かな機能改善が多数加えられている。
後方互換性の変更と非推奨機能
サポートするデータベースの下限も引き上げられた。PostgreSQLは15以上、MySQLは8.4以上、MariaDBは10.11以上が必須となり、SQLiteの最小バージョンも3.31.0から3.37.0に引き上げられている。対応Pythonバージョンは3.12・3.13・3.14。メール関連では、旧来のEMAIL_BACKENDなどの設定が非推奨となったほか、send_mail()でconnection引数とfail_silently(またはauth_user/auth_password)引数を併用するとTypeErrorが発生するようになり、connection引数自体も非推奨となった。新しいMAILERSベースの構成への移行が推奨される。またJSONFieldに対してfilter(data=None)のようにNoneを直接指定する書き方も非推奨となり、代わりに新設のJSONNull()を使う必要がある。このほか、select_related()を引数なしで呼ぶ書き方やvalues_list(flat=True)をフィールド名なしで呼ぶ書き方も非推奨化された。Django 5.2で予告されていたdjango.contrib.staticfiles.finders.find()のall引数など一部機能は今回のバージョンで完全に削除されている。
今後の展望
公式リリースノートでは、今回の変更を「新機能と使い勝手の改善が調和した内容」と表現している。特にMAILERSはDjango 7.0で従来のメール設定を置き換える布石と位置付けられており、開発者は早めの移行が推奨される。またフェッチモード機能は、パフォーマンス上の課題として長年指摘されてきたN+1クエリ問題への標準機能での対応という点で注目度が高く、今後のマイナーリリースでさらに機能が拡張される可能性がある。既存プロジェクトをアップグレードする際は、データベースバージョンの要件引き上げやメール設定の非推奨化、JSONFieldの挙動変更など複数の後方互換性に関わる変更があるため、公式リリースノートを確認しながら段階的に対応することが望ましい。