渋谷Edge Rails勉強会 第2回

いきなりRails関係ないんですが、月を金星と木星が並ぶというので勉強会の前に渋谷の空を撮影してみました。

f:id:naoto5959:20120327012102j:plain

んで、会場へ入ってGMOカフェでチャイラテを頂き、待機。おいしかったです。というわけで、第2回 渋谷Edge Rails勉強会 @masuidrive氏によるRails3講義 × 株式会社ドリコム事例発表の感想レポートです。当日のハッシュタグは#shibuyarailsでtogetterのまとめはこちら

f:id:naoto5959:20120326191616j:plain

Rails3技術講座

@masuidriveさんからの発表。Rails1〜Rails4までの歴史のお話でした。Rails3から始めた自分にとっては知らないことだらけで大変勉強になりました。

Railsはバージョンアップの速度が速いので追従するために、testを当たり前のように書く!それが一番大事なことかなーと思いましたね。Railsに向いているアプリというのが印象的だったのでメモです。

  • 一般的なWebサービス
  • 常に変化しつづけるアプリ
  • apiアプリ

特に、常に変化しつづけるアプリというところが気になりました。これっていわゆるアジャイルに開発していくアプリを差しているのかなと解釈しました。懇親会でお話し出来たのだから聞けば良かったのですが、メモ書きを見ながらいま気付いたので、時すでに遅しですね。 やっぱりTDDやアジャイルを学んでみるとRailsとの相性バッチリだなーと思うんですよね。必然的に、常に変化するアプリになるであろうし。

scaffold使わないよね、というお話も聞きそびれた。何をしているんだ。個人的にはRESTfulな実装を保つ方法のひとつとして、scaffoldは良いと思っています。きっと生で使わないよね、とかそういう意味だったのかと思ってみたりしています。カスタマイズしていくと、結果それってもうscaffoldと違ったりするような気もしているので、うーん確かに、みたいな。最近、良いなと思うパターンとは以下のようなステップでscaffoldをカスタマイズする方法です。各フェーズはTDDで行います。

  1. リソースを定義して、それをscaffoldで生成
  2. モデルのカラムに応じて、attr_accessibleとするカラムを考える
  3. モデルのカラムに対して、validationを考える
  4. アプリの要件に応じて、CRUDのうち不要なアクションを削る
  5. アプリの要件に応じて、各アクションをカスタマイズ

というふうに考えてるとscaffoldカスタマイズしちゃっているし、結局config/routes.rbで自分でresource定義してから、controllerアクション作っていくスタイル。つまり、scaffold使わないのと同じなのでは?という結論に達しますね、いやはや。あぁそうか大事なのはREST設計か。

test関連のお話で、コード1書くのにtestは3書く必要があるよというお話。これって、非エンジニアに理解してもらうのが本当に難しくて、多分そういうものだ、という信頼ベースで理解してもらうのがてっとり速いのかなと思います。んが、出来れば実際にTDDでの開発を体験してもらうのが良いんじゃないかなーと思い、私は社内でちょいとその辺の挑戦をしようかと思っています。つまり、プランナーにコードを書いてもらうという挑戦です。コード書くのが1週間ならtestも1週間かかると考えよう!というのを実体験してもらえるのではないかということです。まぁコード書いた経験のないひとにTDDは難しいとは思いますが、それをどう解決するか、わくわくしますね(え

非同期ライブラリについては、Resqueがいいよ!というのを知りました。今メンテしているサービスはRails2.3以前のRailsエンジニアが書いていたこともあり、ライブラリが今現在でのモダンなものではないんですね。それは今メンテしている私がモダンなものにしていく必要が有るわけですが、非同期ライブラリについては、Rails3系ではdelayed_jobよりもResqueがいいらしいです。これは知らなかったので、対応せねば、というところです。

監視系に関しては、New Relicが熱いようです。コードレベルで、どこにボトルネックがあるか分かるとかいいですね。herokuのadd-onにもNew Relicがあるようですのでwe love herokuでも対応してみたいですね。

実録!Railsのはまりポイント10選

ドリコムの藤田 武雄さんの発表。Railsのはまりどころについてのお話でした。 scopeでlambda使わないと、classロード時に実行されちゃって、切ない思いをするというお話、経験ありです。scopeに限らず、例えば、validationとかもそうですよね。そもそもscopeはRails4.0からはlambdaで書かないとだめになるとのこと。うん、どっかで読んだそれ。

textカラムにjson格納してたら壊れたお話、あーありそう。あんまりでかいデータをYAMLなりJSONで保存するときには気をつけねばですね。

indexを短くしようというお話、聞いて思ったのですが、勝手にindex名を付けてくれるとは知りませんでした。いつもわざわざ、:name => で明示してましたよー、うっかり。でも今回のお話であったMySQLではtable名つけなくてもいいよね、というのはPostgreSQL無視することになるし、個人的にはやらないかなーという感想。Herokuに無料枠でお試しdeployしたいし。

double submit protectionは良いなぁと思ったけど、結構いじらないと思い通りに使えないようなので、自分で実装したほうがいいような気もしました。

懇親会

懇親会ではいろいろな人とお話し出来て良かったです。いつものメンバーや、いつのまにか既に絡んでいた人などなど。 前回の発表を聞いたと言ってくださる方も居て嬉しかったです。最近、発表の機会ないのでちょっとネタを仕入れねばなぁと思いました。LTレベルではなく15分枠レベルなもの出来るようにしたいですね。

@masuidriveさんが、謎のガジェットを実演されていたので写真撮らせて頂きました。

f:id:naoto5959:20120326212000j:plain

ウダーと言うらしいです。まじ興味津々。。。これはちょっとマジで興味ある。バックのスピーカーは自作とのことで、iPhoneとかもさせるとか、もうよく分からない未来を感じました。ワークショップがあったら行きますね。秋葉で部品買って、作ろう!みたいな。

f:id:naoto5959:20120326213701j:plain

そして会場には、桜があった。綺麗っす。

f:id:naoto5959:20120326220558j:plain

とまぁ、ちょいと最近ビール飲む機会多すぎなので、飲まないでもしゃべれる技術を確立せねばなりませんね。どうしたものか。

最後は後片づけ。誰かが言っていたんですが、イスを片づけるエンジニアは「イスアイヤー」業界に居るらしいですよ。

f:id:naoto5959:20120326221434j:plain

ってなわけで、お疲れさまでした。