LoginSignup
1
1

More than 5 years have passed since last update.

RubyKaigi2014 Day3

Posted at

RubyKaigi 2014 の 3日目まとめ

おはよう Rails

// とりとめもなく、気になったワードだけピックアップしておく

  • ECのパッケージを使う場合に比べて、Railsフレームワークの知見(デプロイ、テスト、etc)を活用できたのは嬉しい
  • rake setup で ミドルウェアのセットアップ等含めて実施してくれる
  • Rails new してちょっと準備したら gem が 100個くらい入るじゃないですか
    • padorino 使ってると辛い
      • Railsじゃなくても動くべきじゃん!というgemがRails実装に依存してたりして...
      • Railsを選ばないと辛い
  • gemを手直ししたい
    • pull-req出す or monkey patch どっち?
    • private repo に fork して、パッチ宛てて、private gem serverにupしてる
  • gemを入れるのに抵抗がある
    • vs. gem入れないと世界規模でコピペしてる感じで嫌だ
    • 消し忘れたgemがGemfileに残ってる
    • 未使用のgemを検出するgemとか欲しい
  • cron辛い

Speeding up Rails 4.2

  • Aaron
  • たこ焼き仮面
  • RedHat
    • ManageIQ .. 仮想マシン管理ツール
  • Rails Contributors (コミット数 No.1)

Rack

  • もう終わり
  • Rackは楽じゃない
  • the_metal 作った。うまくいけば Rack2.0 になる
  • 今のRackの問題
    • env .. どこでもだれでも変更できる (== グローバル変数)
    • ストリーミングめんどい
    • the_metal のアプローチ
      • call(req, res) .. req と res はIOのようなインタフェースを持つ
      • tenderlove/the_metal

Rails4.2 speed up

  • Adequate Record
    • ActiveRecord の速度を2倍にする
  • benchmark/ips というgem使ってる
  • Blackbox Testing に使ってる
    • Routes と link_to には関係がある?
      • 要素数に相関は無いが、パラメータ数には正の相関がある
  • GC.stat()
    • allocation_tracer も便利(ブロック内で確保されたobjectを確認したりできる)
  • リクエスト処理内部で一時的に作られるオブジェクトを減らした話
    • String -> Buffer -> String と変換していたのを、中間のBufferを無くした
  • 呼び出し側がルールを守るならば、呼び出される側をシンプルにできる
    • 呼び出す側が nil を渡さないなら nil チェックを省略できる
    • 呼び出す側が常にStringを渡すなら .to_s を省略できる

まとめ

  • 一番早いコードは存在しないコード
  • メソッドが扱うオブジェクト種別を限定すれば、コードはシンプルになる。シンプルなコードは早くなる。
  • 計測すること measure, measure, measure
  • Rails4.2 は今までで一番早いRailsになる

Practical Metaprogramming in Application

  • moro
  • はじめる! cucumber
  • 永和システムマネジメント
  • idobata

ゴール

  • メタプログラミング怖くないよー
  • メタプログラミング使いすぎるとメタメタになっちゃうよー

メタプログラミング

  • コード実行時に言語構成要素を動的に生成する
  • Rubyの言語構成要素
    • class /module
    • object
    • method
    • proc
class Book
  def title
    @title
  end
  def title=(t)
    @title = t
  end
end
# --
class Book
  attr_accessor :title
end
  • これもメタプログラミング

Pitfail

  • 使いすぎるとよくわからんなる (読みにくい、メンテしにくい)

実際のアプリケーション開発でどうやって活かすか

  • 問題領域を一段メタなところに広げて、コードをシンプルに書くことを考えると、ちょうど良い
  • AR の has_many :reviews
    • reviews を取ってきて配列を返す... のではなく、 Association Object を返すだけ
    • Book#reviews.build みたいなのは Association Object が面倒みてる
    • 直接親子関係を返すのではなく、その関係性を表現するオブジェクトを用意する
      • 関係性を表現する部分ではなるべくメタプログラミングを使わない
      • ユーザが使いたい/使わせたいインタフェースに繋ぎこむところだけメタプログラミングを使って。

Case: Post / Comment / Photo

Everything is Broken: A Story of Hope

Fluentd Hacking Guide

  • sonotsさん
  • vimプレゼンテーション
    • これは後でビデオ見るほうが分かりやすいかも
    • 或いはコード読むべし
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1