DjangoとLarevelは、多くの現場で使用されているWebフレームワークです。
私自身、Laravel案件から、Django案件にシフトした経験があるのですが、Djangoの開発現場にいると、「Laravelはやったことあるけど、Djangoは初めて」という人に多く出会います。
どちらも人気のフレームワークですが、(少なくとも日本国内においては)LaravelやPHPのエンジニアや案件の方が多いためでしょう。
そこで、本記事では、両フレームワークの比較や、Laravelエンジニアだった筆者の実体験をもとに、Djangoの学習でつまずいたことや、得られたメリット等について紹介します。
- ※Source・・・
- 弊社とお付き合いのあるITフリーランスの方や弊社プロパーエンジニアを中心に、
現役のITエンジニアの方の体験談をもとに執筆されたシリーズコラム
両フレームワークの比較
DjangoとLaravelを比較し、違いやそれぞれの特性について、いくつかピックアップして紹介します。
言語
Django
Djangoの使用言語はPythonです。
Pythonは、Web開発に限らず、機械学習・スクレイピング等、様々な用途で使用でできる汎用的なプログラミング言語です。
AIの機能等、通常のWeb以外の機能も備えたアプリケーションを開発したい場合は、Pythonを使用したDjangoの方が有利といえます。
Laravel
Laravelの使用言語はPHPです。
PHPはWeb開発に特化した言語であり、世界中のウェブサイトで大きなシェアを占めるWordPressの使用言語でもあります。
2022年12月現在、正社員・フリーランスともに、国内のエンジニア求人数はPythonを上回っており、PHPはWeb開発においては非常に大きなシェアをもつ言語です。
一方、PHPにはPythonのような汎用性はありません。LaravelでAI機能付きのサービスを開発する場合は、外部サービスをAPI連携する等の工夫が必要となります。
発表
- Django : 2005年7月
- Laravel : 2011年6月
設計思想・哲学
Django
Django公式ドキュメント 設計思想には、以下のような設計思想が記されています(※一部抜粋)。
- 疎結合と高い凝集度
- 短いコード
- 同じことを繰り返さない (DRY)
- 暗黙よりもはっきり示した方がいい (Explicit is better than implicit)
Djangoは、開発者によるコードの差異を少なくする、という設計思想に基づいたフレームワークです。
そのため、コーディングの柔軟性はLaravelに比べて低いと言えますが、開発者の技術力等により、出来上がるコードの差異が少ないというメリットがあります。
Laravel
Laravel公式ドキュメント Laravelの哲学には、以下のように設計思想が記されています(※一部抜粋)。
- アプリケーションの機能性を犠牲にせずに、開発工程を開発者にとって楽しいものにする
- 表現力に富むエレガントな記述
- 幸せな開発者が最高のコードを書く
Laravelは、開発工程の自由度や柔軟性を重視する設計思想に基づいたフレームワークです。
Djangoに比べて、開発者の技術力により、出来上がったコードの差異が大きくなる傾向にありますが、その分、カスタマイズが効きやすく、柔軟な開発が可能です。
開発されたサービスの例
Django
YouTube、Instagram、DropBoxなど
Laravel
ぐるなび、時事通信ニュースなど
アプリケーションアーキテクチャ
Laravel
Laravel は、MVCアーキテクチャのフレームワークです。
- Model(モデル ) : データベースとのやりとりや処理
- View(ビュー) : 画面表示・UIの出力
- Controller(コントローラー) : ModelやViewとやりとりし、全体の制御を担当
Django
Django は、MVTアーキテクチャのフレームワークです。
MVTは基本的には、MVCモデルとほぼ同じアーキテクチャですが、役割の呼称が異なります。
- Model(モデル ) : データベースとのやりとりや処理
- View(ビュー) : ModelやTemplateとやりとりし、全体の制御を担当
- Template(テンプレート) : 画面表示・UIの出力
Laravelでいう、View(ビュー)にあたる役割は、DjangoではTemplate(テンプレート)と呼ばれ、Controller(コントローラー)にあたる役割が、View(ビュー) と呼ばれます。
管理画面
Django
Djangoには、管理画面がデフォルトの機能として備わってます。
簡単にデータベースに紐づいた管理画面を作ることができ、テーブル操作もすることができます。
管理画面からのテーブル操作は、ある程度できることが限られますが、踏み込んだテーブル操作が必要でなければ、クライアントツール等を使用しなくても開発や運用を進めることができます。
Laravel
Laravelには、Djangoのようなデフォルトの管理画面はありません。
管理画面を使用する場合は、laravel-adminのようなライブラリをインストールするか、自作する必要があります。
デバッグ
Django
Django Debug Tool Bar をインストールすることで、ブラウザにSQL情報など、デバックに使える情報を表示させることができます。
Laravel
Laravelに備わっている、dd関数を使用することで、リクエストされた変数の値を確認することができます。
dd関数の引数に変数を入れてプログラムを実行すると、dd関数が記載された箇所で処理を止め、変数の情報をdumpすることができます。
Djangoの学習でつまずいたこと
続いて、Laravelエンジニアだった私が、Djangoを学習した際につまずいたこと等を紹介します。
DjangoとLaravelは似ているところが非常に多いのですが、異なる機能や仕様があるため、慣れるのに少し苦労しました。
Userモデルの使い方
Djangoでは、デフォルトでUserモデルが設定されています。
Userモデルは、ログインの認証などで使う、アプリケーションのユーザー情報を扱うテーブルのモデルなのですが、デフォルトの設定についてよく理解しておかないと、ハマる原因になりがちです。
さらに、Djangoの公式ドキュメントにおいても、デフォルトの設定のUserモデルを仕様することは非推奨とされており、カスタムすることが前提となっているため、注意が必要です。
Django公式 プロジェクトの開始時にカスタムのユーザーモデルを使用する
クラスベースビュー
Djangoには、関数を使用してビューを記述する他に、Djangoに用意されたクラスを仕様するクラスベースビュー(class based view)が存在します。
クラスベースビューを使うことで、個別にビジネスロジックを記述をしなくても、クエリ操作の機能等を実装することができ、コード量の軽減・冗長性の排除・開発効率の向上を実現することができます。
Django固有の機能であることもあり、始めはクラスベースビューの種類・機能・実装方法を把握するのに、少し時間がかかりました。
ただ、基本的なWebアプリケーション開発をやったことがある方であれば、すぐにキャッチアップできるかと思います。
クラスベースビューは、柔軟なカスタマイズを要求しない機能であれば、非常に効率よく開発が進めることができるため、Djangoの大きなメリットであると言えます。
Djangoの標準関数やクラスの使い方
前述したクラスベースビュー以外にも、Djangoには備えつきの関数やクラスが多く用意されています。
Djangoの関数やクラスを使いこなすことで、無駄なコードを書かずに、効率よく開発をすることができるのですが、Djangoの特性についてよく理解する必要があります。
Djangoの関数やクラスの内容を把握し、最適な使い方を考えられるようになるまでは、Djangoの学習を始めてからしばらく時間がかかりました。
ただ、ある程度、Djangoの機能について慣れてからは、Djangoの関数やクラスをうまく使うことで、非常に効率よく開発を進めることができました。
Djangoを学習して得られたメリット
続いて、私自身がDjangoを学習して得られたメリットを紹介します。
ちなみに私の場合、Djangoを学習したことによる、デメリットは特にありませんでした(良いことばかりでした・・!)。
メリット・デメリットは、各個人のおかれている状況によって大きく異なるかと思いますが、あくまで一例として参考になれば幸いです。
1. 対応可能な案件の幅が広がる
もともと、PHPやLaravelの案件を中心に参画していたのですが、PythonやDjangoの案件にも参画することができるようになり、対応可能な案件の幅が広がりました。
現在は、Djangoの案件に参画しているのですが、Flaskの案件のオファーをいただいたこともあるため、PythonのWeb開発案件であれば、対応できるようになったと言えます。
※よろしければ、関連記事『フリーランスエンジニアが未経験の技術や学んで案件に参画まで至った体験談』もご覧ください。
2. 個人アプリ開発の効率アップ
Djangoを使って個人アプリ開発もしていたのですが、Djangoの特性について理解すればするほど、開発効率がどんどんアップしていきました。
柔軟なカスタマイズを要求せず、クラスベースビュー中心のDjangoの機能に寄せた設計であれば、Laravelに比べて、効率良く開発することができます。
始めは、Laravelを使った個人アプリ開発も考えていたのですが、Djangoの学習にかかった手間を考えても、総合的には工数を押さえて、効率よくリリースまで進めることができました。
※よろしければ、関連記事『フリーランスエンジニアが、未経験技術に挑戦するメリット・デメリットや、オファーを獲得するまでに実践したことについて』もご覧ください。
3. Pythonでのデータ分析や処理ができるようになった
DjangoでのWeb開発を実践したことで、Pythonの言語そのものへの理解も深まり、Web開発以外の領域でも活用することができるようになりました。
フォスターアカデミーに参加し、データ分析や処理の手法について学習したのですが、Pythonの経験があったため、学習内容が定着しやすく、データ分析用のツール等も、ある程度使えるになりました。
4. ソフトウェア開発やプログラミングの理解が深まる
こちらは、DjangoやPythonに限ったことではないのですが、新しい言語やフレームワークを学習することで、ソフトウェア開発やプログラミング自体への理解が深まりました。
LaravelとPHPの開発だけでは分からなかったことも、Djangoに挑戦することで理解できたケースが多く、色々な技術に触れることで、エンジニアやプログラマーとしての知見・経験値は大きく向上するものだと実感しています。
まとめ
本記事では、筆者自身の体験談を交えながら、DjangoとLaravelの比較や、Djangoの特徴・学習するメリットなどを紹介させていただきました。
Laravelエンジニアで、Djangoに興味があるけど挑戦しようか迷っている方がいらっしゃいましたら、本記事の内容が少しても参考になれば幸いです。
掲載記事に関してのお問合せと、
記事執筆にご興味をお持ちの方・ご協力いただける方は下記にご連絡下さい。
株式会社フォスターネット CV課 keiei-kikaku@foster-net.co.jp
[ 寄稿者 ]
パッタナー株式会社
代表取締役社長
佐藤寛人
・都内で特別学校の教員として9年間業務に従事。在職中、JICA青年海外協力隊にてタイ派遣を経験。
・2020年4月から、プログラミングを学習しITフリーランスとして活動