30.7K Views
September 30, 24
スライド概要
TokyuRuby会議15
https://tokyurb.connpass.com/event/330007/
で使用した発表用スライドです
ブルーモ証券CTO
Ruby on Railsと Djangoを比較してみる 2024/09/29 (Sun.) 小林悟史(noel) ブルーモ証券株式会社 TokyuRuby会議15
■ 小林 悟史(小林 ノエル) @free_world21 ■ 本業:ブルーモ証券株式会社 取締役CTO – 米国株・米国ETF専業の長期資産形成特化 型の投資アプリを作ってるFintechスター トアップ https://bloomo.co.jp/ ■ 10年+ ほどフリーランスエンジニア – 途中事業会社の中の人もやった ■ 2022〜:ブルーモ証券株式会社を創業 THE FARM@NY ■ 趣味:旅行・世界のコワーキングスペースめぐ り(ワーケーション的な何か) CARR WORKPLACE@Chicago
Ruby on RailsとDjangoを比較してみる ■ 趣味の個人開発で作ってるプロダクトをDjango + Ruby on Railsの組み合わせで作ってます – なのでそれをネタに発表します ■ 「Django完全に理解した!」くらいのレベル感の人の話なので間違いも多くあるかもしれませ ん ■ 普段Rails使ってる人目線の比較です
Ruby on RailsとDjangoを比較してみる 結論 Ruby on Rails + ActiveAdmin + authlogic + packwerk = Django (+ Django REST framework)
Djangoとは(他のフレームワークと比較して) ■ Python製のFullstackフレームワーク ■ Ruby on Railsとほぼ同期? Express.js, Nest.js, Gin, echo等 Hono等 (Golang系フレー (nodejs系フレーム ムワーク) ワーク) TypeScript Golang microframework microframework TypeORM, Prisma等 自作, GORM等 Django Ruby on Rails Python 2005/7/21 Fullstack Django ORM Ruby 2004/7/24 Fullstack ActiveRecord migration Django migration ActiveRecord::Migration db-migrate等 golang-migrate, goose テスト Django test, pytest minitest, rspec Jest, Jasmine等 built-in RBS built-in (ただしコンパイルオ プション多数) built-in プログラミング言語 Initial release フレームワーク志向 ORM 型サポート Type Hints(built-in)
Djangoとは(他のフレームワークと比較して) 自分で選ぶ必要がない ■ Python製のFullstackフレームワーク 自分で選ぶ必要がある!! (脳死で開発できる) ■ Ruby on Railsとほぼ同期? Express.js, Nest.js, Gin, echo等 Hono等 (Golang系フレー (nodejs系フレーム ムワーク) ワーク) TypeScript Golang microframework microframework TypeORM, Prisma等 自作, GORM等 Django Ruby on Rails Python 2005/7/21 Fullstack Django ORM Ruby 2004/7/24 Fullstack ActiveRecord migration Django migration ActiveRecord::Migration db-migrate等 golang-migrate, goose テスト Django test, pytest minitest, rspec Jest, Jasmine等 built-in RBS built-in (ただしコンパイルオ プション多数) built-in プログラミング言語 Initial release フレームワーク志向 ORM 型サポート Type Hints(built-in)
Djangoの特徴1:ビルトインの管理画面がある ■ 味わいのある管理画面付き ■ ActiveAdminにどことなく似てる(個人の感想です)
Djangoの特徴1:ビルトインの管理画面がある ■ 味わいのある管理画面付き ■ ActiveAdminにどことなく似てる(個人の感想です)
Djangoの特徴2:シンプルな認証機能付き ■ シンプルな認証機能機能を提供するメソッドがある ■ Railsでいうところのauthlogicとかsorceryみたいなやつが入ってるイメージ
Djangoの特徴3:MVT(Model-View-Template) ■ DjangoはMVT(Model-View-Template)である ■ RailsはMVC(Model-View-Controller) Django Ruby on Rails Model Model Python Ruby 1つのModelがDBの1テーブルと1:1対応 1つのModelがDBの1テーブルと1:1対応 呼び方 View Controller 記述言語 Python Ruby 特徴 RailsでいうところのControllerと思ってくれてOK 割愛 呼び方 Template View 記述言語 Django template language ERB, Haml等 Pythonスクリプトは埋め込めないので、 ビジネスロジックを記述することはほぼ不可能 Rubyスクリプトも埋め込めるので ある程度ビジネスロジックも書ける 呼び方 ビジネスロジッ 記述言語 ク層 特徴 入出力層 表示層 特徴
Djangoの特徴3:MVT(Model-View-Template) ■ DjangoはMVT(Model-View-Template)である ■ RailsはMVC(Model-View-Controller) Django Ruby on Rails Model Model Python Ruby 1つのModelがDBの1テーブルと1:1対応 1つのModelがDBの1テーブルと1:1対応 呼び方 View Controller 記述言語 Python 呼び方 ビジネスロジッ 記述言語 ク層 特徴 入出力層 一番の違い Ruby 特徴 RailsでいうところのControllerと思ってくれてOK 割愛 呼び方 Template View 記述言語 Django template language ERB, Haml等 Pythonスクリプトは埋め込めないので、 ビジネスロジックを記述することはほぼ不可能 Rubyスクリプトも埋め込めるので ある程度ビジネスロジックも書ける 表示層 特徴
Djangoの特徴3:MVT(Model-View-Template) ■ ちなみに Django template language はこんなかんじ ■ mustacheとかHandlebarsの系譜?
Djangoの特徴4:モジュラーモノリス ■ 個人的に最大の特徴はこれだと思ってる ■ projectの下に複数のappを持つ構成 – Djangoのapp = 1つのRailsプロジェクト(rails newして作られ るやつ) ■ Railsでいうところのpackwerkがデフォルトで組み込まれてるイメー ジ
Djangoの特徴4:モジュラーモノリス project
Djangoの特徴4:モジュラーモノリス project project作るとproject名でデフォルトで作られるディレクトリ 主に設定ファイルとかがはいってる (Railsでいうところのconfigディレクトリと思って良いと思う)
Djangoの特徴4:モジュラーモノリス project project作るとproject名でデフォルトで作られるディレクトリ 主に設定ファイルとかがはいってる (Railsでいうところのconfigディレクトリと思って良いと思う) 1つ1つのapp。 各appの中にそれぞれModel(とマイグレーションファイル)、 Template、View(+test)を定義できる
Djangoの特徴4:モジュラーモノリス project project作るとproject名でデフォルトで作られるディレクトリ 主に設定ファイルとかがはいってる (Railsでいうところのconfigディレクトリと思って良いと思う) 管理画面の1つのまとまりとして表示される
RilsとDjangoの比較:コマンド系 Ruby on Rails Django project作成 N/A python manage.py startproject ceres app作成 rails new diet python manage.py startapp diet 開発サーバ起動 rails s python manage.py runserver コンソール起動 rails console python manage.py shell 任意のコマンド呼び出 し rails(rake) hoge python manage.py hoge DB作成 rails db:create N/A migrationファイル作成 rails g migration … python manage.py makemigrations migration実⾏ rails db:migrate python manage.py migrate
RilsとDjangoの比較:データベース呼び出し authors - name: string - age: int, null: true published_books - author_id: int - title: string Ruby on Rails Django 全件取得 Author.all Author.objects.all() ID指定ロード Author.find(123) Author.objects.get(id=123) where Author.where(name: ‘hoge’) Author.where(“age >= ?”, 20) Author.where(age: 20..30) Author.where(age: nil) Author.objects.filter(name=‘hoge’) Author.objects.filter(age__gte=20) Author.objects.filter(age__range=(20, 30)) Author.objects.filter(age__isnull=True) 関連呼び出し author.published_books author.publishedbook_set.all()
まとめ ■ Djangoの特徴1: 味わいのある管理画面(Rails:ActiveAdmin) ■ Djangoの特徴2:シンプルな認証機能付き(Rails:authlogic, sorcery等) ■ Djangoの特徴3:Model-Template-View(Rails: Model-View-Controller) ■ Djangoの特徴4:モジュラーモノリス(Rails:packerk) ■ コマンドは基本的に python manage.py でやる(Rails:rails, rake) ■ やっぱりActiveRecordは神!
Ruby on RailsとDjangoを比較してみる 結論 Ruby on Rails + ActiveAdmin + authlogic + packwerk = Django (+ Django REST framework)