この記事は以下のターゲットを対象としています。
★5 Django の開発経験が 3 年以上。
★4 Django の開発経験が 1 年以上。
★3 WEB サイト開発経験あり。これから Django を学習します。
★2 Python 初級者。簡単なプログラムコードが書けます。
★1 プログラミング未経験。
Djangoバージョンアップについて考える
こんにちは、グローバルウェイの有浦です。
今回はグローバルウェイの開発標準とするDjangoのバージョンアップについて紹介します。
Djangoにはバージョンが存在しており、それぞれのバージョンにDjango公式サポートの期間があり、サポート期間が終了すると公式のセキュリティアップデートが終わってしまい、脆弱性など観点で危険性が生じてしまいます。
本稿ではDjangoの公式サポートが終了してしまう前に次のバージョンにDjangoのアップデートを行う際に実施する実際の作業について記載します。
サポート期限はいつまでか
Djangoのサポート期限は、各バージョンのLTS(Long Term Support)が公開されてから約3年あります。
添付の画像をご覧いただくと、2024年4月現在の最新LTSバージョンは4.2であり、
2026年の4月で切れてしまうことがわかります。
正確な期限は、Djangoの公式サイトに記載があります。
アップデート作業のロードマップ
Djangoのバージョンアップの作業は以下のイメージとなります。
[各工程の作業概要]
- リリースノート調査
Djangoの公式サイトで公開されているバージョンアップ後の更新を確認します。 - 使用箇所、影響範囲の調査
リリースノート調査で変更のあったDjangoの関数などを使用している箇所がないかを確認します。 - 実装箇所の修正
使用箇所があった場合、リリースノートの内容に沿って修正を行います。 - 修正箇所試験
修正した箇所が問題なく動作するかを確認します。 - 全体リグレッションテスト
修正箇所以外の機能についても正常系ワンパスを通して動作確認を行います。
上記の①~④の作業はリリースノートの更新分だけ実施します。
①~④の作業が終了し、仕上げに⑤の全体のリグレッションテストを行います。
アップデートのための作業:①リリースノート調査
ここからは実際にアップデートを行う際に具体的にどのような作業を行うか解説します。
まずは新バージョンでどのような変更があったのかをリリースノート上で確認します。
例えばDjango3.2からDjango4.2にバージョンを上げる際には、Django4.0、4.1、4.2のリリースノートをそれぞれ確認します。
具体的な確認内容を4.0の以下を例にとって解説します。
上記は、「CSRF_TRUSTED_ORIGINSの形式が変更になった。スキーム (例’http://’: または) を含める必要があります。’https://’また、ドットで始まる値には、ドットの前にアスタリスクも含める必要があります。たとえば、’.example.com’に変更します’https://*.example.com’。システムチェックにより、必要な変更が検出されます。」という内容となります。
アップデートのための作業:②使用箇所、影響範囲の調査
バージョンアップ対象となるPJで上記の設定が使用されているかを確認します。
「CSRF_TRUSTED_ORIGINS」のキーワードでPJ全体をGrepし、検索を行います。検索結果で抽出された場合は、修正を行い、抽出されなかった場合は対応不要ということで、次のリリースノート調査に戻ります。
アップデートのための作業:③実装箇所の調査
バージョンアップ対象となるPJで上記の設定が使用されているかを確認します。
記載があった場合、
「CSRF_TRUSTED_ORIGINS = ‘https://*.example.com’」の形式に更新します。
アップデートのための作業:④修正箇所試験
修正を行った箇所が問題ないかを試験を実施して確認します。
試験観点の作成方法として、今回の例では、CSRFトークン周りの設定の変更のため、DjangoのFormを用いたPOSTをしている箇所で動作がバージョンアップ前と同じように動作するかについて確認します。
自作のViewやLibなどを修正した場合は、使用箇所を検索し動作に問題ないかを確認します。
上記のtest_utilを修正したと仮定した場合、関数の使用箇所をGrepやIDEの機能を用いて調査します。
test_view2.pyで使用されていることがわかります。
test_view2.pyのtest_view2の関数を使用している箇所をさらに同じように検索します。
hogehoge3というURLで関数が使用されていることがわかりました。
そのため、この場合はhogehoge3のURLの機能を試験すればよいということがわかります。
アップデートのための作業:⑤全体リグレッションテスト
①~④の作業が終了し、最後にシステム全体のリグレッションテストを行います。
ここでは、全機能に対して正常系のワンパスを実施し、アップデート前後で結果の差分が発生しないことを確認していきます。
まとめ
Djangoのアップデートではリリースノート調査に多くの時間が割かれると思います。
アップデートする際はどのような更新・修正を行ったかのナレッジを蓄積していくことで、2回目以降のDjangoアップデート作業を効率化していくことが可能です。
「1度アップデートして終わり」ではなく、作業内容を社内メンバーにも共有できるように心がけ、社内全体のPJの効率化を図れるよう作業を実施していきましょう。
参考文献
https://docs.djangoproject.com/ja/4.2/releases/4.0
https://docs.djangoproject.com/ja/4.2/releases/4.1