Django 6

2025/12/05 6:09

Django 6

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

## Summary
Django 6.0 は 2025年12月3日にリリースされ、Django 5.2 以前からのアップグレードを必要とする新機能といくつかの後方互換性に影響する変更が追加されました。

主な追加点は以下の通りです:
- **組み込み Content Security Policy (CSP)**:`ContentSecurityPolicyMiddleware`、`csp()` コンテキストプロセッサ、および `SECURE_CSP` / `SECURE_CSP_REPORT_ONLY` 設定。
- **テンプレートパーシャル**(`{% partialdef %}` / `{% partial %}`)と参照構文 `template_name#partial_name`。
- **組み込み Tasks フレームワーク**:`django.tasks.task` デコレータ、`TASKS` 設定、および開発/テスト用バックエンド 2 種類。外部ワーカーは依然として必要です。
- **モダンなメール処理**:Python の `email.message.EmailMessage` を使用し、旧式の MIME クラスを置き換えます。
- **管理インターフェース更新**:Font Awesome 6.7.2 アイコン、カスタマイズ可能な `AdminSite.password_change_form`、および `messages.DEBUG` / `INFO` 用に別々のアイコン。
- パスワードハッシャーの反復回数が 1,000,000 から 1,200,000 に増加しました。

その他重要な変更点:
- **Python 対応**は現在 3.12‑3.14 のみ。Django 5.2.x が Python 3.10/3.11 をサポートした最後のリリースです。
- **MariaDB 10.5 サポート**が削除されました。
- デフォルトの `DEFAULT_AUTO_FIELD` は `BigAutoField` になりました。
- カスタム ORM 表現はパラメータをタプルで返す必要があります。
- 複数の非推奨項目(例:位置付きメール API 引数、レガシーメール MIMEBase サポート、BaseConstraint、Jinja2DivFormRenderer、移行設定 `URLIZE_ASSUME_HTTPS` など)がリリースノートに記載されています。

サードパーティアプリの作者は、本リリース後に Django 5.2 より古いバージョンへのサポートを削除し、非推奨警告に対処することが推奨されます。リリースには contrib アプリ全体でのさまざまな小規模機能追加も含まれています(GIS ジオメトリチェック、PostgreSQL フルテキスト検索 Lexeme 表現、staticfiles マニフェスト順序付けなど)。

以前のバージョンからアップグレードする開発者は、詳細な後方互換性に影響する変更を確認し、マイグレーション計画を立てるべきです。

本文

2025年12月3日 – Django 6.0 リリースノート

Django 6.0へようこそ! 本ノートでは、Django 5.2 以前からのアップグレードに影響を与える新機能と後方互換性のない変更点について説明します。いくつかの機能は非推奨化プロセスが始まっており、既存プロジェクトを更新する際は「How to upgrade」ガイドをご覧ください。


Python との互換性

  • Django 6.0 は Python 3.12, 3.13, 3.14 をサポートします(各シリーズの最新バージョンが推奨)。
  • Django 5.2.x が Python 3.10 と 3.11 を最後にサポートするリリースです。

古い Django バージョンへのサードパーティライブラリサポート

Django 6.0 リリース後、サードパーティアプリの作者は 5.2 未満の全バージョン へのサポートを終了すべきです。

python -Wd
を使ってパッケージのテストを実行し、非推奨警告が表示されるようにしてください。警告を修正した後、アプリは Django 6.0 と互換性があります。


Django 6.0 の新機能

コンテンツセキュリティポリシー(CSP)サポート

組み込み CSP ツールにより XSS やその他のコンテンツ注入攻撃から保護しやすくなります。

  • ContentSecurityPolicyMiddleware
    がヘッダーを追加します。
  • csp()
    コンテキストプロセッサで nonce をサポート。
  • ポリシーは
    SECURE_CSP
    SECURE_CSP_REPORT_ONLY
    (Python 辞書)で設定し、Django から提供される定数を使用します。
from django.utils.csp import CSP

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

結果として生成されるヘッダー:

Content‑Security‑Policy: default-src 'self'; script-src 'self' 'nonce-SECRET'; img-src 'self' https:

詳細は CSP 使い方ガイドとセキュリティ概要を参照してください。

テンプレートパーシャル

Django テンプレート言語が 名前付きパーシャル

{% partialdef %}
/
{% partial %}
) をサポートします。
また、
get_template()
,
render()
,
{% include %}
などで
template_name#partial_name
の形式で参照できるようになり、別ファイルに分割せずにモジュール化されたテンプレートを実現できます。サードパーティの
django-template-partials
パッケージ向け移行ガイドがあります。

バックグラウンドタスク

Django は組み込みタスクフレームワーク(

django.tasks
) を提供します。

  • @task
    デコレーターでタスクを定義し、
    .enqueue()
    でキューに投入。
  • バックエンドは
    TASKS
    設定で指定。開発/テスト用バックエンドが付属していますが、本番環境では外部ワーカーが必要です。詳細は Tasks フレームワークとリファレンスを参照してください。
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!",
)

モダンメール API

メール処理は Python の modern

email.message.EmailMessage
クラス(Python 3.6+) を採用します。

  • EmailMessage.message()
    EmailMessage
    オブジェクトを返す。
  • EmailMessage.attach()
    はモダン email API の MIMEPart オブジェクトを受け取る。

マイナー機能

django.contrib.admin

  • Font Awesome Free v6.7.2 アイコンが追加。
  • AdminSite.password_change_form
    属性でパスワード変更フォームをカスタマイズ可能。
  • messages.DEBUG / messages.INFO
    用に別々のアイコンと CSS が用意。

django.contrib.auth

  • PBKDF2 のイテレーション数が 1 200 000 に増加。

django.contrib.gis

  • 新機能:
    GEOSGeometry.hasm
    ,
    Rotate
    DB 関数,
    BaseGeometryWidget.base_layer
    .
  • 追加:
    coveredby
    ,
    isvalid
    ラックアップ;
    Collect
    集約。
  • MariaDB 12.0.1+ が GeoHash と IsValid 関数をサポート。
  • 新ラッパー:
    geom_type
    ; DB 関数
    GeometryType()
    .
  • ウィジェットはインライン JavaScript を出力しない。

django.contrib.postgres

  • Lexeme 式で細粒度の全文検索が可能。
  • モデルフィールド、インデックス、制約に対するシステムチェック追加。
  • 拡張操作はオプション
    hints
    を受け取るようになった。

django.contrib.staticfiles

  • ManifestStaticFilesStorage
    がパス順序を一貫して保証。
  • collectstatic
    は verbosity 1 で概要のみ報告し、詳細は verbosity 2+ で表示。

Email

  • EmailMessage.message()
    policy
    引数(デフォルト:
    email.policy.default
    ) を受け取る。
  • EmailMessage.attach()
    がモダン MIMEPart オブジェクトを受け付けるようになった。

国際化

  • ハイチ語 (Haitian Creole) の翻訳が追加。

管理コマンド

  • startproject
    /
    startapp
    がターゲットディレクトリを存在しない場合に作成。
  • Shell は自動的に
    django.conf.settings
    をインポート。

マイグレーション

  • スクアッシュ済みマイグレーションは再スクワッシュ可能。
  • zoneinfo.ZoneInfo
    のシリアライズサポート。
  • Deconstructible オブジェクトは、識別子として無効なキーワード引数を受け取れるようになった。

モデル

  • 制約が登録済みの
    check()
    メソッドを実装。
  • Aggregate
    に新
    order_by
    引数と
    allow_order_by
    属性。
  • StringAgg
    が結合文字列を返すようにし、PostgreSQL, SQLite, MySQL, Oracle, PostgreSQL 16+ でサポート。
  • save()
    は強制更新が行われても影響行が無い場合に
    Model.NotUpdated
    を送出。
  • QuerySet.raw()
    CompositePrimaryKey
    モデルを扱えるようになった。
  • CompositePrimaryKey
    付きサブクエリは
    __in
    の他、
    __exact
    等も対象にできる。
  • SQLite 上で
    JSONField
    が負の配列インデックスをサポート。
  • AnyValue
    集約が任意の非 null 値を返すようになり、SQLite, MySQL, Oracle, PostgreSQL 16+ で利用可能。
  • 生成フィールドと式割当フィールドは
    save()
    後に DB からリフレッシュされる(
    RETURNING
    がサポートされている場合)。
  • 複数の
    from_fields
    を持つ
    ForeignObject
    をインデックス/制約/unique_together に使用するとシステムチェックエラーになる。

ページネーション

  • 非同期実装:
    AsyncPaginator
    ,
    AsyncPage
    .

リクエストとレスポンス

  • ASGI 下で HTTP/2 リクエストに対して複数 Cookie ヘッダーをサポート。

テンプレート

  • 新変数
    forloop.length
  • querystring
    タグが
    ?
    で接頭辞し、複数位置引数のマッピングも受け付けるように変更。

テスト

  • DiscoverRunner
    が forkserver スタートメソッドで並列テスト実行をサポート。

Django 6.0 の後方互換性のない変更

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

  • BaseDatabaseSchemaEditor
    と PostgreSQL バックエンドは、カラム削除時に CASCADE を使用しなくなった。
  • メソッド名変更:
    return_insert_columns()
    returning_columns()
    ,
    fetch_returned_insert_rows()
    fetch_returned_rows()
    .
  • fetch_returned_insert_columns()
    は削除された。
  • バックエンドは
    DatabaseFeatures.can_return_rows_from_update=True
    を設定して、UPDATE … RETURNING がサポートされることを示せる。

サポート廃止

  • MariaDB 10.5 – Django 6.0 は MariaDB 10.6+ をサポート。
  • Python < 3.12 – 最小サポートバージョンは 3.12。オプション依存パッケージも対応バージョンを合わせる必要あり(互換ライブラリ一覧参照)。

Email

  • 非公開
    mixed_subtype
    ,
    alternative_subtype
    プロパティが削除。
  • 非公開
    encoding
    プロパティは旧
    email.charset.Charset
    をサポートしなくなる。
  • 内部アンダースコアメソッドをオーバーライドするカスタムサブクラスは見直すべき。

DEFAULT_AUTO_FIELD

  • デフォルトが
    django.db.models.BigAutoField
    に変更され、プロジェクト/アプリテンプレートに旧デフォルト設定は含まれない。
    依然として
    AutoField
    を使いたい場合は
    DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
    を明示的に追加する。

カスタム ORM 式

  • as_sql()
    常に
    (sql, params)
    のタプル
    を返す必要がある。
    params
    は必ずタプルであるべき。

その他

  • JSON シリアライザは末尾に改行を書き込むようになった。
  • 最小サポート
    asgiref
    3.9.1 に引き上げられた。

Django 6.0 で非推奨化された機能

django.core.mail
の位置引数

  • 任意パラメータはすべてキーワードで指定するようにし、位置引数の使用は非推奨警告を発生させる。将来的には
    TypeError
    が送出される。

その他

  • BaseDatabaseCreation.create_test_db(serialize)
    – 代わりに
    serialize_db_to_string()
    を使用。
  • PostgreSQL の
    StringAgg
    クラスは非推奨、一般的な
    StringAgg
    を使う。
  • PostgreSQL の
    OrderableAggMixin
    は非推奨、
    Aggregate.order_by
    を利用。
  • urlize
    /
    urlizetrunc
    のデフォルトプロトコルは Django 7.0 で HTTPS に変更予定。早期にオプトインしたい場合は
    URLIZE_ASSUME_HTTPS=True
    を設定。
  • ADMINS
    /
    MANAGERS
    (name, address)
    タプルではなく メール文字列のリスト として定義するべき。
  • orphans
    引数 ≥ per_page が非推奨。
  • 列エイリアス/アノテーションで
    %
    記号を使用することは非推奨。
  • 旧 MIMEBase アタッチメントサポートは非推奨、モダン MIMEPart を利用。
  • BadHeaderError
    ,
    SafeMIMEText
    ,
    SafeMIMEMultipart
    , 未公開関数 (
    forbid_multi_line_headers()
    ,
    message.sanitize_address()
    ) は非推奨。

Django 6.0 で削除された機能

(「非推奨化」セクションの詳細参照。)
主な削除項目は以下の通りです:

  • BaseConstraint
    の位置引数
  • 移行用フォームレンダラ (
    DjangoDivFormRenderer
    ,
    Jinja2DivFormRenderer
    )
  • field_cast_sql()
    ,
    get_joining_columns()
    メソッドと関連フォールバック
  • cx_Oracle
    サポートの廃止
  • django.contrib.gis
    django.urls
    のいくつかの非推奨ヘルパー
  • 内部ユーティリティ (
    django.utils.itercompat.is_iterable
    等)
  • 非推奨設定 (
    FORMS_URLFIELD_ASSUME_HTTPS
    ) など

Django 6.0 リリースノートは以上です。

同じ日のほかのニュース

一覧に戻る →

2025/12/05 10:05

BMW PHEV: Safety fuse replacement is extremely expensive

## Japanese Translation: --- ## 要約 BMW の高電圧バッテリー安全ヒューズ(1件あたり約 €5 000)は、iBMUCP モジュール全体(約 €1 100+税)を交換する必要があります。iBMUCP は溶接で閉じられ、暗号的にロックされており、サービス前後に車両全体のフラッシュが必須です。ISTA で承認された手順を試みると、盗難防止ロックを作動させてモジュールを消去し、新しいバッテリーパック(約 €6 000+VAT)が必要になるリスクがあります。 BMW は公式 ISTA 診断へのアクセスをブロックし、オーストリアでのワークショップ認定要求を却下しているため、独立した修理はさらに困難です。対照的に、テスラのプロファイザー/ BMS リセットは €11–€50 だけです。 21F2A8 や 21F35B といったエラーコードは高電圧安全問題を示しています。OEM サービスは €4 000+税と見積もられ、iBMUCP の交換作業には通常 24–50 時間がかかり、ツール費用は €25 000 を超えます(ICOM、IMIB、AOS)。 著者のチームは iBMUCP 内にある Infineon TC375 MCU 上の JTAG/DAP 保護を突破する計画です。成功すれば回復が簡素化され、作業時間とツール費用が削減され、不必要なバッテリー交換が減り、自動車修理における CO₂ 排出量も低減します。 この作業を提供しているサービスセンターは、ザグレブ、ベルリン、スロベニア、およびセルビア(EV CLINIC)に所在しています。

2025/12/05 9:03

Trick users and bypass warnings – Modern SVG Clickjacking attacks

## Japanese Translation: ## Summary 本論文は、すべてのSVG `<fe*>` フィルタプリミティブをチェーン化することでチューリング完全なツールセットを構築できることを示し、高度なクリックジャッキングやクロスオリジンデータ外部流出攻撃を可能にします。 - 著者はまず、`feColorMatrix` と `feDisplacementMap` を用いて CSS/SVG で Apple の Liquid Glass 効果を再現し、クロスオリジン iframe 上でも動作することを証明しました。 - プリミティブ(切り取り・タイル化・算術合成・カラー行列変換・ガウシアンぼかし)を組み合わせて、外国オリジンから画像データを読み取るピクセル読取回路を構築しました。 - `feBlend` と `feComposite` を用いて NOT, AND, OR, XOR, NAND, NOR, XNOR の論理ゲートを実装し、SVG フィルタ内で任意のブール演算が可能になりました。 - これらのゲートを利用して、ダイアログ表示状態・読み込み状態・チェックボックス状態・赤文字検出に応じて画像を条件付きで表示するマルチステップクリックジャッキングシナリオ(「Securify」)を構築しました。 - この手法は Google Docs に適用され、攻撃者が「Generate Document」→ CAPTCHA 入力 → 提案選択 → ボタン押下 → 読み込み画面という一連の操作を SVG フィルタ内で自動化します。 - SVG フィルタ内(`feDisplacementMap` と Reed–Solomon エラー訂正表を使用)に QR コードジェネレータを構築し、生成されたコードは外部流出データをエンコードしており、ユーザーにスキャンさせて攻撃者のサーバへ送信されます。 クリックハイジャックや SVG フィルタタイミング攻撃に関する既存研究では、マルチステップロジックとクロスオリジンデータ読取を組み合わせたものはなく、本論文は新規かつ自動化された攻撃ベクターを提示しています。 調査結果は、攻撃者が他のウェブサービスに対して同様のシーケンスを自動化し、マルウェアやフィッシングキャンペーンに埋め込む可能性があることを示唆しています。ユーザーは意図しないクリックとデータ漏洩のリスクにさらされ、サードパーティ iframe を組み込む企業は侵害リスクが高まります。本研究は、ウェブエコシステム全体で SVG フィルタ使用時のオリジン境界保護を強化する必要性を訴えています。

2025/12/05 10:15

NeurIPS 2025 Best Paper Awards

## Japanese Translation: > **概要:** > 本会議の論文賞授与式では、プログラムチェアとデータベース&ベンチマークトラックチェアが指名した委員会により選ばれた優秀な7件の論文が表彰されました。最終承認は総合チェア、新世代チェア、およびアクセシビリティチェアから行われました。賞には、Datasets & Benchmarkトラックから1件を含む4件のベストペーパーと3件のレナーアップが含まれます。 > > *ベストペーパー*: > 1. **「Artificial Hivemind: The Open‑Ended Homogeneity of Language Models」** – Infinity‑Chat(26 Kクエリ、31 K人間アノテーション)とオープンエンドプロンプトの分類法を紹介し、モデル内部での反復とモデル間での均質性を明らかにします。 > 2. **「Gated Attention for Large Language Models」** – SDPA後にヘッド特異的シグモイドゲートを追加すると性能・安定性が向上し、密結合およびMoEトランスフォーマーの注意サンク問題を緩和することを示します。コードはGitHub/HuggingFaceで公開されています。 > 3. **「1000 Layer Networks for Self‑Supervised RL」** – 1024層という深さが目標条件付きタスクで性能を向上させ、他のベースラインを上回ることを実証します。 > 4. **「Why Diffusion Models Don’t Memorize」** – 2つの時間スケール(初期一般化と後期記憶)を特定し、暗黙的な動的正則化が過学習を防ぐことを示します。 > > *レナーアップ*: > - 「Does Reinforcement Learning Really Incentivize Reasoning Capacity in LLMs Beyond the Base Model?」 – RLVRはサンプリング効率を改善するものの、推論能力を拡張しない;蒸留により新たなパターンが導入される可能性があります。 > - 「Optimal Mistake Bounds for Transductive Online Learning」 – Ω(√d) の下限と O(√d) の上限を証明し、以前の結果を指数関数的に改善し、転移学習と標準オンライン学習との間に二次的ギャップがあることを示します。 > - 「Superposition Yields Robust Neural Scaling」 – 表現の重ね合わせがニューラルスケーリング法則を駆動することを示し、強い重ね合わせは多様な周波数分布にわたってモデル次元に逆比例して損失を縮小します。 > > これらの賞は拡散理論、自律学習RL、LLMの注意メカニズム、LLMにおける推論、オンライン学習理論、ニューラルスケーリング法則、および言語モデル多様性のベンチマーク手法を網羅しています。これらは会議が実証的ブレイクスルーと理論的洞察の両方にコミットしていることを示しています。 > > この改訂版概要は、Key Points List のすべての主要ポイントを忠実に列挙し、裏付けのない推測を避け、読み手に優しい明確なオーバービューを提供します。