BPStudy#30 Django vs Rails

Intruduction to Rails

Akira Matsuda (@a_matsuda) | Twitterさん
Opinioned Software

特に2つの思想

  • DRY,CoC

DHHがイケメン天才プログラマ
Rails3ではViewがHTML5採り入れる

Railsを使っているうちに筋の良い習慣や技術が自然に身につく

Head First Railsがお薦め

O/Rマッピング

ActiveRecord
  • モデルのクラスとテーブルが1対1
  • モデルのクラスのなまえとテーブルの名前が勝手に紐付く
  • カラム名がクラスのattributeと対応、クラスの中身が空でもアプリが動く
  • Djangoはモデルからスキーマを作る
  • Railsはモデル中心主義
  • DjangoはFormはFormで別
  • Validation
    • RailsはモデルでValidation
    • DjangoはForm回りでValidation
    • Djangoは複数の画面から同一モデルをいじる場合に問題では?
      • Formの継承でなんとかなるのでは
    • Rails3ではモデルじゃないフォームも対応
      • 全てRESTで表せない事もある

テンプレート

  • Djangoはテキストテンプレートエンジン
    • Django専用のエンジン
    • 基本的にプログラマブルな記述は使えない
    • テンプレートはロジックを絶対に含ませない
    • じゃロジックが必要なときは?
      • コントローラでがんばる
      • テンプレートタグを自作する
    • テンプレートタグの作りやすさ
      • 支援APIがある
      • 2,3行とか
  • テンプレート継承ができる
  • Djangoテンプレートエンジン以外もOK
  • Djangoテンプレートエンジンの残念な点
    • Pythonなのに閉じタグが必要
      • デザインなとの協業
    • 代替テンプレートエンジンは?
      • Jinja:Templateがテンプル(寺)だから神社
    • コンパイル済みのものを使えない
  • Rails erb
    • HTMLっぽいテキストだが、なんでもあり
      • 一歩間違えるとPHPみたいに...
    • erb以外のテンプレートエンジンは?
      • 20世紀っぽい
      • hamlとかある

デプロイ

  • Railswsgiがなかった
    • rackが最近作られた
    • Railsはrackの上で動く
    • mod_rack(Passenger)がメジャー
      • nginxでもapacheのモジュールでもコンパイルできる
      • 動作を安定していて、導入も簡単
    • fcgiでも遅い
  • Djangofcgiを結構使う
  • fcgiが落ちたときとかめんどい

開発環境

Django
  • easy_installでもいける
  • Windowsでも全然動く
    • Windows2003サーバで動かしている人も
  • DB
Rails
  • gem install railsだけでいける(3 words!!)
  • ruby安定系1.9.1は使ってはならないRuby Railsが動かない
    • 日本人にとっては動かない
    • 動く地域の人もある
  • ruby1.8.7がよい
  • Windowが推奨できない
  • まずはMacを買うことから!!
  • DB
    • MySQL第一DB
      • 本番はこっちが推奨
    • 最近SQLite3
      • 開発のときには便利
    • PostgreSQLでも動く
    • Oracleとかはイバラ道
      • Rails1まではサポート
      • Rails2.0からはずされる
      • Rails3ではまたSupported
エディター
  1. Vim
  2. テキストエディット?
  3. emacs
  4. aptana(eclipse)
    1. 動きがもっさりしている
  5. NetBeans(IDEのうちでは一押し)
  1. emacs
  2. pyscripter
  3. py-dev
ローカライズ
  • Django
    • 設定すれば管理画面も日本語化
      • gettext
      • gettext関連のツールが使える
      • gettext使っている歴史も長いし
  • Rails
    • 英語をしゃべる人のフレームワーク
    • Rails i18nプロジェクトが加わって2.2から世界のフレームワーク
      • gettextではなくてyaml
      • gettextは難しい、コンパイル
      • fuzzyという概念はない
      • YY/MM/DDとか国によって日付の違いもLocaleでみて切替える
    • 翻訳ツールとかあるの?
      • 便利なジェネレータがある

プラグイン

  • Rails
    • プラグイン
      • いろんな人が後から追加できる柔軟な機構が用意されている
      • ちょっと作ったらなんでもgithub
    • 開発者が多い
  • Django
    • 管理画面
      • デバッグなどもアプリケーションがたくさんある
    • bitbucketかgithubを探せばDjangoもなんでもある

マイグレーション

設計思想、開発サイクル

  • Rails 3.0
    • バージョンアップが頻繁
      • 仕事で使うにはバージョンアップに付いていく
    • 後方互換
      • 身軽
  • Django 1.1