Djangoは2005年リリース当初から、速度、セキュリティ、開発者体験に優れた人気モダンウェブフレームワークの1つ。Pythonベースのフレームワークで、Instagram、Pinterest、Disqusなど、人気サイトやアプリケーションを支えています。

また、フルスタックのウェブアプリケーション開発に役立つコンポーネントも豊富で、機能の拡張が必要になれば、サードパーティ製パッケージのオープンソースエコシステムを利用して、プロジェクトにシームレスに統合することができます。

今回は、モダンなアプリケーションを本番環境で稼働するのに便利なおすすめDjangoパッケージをご紹介します。

Djangoのエコシステム

Djangoは、MVT(モデル、ビュー、テンプレート)デザインパターンを採用しています。多機能で直感的なオブジェクト関係マッピング(ORM)がPythonデータベースと対話し、ミドルウェアとコントローラビューのシステムがHTTPリクエストとレスポンスのサイクルを管理。フロントエンドのテンプレート言語が、動的なサーバーサイドのウェブページをレンダリングします。組み込みのフォームモジュールは、HTMLフォームのレンダリングとバリデーションを行い、パッケージはユーザー認証、キャッシュ、自動メール、静的ファイル管理などを行います。

優れたDjangoパッケージの見つけ方

Python Packaging Indexには、1万以上のDjangoパッケージが揃っています。また、Django Packagesのようなサイトは、サードパーティのパッケージをカテゴリや指標で絞り込むことができるため便利ですが、その選択肢の多さから、プロジェクトに本当に適したものを見つけるのは簡単ではありません。そこで今回は、Djangoアプリを強化する有用で柔軟、そしてよく文書化されているパッケージを厳選してご紹介します。

サードパーティパッケージをインストールして使用するには、プロジェクトの仮想環境でPythonのpip installコマンドを実行し、プロジェクトのルートにあるsettings.pyファイルのINSTALLED_APPS設定にパッケージを追加するだけでOKです。

Djangoモジュールとの違い

Pythonでは、モジュールは名前空間を共有するファイルやファイルの集まりで、プログラムにインポート可能です。Djangoフレームワークは、ファイルを含むフォルダのように、フォーム、モデル、ビューのような数々の小さなモジュールで構成されています。

Pythonパッケージは、プロジェクトが共有できる複数のモジュールを束ねたもの。Djangoアプリは、Djangoプロジェクト間で共有可能な、独立したPythonパッケージです。Djangoプロジェクトは、ウェブアプリの構築に必要なすべてのファイルを含む、少なくとも1つのDjangoアプリで構成されます。

おすすめDjangoパッケージ15選

それでは、おすすめのDjangoパッケージを見ていきましょう。

1. Django REST Framework

Django REST Framework(DRF)を使用すると、Djangoプロジェクトを拡張し、シリアライズされたJSONデータや、XML、YAMLなどを扱えるようになります。Django ORMと直接対話してリレーションを定義することができ、ユーザー認証機能とPermission機能も利用できます。

組み込みのDjangoビューは、RESTful APIのエンドポイントを生成し、サーバー上のプロジェクトデータに対して、作成、読み取り、更新、削除(CRUD)操作を実行。また、ブラウザでAPIと直接やり取りするためのブラウジング可能なAPIも用意されています。

2. Django Haystack

Django Haystackは、Djangoプロジェクトに堅牢な検索エンジンツールを実装します。モジュール化されたDjangoアプリは、どの検索バックエンドに接続しても一貫したAPIを提供してくれるため、プロジェクトのライフサイクルを通して1つの検索バックエンドに縛られる必要がなくなります。

プロジェクトのモデルデータに対して、ユニークできめ細かく調整された検索インデックスを作成し、Djangoビューを活用して、バックエンドにとらわれない検索機能をフロントエンドのテンプレートに追加することができます。

3. Django Debug Toolbar

Djangoデフォルトのデバッグ設定では、実行時のエラーや例外の完全なPythonスタックトレース、およびローカル開発環境の状態を表すメタデータが提供されます。とは言え、さらに掘り下げて厄介なバグを扱わなければならない場合は、Django Debug Toolbarが一役買ってくれます。インストールして、設定でDEBUGTrueにするだけでOKです。

このパッケージは、実行済みのSQLクエリ、静的ファイル、プロジェクトのキャッシュ機構に保存または取得されたデータなど、現在のリクエストとレスポンスのサイクルに関する詳細なデータをリアルタイムで提供してくれます。このデータを用いて、アプリケーションのパフォーマンスをデバッグし、最適化することができます。

4. Django Sentry

Djangoサイトを本番環境にデプロイする際、個人情報やアプリケーションのセキュリティを保護するため、すべてのデバッグ機能をオフにすることが欠かせません。とはいえ、訪問者がランタイムエラーに遭遇しないかどうかを監視することも依然として重要です。

Sentryには、フリーランス開発者や小規模な開発チーム向けのお得な無料プランがあり、サイト上の活動を監視する人気オープンソースソリューションです。シンプルなインターフェースから、高度に設定可能な監視、ログ、トレースを行い、本番環境での問題を回避することができます。

5. Django Cors Headers

Djangoプロジェクトが、サーバーとは別のドメインでホストしているフロントエンドやアプリケーションにデータを提供する場合、ウェブセキュリティプロトコルである、オリジン間リソース共有(CORS)を有効にします。

Django Cors Headersは、HTTPリクエストとレスポンスを処理するDjango内蔵のミドルウェアシステムを活用し、この処理を簡素化します。通信可能な外部ドメイン一覧を指定することができます。

6. Django Filter

Djangoアプリでは、ユーザーが個々のデータベースフィールドや属性に対応するパラメータに基づいて、データを要求することが多々あります。Django Filterは、Djangoビューで、このような一般的なクエリタイプに対する繰り返しのコーディング作業を削減します。

FilterSetオブジェクトを定義するだけで、URLパラメータや、テンプレート内の自動生成HTMLフォームを通して、クエリするモデルフィールドを含むことができます。

7. Django Extensions

Djangoのコマンドラインユーティリティの管理コマンドを使用すると、開発サーバーを動かしたり、データベースマイグレーションを作成してデータベースに実行したり、新たなDjangoアプリを構築したり、テストツールを管理したりすることができます。

Django Extensionsは、Django ORM経由でプロジェクト全体のデータベースを再構築するスクリプトや、プロジェクトの全モデルファイルを含む対話型シェルを自動的にインポートしたり、ユーザーのメールアドレスを読みやすい形式でエクスポートしたりといった追加機能を提供してくれるパッケージです。管理コマンドを強化することができます。

8. Django Storages

ローカルで開発している場合、Djangoプロジェクトのメディアファイルは、メディアルートの場所として設定したローカルフォルダに保存されます。また、このファイルはデフォルトの開発サーバーから提供されます。

しかし、本番システムでは、NginxやApacheのような別のHTTPウェブサーバー、またはAmazon S3(Amazon Simple Storage Service)やDigitalOcean Spacesなどのクラウドストレージサービスを経由して、メディアファイルを提供するのが通例です。これによって、メディアファイルを含むローカルフォルダを複製することなく、アプリケーションを水平方向に拡張できます。

そこで役に立つのが、Django Storagesパッケージ。たった数行のコードで、上記のようなクラウドストレージサービスを使用するための設定を行うことができます。

9. Django Redis

複雑なデータベースクエリやテンプレートレンダリング操作は、時間がかかるもの。Djangoのビルトインキャッシュフレームワークは、このような操作の結果を保存し、ウェブアプリケーションのパフォーマンスを向上させます。アプリケーションは、ほぼすべてのリクエストをこのキャッシュから直接レンダリングできるため、読み込み時間が短縮されます。

結果をプロジェクトのデータベースやファイルシステムにキャッシュしたり、直接メモリにキャッシュしたりすることも可能です。Django Redisは、人気かつオープンソースのRedisをプロジェクトのインメモリキャッシュバックエンドとして設定するのに役立ちます。Redisは高いパフォーマンス、スケーラビリティ、多用途性で知られており、多くのアプリケーションで採用されています。

10. Django Guardian

プログラム、あるいはDjangoの管理画面上で、きめ細かい権限を管理するのには手間がかかります。そんな時には、Django Guardianを利用すれば、シンプルで直感的なAPIを使って、数行のコードでオブジェクト単位のユーザーまたはグループ単位の権限を管理可能に。

11. Django Channels

ほとんどのDjangoアプリケーションは、HTTPリクエストとレスポンスのサイクルの中で動作し、ウェブページ全体のリフレッシュ、jQueryやhtmx、HotwireのようなAJAX対応フロントエンド技術、ReactやVueのようなフレームワークを通してコンテンツを読み込みます。しかし、ウェブソケット、MQTT、チャット、モノのインターネット(IoT)プロトコルのようなリアルタイム機能には、サーバーへのオープンな接続が必要です。

Django Channelsは、同期・非同期の幅広い通信を容易にします。例えば、サイト管理者が顧客と直接やりとりするためのライブチャットサーバーのセットアップも可能です。

12. Django Celery

Celeryは、人気のあるオープンソースのタスクキューです。通常のHTTPリクエストとレスポンスのサイクルで処理するには時間がかかりすぎたり、予測不可能だったり、リソースを大量に消費したりするアプリケーションプロセスを、を決められた日時に実行します。ユーザーへの自動メール送信、大きなテキストやメディアファイルの処理、ウェブのスクレイピング、サードパーティのAPI呼び出しの処理、データ分析、レポート生成などのプロセスをトリガーできます。

Celeryのインターフェースで、Djangoプロジェクトのコードに直接Celeryタスクを定義し、特定の時間や定期的な間隔でタスクを日時を決めて設定しておくことができます。

13. Django Allauth

Djangoの全機能を備えた認証システムは、プロジェクトのユーザー管理に便利ですが、ソーシャルログインのサポートは組み込まれていません。ソーシャルログインとローカル認証のメソッドを使ってシステムを組み立てるのは厄介で、Djangoプロジェクトが複雑化され、ロジックの重複をもたらします。

幸い、Django Allauthを利用すれば、これを回避することができます。ちょっとした設定のみで、ローカルのパスワードベースのログインとともに、様々なソーシャルログインサービスを統合できます。

14. Wagtail CMS

自動生成される管理インターフェースを使用すれば、Djangoプロジェクト用に独自のコンテンツ管理システム(CMS)を構築できますが、Wagtail CMSを使えば、より高度にカスタマイズ可能なページモデルを実現することができます。混在コンテンツに対して独自のアプローチをとり、Djangoの機能をフル活用して、コンテンツに溢れたサイトを作成できます。

Wagtailは、Pythonにとって、PHPコミュニティにおけるWordPressのような存在。さらに、開発者を考慮した管理とカスタマイズの柔軟性は、他のCMSと一線を画します。NASA、Google、Mozilla、NHSのような多くの有名企業で採用されているのも納得です。

15. Django Compressor

ブラウザで大きな静的ファイルをそのまま読み込めば、Djangoプロジェクトのパフォーマンスのボトルネックになりかねません。Django Compressorを使えば、あらゆる形式の静的アセットを簡単に圧縮できます。

Django Compressorのtemplateタグは、インラインファイルでもリンクファイルでも動作し、プロジェクトのキャッシュメカニズムと連携して、自動再生成や永続的なキャッシュによる出力ができるように設定可能です。

Kinstaのホスティング

Kinstaなら、アプリのデプロイが簡単です。DjangoプロジェクトのGitリポジトリ(GitHub、GitLab、Bitbucket)に接続することができ、セットアップを終えたら、手動でデプロイするか、リポジトリにプッシュするたびにアプリをデプロイ

Kinstaのホスティングサービスは、試算しやすく透明度の高い価格設定で、手頃に利用できます。必要に応じて柔軟にスケーリングが可能で、PaaS(Platform as a Service)のアプローチで、インフラストラクチャやシステムの更新を管理する手間もかかりません。

Google Cloud Platform(GCP)とKubernetesがバックグラウンドで稼働し、トラフィックの急増にも対応可能。最も重要である優れたウェブアプリケーションの開発に集中することができます。

さらに、GCPのプレミアムティアネットワークと最速C2マシン、サーバーレベルのキャッシュとエッジキャッシュ、および260+箇所から提供されるエンタープライズレベルのCloudflare統合によるCDNも付帯。コンテナ化されたアプリケーションのパフォーマンスを最大化することができます。強力なファイアウォール、DDoS対策、マルウェア&ハッキング対処、HTTP/3とTSL 1.3対応など、堅牢なセキュリティインフラもご用意しています。

まとめ

Djangoのすべての機能を備えたウェブフレームワークは、アプリケーション構築を支える豊富なツールを提供します。機能の拡張が必要になれば、サードパーティのDjangoパッケージがお勧めです。モジュール化されたDjangoアプリとPythonパッケージシステムにより、プロジェクトの成長に合わせて機能を強化することができます。今回取り上げたオープンソースツールを活用して、開発作業を効率化してみてください。

Kinstaのホスティングサービスでは、インフラを心配することなく、手頃な価格でDjangoプロジェクトをスケーリングできます。Kinstaで最高のDjangoホスティング体験を手にしましょう。

Marcia Ramos Kinsta

Kinstaのエディトリアルチームリード。大のオープンソース&コーディング好き。IT業界向けのテクニカルライティングと編集に7年以上携わり、的確かつ簡潔なコンテンツを制作しながら、チームで協力し合い、ワークフローの改善を行っている。