---
title: "Django の新しいバージョンへの更新"
version: 2.2
locale: ja
source: https://docs.djangoproject.com/ja/2.2/howto/upgrade-version/
canonical: https://djangodocs.dev/ja/2.2/howto/upgrade-version/
---
# Django の新しいバージョンへの更新

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

- 新しい機能や改善点が追加される。
- バグが修正される。
- Older version of Django will eventually no longer receive security updates.
  (see [サポートバージョン](/ja/2.2/internals/release-process/#supported-versions-policy)).
- Django が新しくリリースされた時に更新して、コードベースを最新の状態に保っておけば、将来の更新作業が楽になる。

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

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

はじめて Django を更新する時には、[Django のリリースプロセスガイド](/ja/2.2/internals/release-process/) を読んでおくと役に立つでしょう。

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

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

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

たとえば A.B から A.B+2 のように複数の機能バージョンをアップグレードする場合は、各機能リリースのすべての変更を一度に行うのではなく、各機能リリースを A.B → A.B+1 → A.B+2 のように段階的にアップグレードする方が簡単です。 機能リリースごとに、最新のパッチリリース (A.B.C) を使用してください。

あるLTSから次のLTSにアップグレードする場合は、インクリメンタルなアップグレードする方法を推奨します。

## 依存関係

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

## 廃止予定警告を解決する

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

In Python, deprecation warnings are silenced by default. You must turn them on
using the `-Wa` Python command line option or the [`PYTHONWARNINGS`](https://docs.python.org/3/using/cmdline.html#envvar-PYTHONWARNINGS)
environment variable. For example, to show warnings while running tests:

```console
$ python -Wa manage.py test
```

*Windows*

```doscon
...\> py -Wa manage.py test
```

Django のテスト実行環境を使用していない場合は、廃止予定警告を隠すような、コンソール出力がキャプチャされていないことを確認する必要があります。例えば、py.test を使っている場合:

```console
$ PYTHONWARNINGS=always py.test tests --capture=no
```

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

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

## インストール

さあ、準備ができたら、[新しいバージョンの Django をインストールする](/ja/2.2/topics/install/) 時です。[virtualenv](https://virtualenv.pypa.io/) を使っていて、これが Django のメジャーアップデートなら、[virtualenv](https://virtualenv.pypa.io/) で新しい環境をセットアップして、そこに Django を依存パッケージとともにインストールしてもいいでしょう。

Django を [pip](https://pip.pypa.io/) でインストールした場合は、`--upgrade` か `-U` フラグが使用できます。

```console
$ pip install -U Django
```

*Windows*

```doscon
...\> pip install -U Django
```

## テスト

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

```console
$ python -Wa manage.py test
```

*Windows*

```doscon
...\> py -Wa manage.py test
```

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

## デプロイ

新しいバージョンの Django でもアプリケーションが動作すると自信を持って言えるようになったならば、更新した Django プロジェクトを [デプロイ](/ja/2.2/howto/deployment/) する準備ができたことになります．

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