5/30(木)-6/1(土) に行われたRubyKaigi2013に参加して来ました。
会社の費用で行かせてもらったこともあり、3日間フルできっちり参加して来ました。
全体として
レベル高かったですね。Ruby内部の動きについての話も多く、面白いのですが難しかったです。
そのほか、
グレード高いお弁当が毎日出たり、(Herokuさんからの提供になります。)ドリンクが飲み放題だったり(Microsoftさんからの提供になります。)、無料の懇親会が開かれたり(GitHubさんからの提供になります。)と、飲食周りで困ることがなかったので大変良かったです。
聞いてきたセッション
一日目
- Opening
- The History of Ruby
- Keynote by Matz
- Ruby Archaeology
- Ruby2.0 reference manual for japanese
- Two Legal Bodies about Ruby and its projects
- TWO CARTOON FOXES: the _why documentary
- Toward efficient Ruby 2.1
- 'bundle install' Y U SO SLOW:Server Edition
- Refining refinements
- Ruby Kaja 2013 / Community Appeal
二日目
- High Performance Rails
- Continuous gem dependency updating with Jenkins and Pull Request
- (お仕事関係で聞けませんでした)
- Ruby on Your Rails
- Keynote COncurrency in Ruby: In search of inspiration
- Concerning 'Application'
- Refactoring Fat Modles with Patterns
- Ruby's GC 2.0
- CRuby Committers Who's Who in 2013
- Lightning Talks
- Ruby Committers vs. the World(To Be Announced)
三日目
- Async proramming is all abount programming synchronously
- If you do not enter the tiger's cave, you will not catch its cub: Objects, DCI, and Programming
- Rails Gems realize RESTful modeling patterns
- The Origamist's Ruby: Folding better code
- Be a library developer!
- Beyond Ruby
- Casual Log Collection and Querying with fluent-plugin-riak
- Complex Event Processing on Ruby and Fluentd
- Ruby 1.8.7
- Paired ruby
- Keynote Fight with Diversity
仕事にすぐに活かせそうなこと
やはり仕事できているのですぐに仕事で実行できる内容はすごく心に残りましたね。以下のこれらは早速月曜日から実現していこうと思います。
High Performance Rails(2日目-1)
会社でまだRailsのパフォーマンスが問題になる状況になっていないのですが、応答速度50msというクックパッドさんの目標値は参考になったので、うちでもそれが出せているのかは測っていこうと思います。
面白かったのが
link_to hello_index_url
と link_to controller: "hello", action "index"
の2つについて、後者のほうが100倍遅いという検証結果が得られたということ。意識して、前者を使っていこうと思います。
また、テンプレートエンジンの速度が slim > erb > haml らしいので、個人でやるときはslim使っていこうと思います。ただ、これがパフォーマンスに占める割合は小さいので、今hamlのプロジェクトをslimに置き換えるメリットは薄そうでした。
Continuous gem dependency updating with Jenkins and Pull Request(2日目-2)
Jenkinsでbundle update
を実行し、testを実行し、テストの成否にかかわらずpull requestを出すというジョブを継続的に実行しているというものです。
これを行うことで、gemのバージョンが最新に保つことができます。いつのまにかgemのバージョンがかなり新しくなっていて、アップデートしようとすると全然動かずに、
- 諦める
- 頑張って対応する
- 互換性維持のためのコードを書く
みたいな選択肢を強いられるとかありがちだと思います。
これを実践すると、当然バージョンアップによってテストが通らないことも多くてそれに修正に時間を取られますが、こういうのもテストコードを書くのとかと同じ考えで、負債の先払いをして後になって問題を発生させないということに繋がるんだなぁと思って実践したいと思いました。
ちなみに、bundle outdated
で最新ではないgemが出るというのを知りませんでした。
Concerning 'Application'(2日目-5)
Concerning 'Application' // Speaker Deck
RailsのActiveSupport::Concern
の話。 これを使うことにより、modelのコードが長くなることを防げる。
普通にmoduleを使うのとの違いは、
- has_manyやvalidatesなどをinclude{}に入れることができる
- classメソッドをincludeできる。
特になるほどな〜、と思ったのは、
class Question < AR::Base
include Taggable
include Commentable
include Censorable
# ...
end
class Answer < AR::Base
include Taggable
include Commentable
include Censorable
# ...
end
の部分。"タグ付けできる"、"コメント付けできる", "検閲できる"という特徴をConcernに切り出して、Question, Answerに切り出している点。これはQ&Aのモデルですが、SNS的なものでも例えば、「投稿」に"コメント"、"いいね"、"タグ付け"ができる、「コメント」には"いいね"はできるが"コメント"、"タグ付け"はできない、みたいな仕様にしたいとき、「」の単位でモデル、""の単位でConcernを切り出せば
- 各クラス、モジュールが疎結合
- モデルの実装が読みやすくなる
- モデルの仕様も明白になる
といいことづくめな気がしました。ちゃんと使いこなせてなかったので、今仕事で書いているコードに適用できないか見なおしてみます。
Refactoring Fat Model Pattern(2日目-6)
Concernとは異なるアプローチでFat Modelに対応するパターン。 英語のスピーカーの方だったため、完全に理解できていないのですが、以下のリンクに詳細に書かれている内容なので熟読して身につけます。
7 Patterns to Refactor Fat ActiveRecord Models - Code Climate Blog
Rails Gems realize RESTful modeling patterns(3日目-3)
Rails基本のresources以外のRESTパターン(searchやログイン)を、実際に使われているgemの設計の仕方を元に見ていくというセッション。
内容も素晴らしかったですし、知らなかったgem(認証のauthlogic,ウィザードのwicked)を知れたのが良かったです。
Fluentd関係の2セッション(3日目-7,8)
- Casual Log Collection and Querying with fluent-plugin-riak
- Complex Event Processing on Ruby and Fluentd
@kuenishiさんによるFluentdで使うDBの一つであるriakの話と、@tagomorisさんによるFluentdと、Fluentdプラグインをアプリケーションごとに作らなくてもよくなるための宣言的記述ができるPluginを作った話。
会社でFluentd使いたい使いたいと思っておきながらまだなにもしていなかったので、まずは月曜日に出社したらインストールしてみようと思います。一緒にRubyKaigiに行ったインフラ側をやっている同僚と話して、進め方も見えてきたので。
終わりに
というわけで、3日間非常に良い勉強をさせて頂きました。 また来年もRubyKaigiがあれば、参加したいと思います。
スタッフの皆さま、お疲れ様でした!