2028年1月から始まるDjangoの新しいリリースサイクルについて解説します。
新リリースサイクルについての公式ドキュメントは以下を参照してください。
Django is moving to an annual release cycle | Weblog | Django
また、新リリースサイクルの提案元になっているDEP 20(DEP=Django Enhancement Proposals=Django拡張提案)も参照してください。
deps/accepted/0020-annual-release-cycle.rst at main · django/deps
今までのDjangoのリリースサイクル
今までのDjangoのリリースサイクルは以下のとおりです。
- 年1〜2回のリリース
- x.0→x.1→x2の順にリリース
- x.2がLTS(long-term support=長期サポート)版
- LTS版のサポート期限は3年間1、非LTS版は約8ヶ月間
Djangoを長年使っているプログラマーにはおなじみのリリースサイクルですが、2027年4月に予定しているDjango 6.2のリリースを最後に新しいリリースサイクルに移行します。
2028年1月以降のDjangoのリリースサイクル
2028年1月からは、以下のルールに変更されます。
- 年1回のリリース
- バージョンはリリース年度になる(例:Django 2028, Django 2029)
- すべてのバージョンにLTS相当のサポート(3年間)が提供される(つまり、すべてLTSなので今後はLTSという名称は使われない)
2028年1月には、Django 2028がリリースされる予定です。
サポート期間は以下のように区別されます。
| リリースからの経過時間 | サポート名 | サポート内容 |
|---|---|---|
| 1年間 | メインストリームサポート期間 | セキュリティ問題、データ損失バグ、クラッシュバグ、新しく導入された機能における主要な機能バグ、旧バージョンからの回帰修正を提供。 |
| 2〜3年間 | 延長サポート期間 | セキュリティfixやデータ損失バグのみ提供。 |
新リリースサイクルでは、パッチリリースが出たらバージョン番号はどうなる?
まず、初回のリリースではバージョン番号の後ろに.0がつきます。
たとえば、Django 2028なら2028.0です。
パッチリリースでは、リリース番号の.0部分がインクリメントされます(例:2028.1, 2028.2, …)。
新リリースサイクルでのPythonサポートに関するルール"Plus Last Yellow"
新リリースサイクルでリリースされたDjangoでサポートするPythonは、プレリリース時点で判断します。 Python公式ドキュメント「Status of Python versions」の棒グラフを元に、 以下のルール"Plus Last Yellow"で決まります2。
- グラフのバーがグリーンのバージョンはすべてサポートする
- グラフのバーがイエローのバージョンは最新版のみサポートする
たとえば、2028年1月リリース予定のDjango 2028を例としてみましょう。 Django 2028のプレリリース時期は不明ですが、仮に2027年12月とすると、以下のバージョンのPythonがサポートされるはずです。
- Python 3.14(イエローの中では最新版)
- Python 3.15(グリーン)
- Python 3.16(グリーン)
さらに、Djangoのメインストリームサポート期間内で新しいPythonがリリースされた場合は、そのバージョンをサポートするパッチリリースを行います。 つまり、(現時点では公式ドキュメントに記載はありませんが)2028年10月にリリースされるはずのPython 3.17はDjango 2028のメインストリームサポート期間内のリリースになるため、パッチリリースで採用されるでしょう。
なぜこのルールに変更されたのか?
端的に言うと、Pythonの現在のリリースサイクルと整合性を取るためです。
現在のPythonのリリースサイクルでは、毎年1回新しいバージョンがリリースされます。 また、サポート期間は各バージョン一律で5年間です。
前述したの今までのDjangoのリリースサイクルだと、以下の問題が発生します。
- Djangoのサポート期間終了間際に、新しいPythonのサポートを追加しなければない場合がある
- (Djangoがまだサポート期間内のため)EOLなPythonをサポートし続けなければならない場合がある
たとえば、Django 4.2(LTS)ではサポート期間終了間際にPython 3.12のサポートが追加されました。 また、Python 3.10は2026年10月でEOLとなりますが3、 Python 3.10〜3.14をサポートするDjango 5.2のサポート期限は2028年4月です4:。 ということは、さらに時間が経つとPython 3.11もEOLになり(3.11のサポート期限は2027年10月)、メンテナの負担は増大します(EOLになったPythonのみで発生するエラーの対応に苦慮することもあったらしいです5)。
Djangoを使ったアプリを運用する側にとっても、タイミングしだいではDjango・Python両方のバージョンを同時に行わなければならない可能性があり、バージョンアップのリスクが高まります。
個人的な感想
こうして変更理由を文としてまとめてみると、Djangoメンテナの気苦労が伺い知れるような気がします(といっても、あと1年以上はこの状況が続きますが……)。
新リリースサイクルは、Djangoを利用して開発・運用する側にもメリットはありそうです。 Djangoの公式ドキュメントに載っている情報だけ読んで、サービスローンチ時点で既にEOLのPythonを選択してしまうというリスクはなくなりそうです。
また、すべてのバージョンがLTS相当になることで、今までのように更新対象をLTS版だけにするべきか、非LTS版も含めるべきかという迷いもなくなります。 今までのリリースサイクルに慣れていると少し戸惑いはあるかもしれませんが、個人的にはメリットが大きそうな変更だと感じているので、歓迎しています。
ただし、新機能のバックポートやバグ修正は最初の約8ヶ月間のみ。それ以降は脆弱性修正のみ提供 ↩︎
参考URL:https://devguide.python.org/versions/#supported-versions ↩︎
参考URL:https://github.com/django/deps/blob/main/accepted/0020-annual-release-cycle.rst#python-support-plus-last-yellow ↩︎