This post is also available in: English-US (英語)
数年以上前、開発を始める際に Django とRuby on Rails のどっちを採用しようかと考えながら、海外サイト含めて結構リサーチしていたのですが、どうも決定的な理由が見つからずに困った経験がありました。
数年経って、Django と Ruby on Rails の両方を使って開発した個人的な感想(あくまで個人的です)という点から、両方のフレームワークを比較した内容をメモとして書いておきたいと思います。
今後、どなたかの判断に貢献できれば幸いです。
Contents
長い文章読むの面倒だから、要するにDjangoとRailsどっちがおすすめなの?
個人的にはDjangoがおすすめです。
理由としては、Railsは確かにコード量は少なくなりますが、コードの内容が抽象化されすぎてて、レール(Railsだけに...)に乗らない開発や、原因不明のエラー(主にライブラリの組み合わせによる)が出た際の対処が大変な印象が強いです。
楽に開発できる分、ブラックボックス感が多いです。
Djangoはその点、ブラックボックス感が少ない印象です。初級者 or 上級者のプログラマに関わらず、同じようなコードになる(コード量多くなるけど)からというのが主な理由になります。
他にも色々と理由はありますので、後の項目のDjango/Railsのメリット・デメリットも参考にしていただけたらなと思います。
流行のPythonやRubyについて学びたいという方は 世界最大級のオンライン学習サイトUdemy をおすすめします。
書いた人、Rubyをほとんど使ってないんじゃないの?
その通りです。Railsを使う際にしかRubyは書きません。
しかも、Pythonで機械学習していたりもしていますので、明らかにRubyよりもPythonのスキルの方が高いので、Djangoが使いやすいと思うのかもしれません。
あと、RailsとDjangoに漠然と存在する思想が、プログラマ的にどっちの感じが好きか?とかいうのも大きいと思います。
あくまで個人的なイメージですが(ここらへんは宗教戦争ぽいので)、Railsは如何にクールなコードを書いて開発するか(なので、抽象化されて短いコードで済む)みたいな感じで、Djangoは如何に明示的にプログラム同士の独立(疎結合)を保つか(なので、コード量は多くなるが可読性が高くてモジュール化しやすい)みたいな印象があります。
Django vs Rails のシェアは?
日本、海外共にRailsのシェアの方が大きいです。
なので、Djangoおすすめですって書いてる人は少数派になります。
Python vs Ruby のシェアは?
言語の比較は、何を開発するかによって変わるので一概に言いにくいのですが、個人的感覚で書いてます。
海外ではPythonが明らかにメジャーだと思います。
日本ではPythonとRubyは、おおよそ同じくらいの人気度かと思います。シェアで比較すると、感覚的には科学系や機械学習界隈ではPython、WEB開発(Railsですね)界隈ではRubyです。
日本語のコミュニティや情報量という点では、明らかにRubyです。Pythonは英語でGoogle検索しないと情報見つからないとかいう状況が頻繁にあります。
Django vs Railsの 学習コストは?
RailsはRubyが書けるとか言うよりかは、Ruby on Railsという名前の通り、Rails独特のルール縛りがあります。なのでRubyを書いているというよりかは、Rails独特の書き方をしている感覚です。
Githubにあるようなアプリの雛形を軽く修正して使うなどの場合に Rails はすぐ使えて便利ですが、レールに乗らない開発やライブラリの組み合わせによるエラーがでた際には非常に大変です(という個人的印象)。
ライブラリの組み合わせによるエラーがでた際には、抽象化されたRubyのコードを丁寧に読み解く必要があるので、けっこう大変です。
Djangoはある程度Pythonが理解できていれば、素直なコードで構成されているので全体像は理解しやすいと思います。
MTVのうちテンプレート(ヘルパーなど)の記法がDjango独特ですが、チュートリアルを参考にする程度で使えると思います。
ライブラリの組み合わせによるエラーがでた際にも、コード量が多い分、可読性が高いので読み解くのが比較的楽な印象があります。ただ、日本語周りの取り扱い(UTF-8のencoding,decoding)の対処にたまに時間を取られたりします。
また、PythonだとFlaskという有名な軽量ウェブアプリケーションフレームワークがあり、使い方はDjango似たような部分がたくさんありますので、学習コストに対する見返りは大きいのかもしれません。
Django/Railsのメリット・デメリットは
Django/Rails各々のメリットの逆がおおよそ、デメリットみたいな感じです。主にメリットを列記しておいて、デメリットを括弧内に書いています。
最後は、メリット・デメリットでなく好み(開発するチームのスキルセットとか)によって決めるのが良いとは思います。
Railsのメリット:
- Railsはコード量が少なくて、簡潔な書き方ができる(明示的でないので、コード内容が分かりにくい)
- Rubyは日本語周りが強い(慣れればPythonでもあまり苦にはならないが、この点は明らかにRubyに軍配)
- Railsは日本語コミュニティの層が厚い(海外においては情報量ではDjangoが強い)
- バージョンアップが早い(コードがすぐに陳腐化する、メンテナンスにおいては致命的)
- Railsは便利なライブラリが充実している(ブラックボックスが多い、エラーが出たときに結構大変)
Djangoのメリット:
- 上級者と初心者が書いたコードがあまり代わらない(コード量が多い)
- DjangoはRailsに比べるとコード量が多くなる(明示的で、コードが分かりやすい)
- (個人的には)DjangoはRailsと比べると別のアプリにモジュールが移植しやすい(一つのアプリ内で重複するコードが多くなる)
- (個人的には)Djangoも便利なライブラリが充実している(コードが明示的なのでRailsに比べるとブラックボックスが少ない、エラーが出ても対処が比較的容易)