コンテンツにスキップ

シリーズの振り返り#

2024 iThome鉄人レース

これはDjango Ninjaチュートリアルシリーズの第30回です。

シリーズの最終章、私たちの「Django Ninjaの探検」は一時的に幕を閉じます。

もちろん、これで終わりではありません。なんと言っても、Django Ninjaはまだ比較的新しいプロジェクトであり、私はその未来に大きな期待を寄せています。

この記事は2つの部分に分かれています。

  1. シリーズ全体を振り返り、各章で学んだ概念や技術を点検します——できるだけ要点だけを取り上げます。
  2. 執筆中に直面した最大の課題、Django Ninjaへの期待、そして最後に鉄人レースを完走した感想を共有します。

紙面の都合上、さらなる舞台裏のエピソード、創作の裏側、個人的な感想については、本編とは関係のない第31回、第32回で改めて共有します。

また、本編で詳しく説明できなかった内容を補足する「Django Ninja番外編」を不定期で更新する予定です。興味のある読者は、ぜひ本シリーズの購読または本サイトのメール購読をお願いします。

多くを語らず、早速始めましょう。

GitHubサンプルプロジェクト#

👉 Django-Ninja-Tutorial


一、シリーズの目標と主な学習成果#

第1回の冒頭に戻ると、シリーズ全体の目標は以下の通りでした。

この30日間のシリーズ記事では、Django Ninjaの基礎実装について詳しく探求します。テキストによるチュートリアルサンプルプロジェクトのコードを通じて、この強力で柔軟なDjango API開発フレームワークに少しずつ慣れていただけるように導きます。

その通り、では具体的に私たちは何を行ったのでしょうか?

主な学習成果#

本シリーズを通じて、読者は以下のDjango Ninjaのコアスキルをマスターしました。

  1. Django Ninjaのルーティング設定。(第7〜8回)
  2. 各種HTTPリクエストとパラメータの処理——パスパラメータ、クエリパラメータ、body。(第9〜12回)
  3. スキーマを使用したAPIレスポンスのデータ構造の設計と定義。(第13〜16回)
  4. プロジェクトのコードからAPIドキュメントを自動生成し、Pydanticを通じてデータを検証し、システムが投げるエラーを効果的に処理する。(第17〜22回)
  5. ファイルのアップロード、ページネーション、データのフィルタリングなど、高度な機能の柔軟な活用。(第23〜27回)

さらに最後の認証と単体テスト。これは非常に充実した旅であったと言えるでしょう。


その中の巧妙さや困難さについては、ここで多くを語ることはしません。

Django Ninjaを学ぶ上でのいくつかの重要なポイントと、それがもたらす満足感——これはとても重要です!——について一緒に振り返ってみましょう。

二、各章の要点振り返り#

各章の中で特筆すべき部分だけをピックアップします。私の個人的な見解が含まれています。

第2章:サンプルプロジェクトと環境設定#

本章で最も重要なのは、なんと言っても「Pythonのモダンな開発ツール」の紹介です。改めて「Python Table Manners」シリーズをお勧めします。

PoetryからMypyまで、私はこれらのツールがモダンなプロジェクトにおける必須要素であると考えています。それぞれに代替品はありますが、好みのツールを選んで、これらの要素が開発プロセスに組み込まれていることを確認してください。

AIがどれほど発展しようとも、プロジェクトの「インフラストラクチャ」は常に不可欠であると信じています。

第3章第1節:ルーティング#

Django Ninjaのルーティング設定は、従来のDjangoやDjango REST frameworkと大きく異なります

この部分において、後発のものは基本的にFlaskが先駆けた「ルーティングデコレータ」に見習っています——優れた設計は互いに参考にし、学ぶ価値があります🫡

新しい書き方はより直感的でシンプルになり、ルーティング設定が異なるファイルに分散してしまうという苦境を減らしてくれます。

しかし、そのためにルーティングが最初にDjango Ninjaを学ぶ上での小さなハードルにもなっています。そこで私は丸々2つの記事を費やして、両者の違いを比較し、その背後にある考え方や考慮事項をより明確に理解できるようにしました。

第3章第3節:HTTPレスポンス#

表面上はHTTPレスポンスについて語っていますが、実はDjango Ninjaスキーマ——すなわちPydantic BaseModelを紹介することが重点です。

本節を「Pydantic入門」と呼んでも全く過言ではありません。

さらに、Pydanticの理解は、APIドキュメントやデータ検証など、後の章にも影響を与えるほどの重要性を持っています。すべての基礎と言えるでしょう。

Django NinjaはHTTPレスポンスの構成とシリアライズにスキーマを使用しますが、これはDjango REST frameworkが使用するシリアライザ本質的な違いはありません

しかし、両者の使用における考え方の違いは、私に全く異なる体験をもたらしました。私の主な見解は〈第15回:レスポンス(三)なぜModelSchemaを使わないのか?——DRFに比べて、私がDjango Ninjaを好む理由〉に書いており、何度も味わう価値があります。

第4章:APIドキュメント#

これについて他に何を言う必要があるでしょうか?重要すぎます!

「コードや型ヒントに基づいてAPIドキュメントを自動生成する」というこのキラー機能がなければ、Django REST frameworkに慣れた私のような開発者が、どうして似たような位置づけの新しいフレームワークを学ぶモチベーションを持てたでしょうか?

怠惰こそがすべての原動力です!

第5章:データ検証とエラー処理#

この章は私の血と涙の結晶です😂

Django Ninjaのデータ検証とエラー処理の方法は、Django REST frameworkと大きく異なります。さらに私を悩ませたのは、以前の仕事で私が「最も正規の」方法で実践していなかったことです——依然としてDjango REST frameworkの開発習慣の影響を受けていました。

その時は「これって使いにくすぎないか!」と思ったのですが——実は私自身の誤解でした。この4つの記事をしっかり書くために、私はほとんどゼロから学び直しました。結果として、視界が開けたような感覚がありました。

そのため、本シリーズで目にした実装方法は、かなり合理的で本場の使い方になっているはずです。経験を踏まえて、そうした落とし穴は私が代わりに踏んでおきましたので、どうぞご安心ください。


ここからは個人的な感想の部分です。

三、執筆における最大の課題#

シリーズ全体の創作において最大の課題だと感じたのは、GitHubプロジェクトコードと可能な限り連動させ、記事に対して適切で一貫したサンプルを提供することでした。

(言うまでもなく、このプロジェクトへの「スター🌟」も大歓迎です)

これは単に例を挙げるよりもずっと面倒で、シリーズ全体の内容の進捗を事前に計画し、APIの実装が各記事のテーマとどう合致するかを考え、「感情移入」できるようにする必要がありました。

さらに、ストーリーの一貫性も考慮しなければなりませんでした。コードは段階的に、簡単なものから複雑なものへ進めなければならず、逆であってはなりません。そうしてこそ、読者はプロジェクトに沿ってスムーズに学ぶことができるのです。

このような計画には技術的な知識だけでなく、教育的な思考と読者意識——読者がどこで「つまずく」かを予測すること——がより多く求められました。

全体として、非常に挑戦的でありながらも非常に面白いプロセスでした。

四、私のDjango Ninjaに対する評価と期待#

Django Ninjaは、ウクライナの開発者Vitaliy Kucheryaviyが一人でメンテナンスしているオープンソースプロジェクトです。更新の頻度はそれほど高くなく、通常はユーザーの期待にすぐに応えることはできません。

しかし、私はこう言いたいです。「もし可能なら、もう二度とDjango REST frameworkを書く日々には戻りたくない」と。

その理由はただ一つ、第15回で触れた「暗黙的であるより、明示的である方が良い」(Explicit is better than implicit)からです。

Django Ninjaは開発を「速く」してはくれないかもしれませんが、絶対に透明で制御しやすくなります。

長期的に見れば、この透明性と制御しやすさがデバッグの時間を節約してくれ、それは単なる「速さ」とは比較にならないと信じています。

未来への期待#

Django自体の非同期(async)サポートが日々向上するにつれ、Django Ninjaのポテンシャルが徐々に解放されつつあると信じています。

近い将来、人々が「Djangoを使ってAPIを書く」と語る時、Django REST frameworkを思い浮かべるだけでなく、この強力で新しい選択肢——Django Ninjaについても言及されるようになることを期待しています。


五、完走の感想#

ふぅ!ついに書き終えました。このプロセスは想像以上に長いものでした。

9月の初めから双十節まで、ちょうど40日間(開幕前の準備を含む)、私は毎朝起きると執筆に取り掛かり、この盛大なお祭りに全身全霊を注ぎ込みました。最終的に、自分でも満足できる作品を提出することができました。

私の見解では、執筆の満足感は「価値を提供し、影響力を発揮する」ことにあります。この価値は読者に対するものだけでなく、作者自身に対するものでもあります——この30の記事の創作を通じて、私のDjango Ninjaへの理解はさらに深まりました。

このシリーズが少しでも役に立ち、今後の開発をよりスムーズに進める助けになれば幸いです。

すべての執筆は一つの学習であり、すべての学習は一つの成長です。このシリーズは終わったかもしれませんが、私たちのソフトウェアエンジニアとしての道はまだまだ続きます。

そして可能であれば、これが一生の追求となることを願っています。