railstokyo67

ほぼ半年振りのrailstokyo。なんとなーく行けなくなっちゃってて、今回は気合入れて出席出来ました。
やっぱり刺激を受けるしいいですね。参加させていただいてありがとうございます。

コードリーディング

rails3プロダクトのコードリーディング。
対象のプロダクト探しはここから
http://www.opensourcerails.com/
ちゃんと下調べして対象のアプリを探してくれたらしいです。素晴しい!

support-system

まずはこちらを読みました。
https://github.com/dannymcc/Support-System
support-systemってのは課題管理システム。
中を覗いてみるとscaffoldだけっぽい。。。。
でも見た目が結構かっこいい!nifty-generatorとtwitterのbootstrapだけでこんなにいけるのかー。すげー。
見た目って大事ですなーとしみじみしました。

最初にrake routesでアクションを眺めているらしいです。
「Gemfileを最初に見るよ」って方もいました。

ということでGemfileを見てみる。。。

rails-footnotesというgemが使われていました。このgemは画面の下の方に開発系の情報を出してくれます。

認証機能ないのになぜかdevice使われてるね。。。

refinerycms

https://github.com/resolve/refinerycms
マウント可能なエンジンをつかってる。むずい。

雑談として

「信用出来るコードってどうやって判別すればいいのかねー」という話がありました。
どのrailsプロダクトでも「どこかの馬の骨」が作ったコードなので、どこまでオーソライズされてるの?って疑問は当然残る。
「だからrailsそのものを見るんだよー」とa_matsudaさんがおっしゃっていましたが、
まぁそこはオープンソースプロジェクトは流行る前ならどれでもそうで、
そんなことも含めて「いいな」っていうコードを見極める技術ってのも必要になってくるんじゃないのかなぁと思います。
まぁ文章と同じ。良質の文章の書き方の本は必ず「とにかく本読め!そしたらいい文章と悪い文章の区別がつく」と書かれているように「とにかくコード読め!そしたらいいコードか悪いコードがわかる」ってことだと思う。

テスト

veiwのテスト

僕が聞いてみたかったところ。
僕自身が技術がないからなんだけど、僕がwebアプリを作る時って、ruby以外の技術が必要なhamlとかscssとかsassとかcoffeescriptとかが沢山あるveiw系のもろもろは試行錯誤が沢山あります。
そこでのrspec-railsでいうところのrequest specではエラーメッセージがわかりずらい。。。
実はユニットテストレベルのテストを書いた方がいいのかなぁと思ったりしていました。
それに対する他の方の意見は

  • viewのユニットテストは変更に弱いので変更に弱くなる。なので、あんまり書きたくない。
  • インテグレーションテストでつまったら、alertを入れたり、debug文を入れて、結構泥臭くデバックをしている。

と言うことでした。
たぶん泥臭くやってるほうがviewのテストをごにょごにょ修正するより楽なんだろうなぁという感じだと思う。

インテグレーションテストのa_matsudaさんのライブコーディング

そんなことを話していたらa_matsudaさんがインテグレーションテストのライブコーディングをしてくれました。
人がコーディングしてるのって誰がやっても面白いんんだけど、すごい人がやってると見惚れます。。。
これはライブで感じてもらわんとわからんと思う。
メモしたこと

  • capybaraでfeature、senarioでテストが書けるらしい。。。しらんかった。。。railsだけなのかな?
  • spec/requestsの自動生成 hocus_pocus http://t.co/eTCQtU5A(rails3.1以上)おぉ楽になりそー
  • capybara-webkitはホスト名決めうちだとだめらしい。
  • なんか独自でweb-serverを立ちあげているらしい
mailのテスト
mailcatcher
メールの確認をブラウザで全部出来る。今はメール機能ってあんまり考えてないけど必要な時が来たらじっくり見てみよう。http://mailcatcher.me/
mock

mockってそもそも使ってる?ってところから話しがはじまったのかな?僕もほとんどmockとかstub使ったことないです。
だいたい以下の3つに集約されるみたい。

mocha
test/unitとかと連携されることが多そう
rr
機能豊富。spyは限定的。松田さん曰くdslがかっこいい。
rspec
rspec標準。だいたいこれを使っているっぽい。

「stubとmockで、、ごにょごにょ。。」という議論になって、「???」って人が僕も含めてかなりいたので、stubとmockの違いを説明してもらいました。

stub
値を返すだけで検証するものでない。値だけ返したい。
moc
値を返すだけじゃなく、methodが呼ばれたことも確認したい。

よろず相談

気になったことを列挙しておきます。

デバッグ

ruby-debugでset-autolistってやるとコードが出てきて便利。~/.rdebug.rcにset-autolistと書いておく。rails consoleで「reload!」ってやるとコードを読み込みしてくれる。

pry

railsデバッグでshow_methodとやるとrails自体の該当のソースも出してくれるから便利。railscastsで見て「ほうほうそうなのね」って感じでいただけだったけど「こういう使い方があるかー」と感心しました。

less

sassとかscssの別のものみたいなやつ。twitter bootstrapがこれで作られているらしいです。http://lesscss.org/

Backbone.jsとrailsが統合するかもーという話があるらしい。

そもそもBackbone.jsって何?ってしか知識がなかったので、いまいち何がなんだかわからなかったんだけど、後でツイート見るとインパクトのある話だったらしいですな。
後日調べてみたら、javascriptを使う時にMVCを使ってみようというライブラリのようです。jquery、coffeescriptに続いてjavascriptでまだまだ勉強しなければならないことが多くなってくるんですねぇ。流し読みしかしてませんが以下の記事が非常にわかりやすく整理されていると思います。
http://d.hatena.ne.jp/kazuk_i/20110407/1302130947

休憩時間で

「g」というgrowlを通知してくれるだけのgemを教えてもらいました。
休憩時間が20分とかなり長くなっていたのですがこういう雑談を増やす意図だったようです。おかげで一つ得しましたー。