Hatena::ブログ(Diary)

130単位

2012-11-24

Rails4 beta さわってみたメモ #railshackathon

Rails4、先取りセミナーなんかもあったりして少しずつ浸透してきてる感がありますね。そんな中 no title に参加してて、Rails4でアプリを作ってみたりしたので、その感想とか書いてみます。不具合などはあくまで11/24時点の情報になります。

StrongParameters

  • Modelでattr_accessibleは使わない
  • ScaffoldでController に {modelname}_params というメソッドができるのでそれに倣うのがいいかも
  private
  def user_params
    params.require(:user).permit(:name, :password, :password_confirmation)
  end
  • ここで上書き許可するカラムを設定して、User.new(user_params) などとする

テスト

  • Ruby1.9本体にも入ってるminitestがデフォルトになっている
  • MiniTest::Specというクラスがあり、RSpec的記述に対応してる
    • no title
    • should が must に変わった感じ
    • context はないので使いたければaliasする必要がある
  • 個人的にデフォルト変えたくない派だったりするので、今後はRSpecでなくminitestを採用しようかと
  • ジェネレーターで生成される test/**/*_test.rb のまま書くとrails.vimシンタックスハイライトが効かない
    • spec/**/*_spec.rb にリネーム or 生成されるようにする
    • あるいは vim の設定をいじる
  • minitest/pride を requireすることで実行結果が少しカラフルになる
  • FabricationはRails4未対応
    • activerecord4 ブランチを使う

I just pushed up a new branch called activerecord4 which should work if you are using edge rails. Point your Gemfile to that and you should be all set.

no title
  • テスト実行時fixturesを読み込ませないためには test_helper.rb の fixtures :all をコメントアウトする
  • database_cleaner gemを入れなくてもデータがクリアされてるっぽい
  • 本家database_cleanerはRails4未対応なのでforkされたものを使う
  • Guardによる自動実行
    • no title
    • guard init minitest でできるGuardfileは微妙なので書き換えるたほうが良さ気
    watch('test/test_helper.rb')  { "test" }
    watch(%r|^test/(.*)_test\.rb|)
    watch(%r{^app/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
  • Guardのwarning回避のため gem 'rb-fsevent', :require => false をGemfileに追加
  • テスト全実行すると'ruby-prof'がないといわれるため、gem 'ruby-prof' をGemfileに
    • performance_testで使われてるっぽい
    • [追記]上記はGuardで実行した場合のみ

RubyGems

問題なし
問題あり
  • Html2Haml/RubyParser
    • no title
    • 警告でるが変換できた
  • Event-calender
    • no title
    • かなり古いgem
    • generateされるルーティングさえ直せば動く
  • Socery
    • no title
    • attr_protected 関係でうまくいかない
  • Erd
    • no title
    • JS/CSSが読み込まれないのでER図見られない
    • Engineのassets周りで、Sprocketsの問題かも
  • Haml-Rails
  • Compass
    • no title
    • パスが通ってない
    • 下記をinitializersに記述して対応
Rails.configuration.assets.paths << Compass::Frameworks['compass'].stylesheets_directory

Ruby2.0

brew install openssl
CONFIGURE_OPTS=--with-openssl-dir=`brew --prefix openssl` rbenv install 2.0.0-preview1
  • 起動時間など体感的に速い
  • Herokuで2.0.0.preview-1が利用可能だがデプロイでこける
    • Herokuが使ってるBundler1.2.1との相性が悪いらしい

その他

  • http://localhost:3000/rails/info/routes でルーティング確認できる
    • Routing Errorの画面も下部にルーティングが表示される
  • TurboLinks、JSなしのlink_toだけで勝手にAjaxになる
  • Timezoneがなんかおかしくて、JSTにならない
    • config/application.rb に config.time_zone = 'Tokyo'
  • Heroku assets
    • config/environments/production.rb に config.assets.compile = true
    • Compass, Bootstrap-Sass, Haml-Railsは:assetsグループに入れずにグローバルに定義

感想

約2年前のRails3がリリースされた頃、当時はRuby/Rails未経験でその上ググって出てくる英語の記事にも慣れてなくて、相当苦労した気がします。それに比べれば、Rails3.2をある程度触っていればRails4は割とスムーズに扱えるのではないかと思います。Rails本体よりも周辺Gemのほうが、まだ未対応だったりして動かないことがよくあります。遭遇したエラーが翌日には直っていたなんてこともあります。とはいえRails4対応という避けては通れないであろうミッションに、ソーシャルコーディングで参加できるチャンスがたくさんあるともいえます。実際にPull Requestしてみて、良いフィードバックが得られたりもしました。

時間に余裕のある人や新しもの好きな人は、Rails4ぜひ触ってみるといいと思います!

あわせて

※近々ギークハウス元住吉でRails4テーマに勉強会やろうかと思ってます

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/deeeki/20121124/rails4_1st_impression
Connection: close