Django の新しいバージョンへの更新

時には更新作業は複雑な手順になってしまうことがありますが、Django の最新版に更新すると、以下ような恩恵が受けられます。

  • 新しい機能や改善点が追加される。
  • バグが修正される。
  • 古いバージョンの Django はいずれセキュリティアップデートを受けられなくなります。(サポートバージョン を参照してください)
  • Django が新しくリリースされた時に更新して、コードベースを最新の状態に保っておけば、将来の更新作業が楽になる。

このセクションでは、更新作業ができるかぎりスムーズに行う助けになるよう、特に注意するべきことをいくつか説明しています。

更新時に読むべきドキュメント

はじめて Django を更新する時には、Django のリリースプロセスガイド を読んでおくと役に立つでしょう。

更新を行う前には、新しいバージョンの Django ではどのような点が変更されたのかをよく知っておく必要があります。

  • まず、リリースノート を読みましょう。読む必要があるのは、現在の Django のバージョンの1つ後から、更新しようと考えているターゲットのバージョンまでの、それぞれの「最後の (final) リリース」のリリースノートです。
  • そして、対応するバージョンの 非推奨機能のタイムライン にも目を通します。

中でも特に、後方互換性のない変更点に注意してください。この点に注目すると、正しく更新するために必要なことがはっきりとわかるようになります。

複数の機能バージョン(例えば2.0から2.2)をアップグレードする場合、各機能リリースのすべての変更を一度に行うよりも、各機能リリースを段階的に(2.0→2.1→2.2)アップグレードする方が通常は簡単です。各機能リリースでは、最新のパッチリリースを使ってください (例えば、2.1 では 2.1.15 を使ってください)。

あるLTSから次のLTSにアップグレードする場合は、段階的にアップグレードする方法を推奨します。

依存関係

ほとんどの場合、Django が依存しているパッケージも最新版に更新する必要があるでしょう。その Django のバージョンがリリースされたばかりで、依存関係にあるパッケージがきちんとメンテナンスされていなかった場合、新バージョンの Django に必要なパッケージがまだインストールできないかもしれません。そのような場合には、そうした Django の依存パッケージの新バージョンが使えるようになるまで、少し待たなければならない場合があります。

廃止予定警告を解決する

アップグレードの前、Django の現在のバージョンを使っている間に、プロジェクトが挙げてくる廃止予定警告を解決しておくのがよいでしょう。アップグレードの前にこれらの警告を解決することで、コードが警告を必要とする領域について通知されるようにできます。

Python では、デフォルトでは廃止予定警告は無効化されています。-Wa Python コマンドラインオプションか PYTHONWARNINGS 環境変数を使って有効化する必要があります。例えば、テスト実行中に警告を表示するには:

$ python -Wa manage.py test
...\> py -Wa manage.py test

Djangoのテストランナーを使っていない場合、廃止予定警告が隠されることのないように、コンソール出力がキャプチャされないようにする必要があるかもしれません。たとえば、 pytest を使う場合:

$ PYTHONWARNINGS=always pytest tests --capture=no

アップグレードプロセスを続ける前に、Django の現在のバージョンで廃止予定警告を解決してください。

Django の複数バージョンをサポートするために、サードパーティアプリケーションは廃止される API を使用しているかもしれません。そのため、インストールしたパッケージの廃止予定警告は必ずしも問題を示しません。パッケージが Django の最新のバージョンをサポートしていない場合、問題を提起するかプルリクエストを送ることを考えてみてください。

インストール

さあ、準備ができたら、 新しいバージョンの Django をインストールする 時です。もし virtual environment を使っていて、今回のアップグレードがメジャーアップグレードなら、まずすべての依存関係を含む新しい環境をセットアップした方が良いかもしれません。

Django を pip でインストールした場合は、--upgrade-U フラグが使用できます。

$ python -m pip install -U Django
...\> py -m pip install -U Django

テスト

新しい環境が設定されたら、 テストスイートを実行します 。テストの出力に表示されるように、廃止予定の警告を有効にすると便利です。 (manage.py runserver を使用してアプリケーションを手動でテストする場合は、フラグを使用することもできます)

$ python -Wa manage.py test
...\> py -Wa manage.py test

テストを実行したら、テストに失敗した点をすべて修正しましょう。リリースノートの内容を心に留めながらコードをリファクタリングして、非推奨の警告が出ないようにすれば、Django の新しい機能の恩恵も受けられるかもしれません。

デプロイ

新しいバージョンの Django でアプリが十分に動作すると確信できたら、アップグレードした Django プロジェクトの デプロイ を進める準備は完了です。

Django が提供するキャッシュを利用している場合には、更新後にキャッシュをクリアしなければなりません。クリアしなかった場合にはどんな問題が起こり得るでしょうか? たとえば、pickle 化したオブジェクトをキャッシュしていた場合には、複数のバージョンの Django にわたって pickle の互換性が保証されません。過去の非互換性の例では、pickle 化された HttpResponse オブジェクトを、 cache_page() デコレータを介して直接的または間接的にキャッシュしていました。

Back to Top