Sooey

2013-05-16 15:00:59 +0900

rake specでの冗長な出力を止める方法。

rspec-railsを組み込んだRailsプロジェクトでrake specを実行すると、以下のように(specタスクが依存している)test:prepareタスクの出力や、実行するspecファイル名などがずらずらと表示されます。

$ bundle exec rake spec
SET
SET
CREATE EXTENSION
COMMENT
(snip)
INSERT 0 1
INSERT 0 1
INSERT 0 1
/Users/juno/.rbenv/versions/2.0.0-p195/bin/ruby -S rspec ./spec/controllers/admin/castings_controller_spec.rb ./spec/controllers/admin/characters_controller_spec.rb
........................................................***...

これを黙らせてシンプルな出力にするには、Rakefileあたりに以下のコードを記述しておきます。

これによって、デフォルトのspecタスクをいったんクリアし、

  • rake spec前にtest:prepareを実行しなくなる
  • 実行するspecファイル名などを表示しなくなる

という挙動が再定義されます。

test:prepareが暗黙的には実行されなくなるため、あらかじめ実行しておきます。

$ bundle exec rake db:create RAILS_ENV=test
$ bundle exec rake test:prepare

そしてspecタスクを実行すると、余計な出力のない状態でテスト結果が表示されます。

$ bundle exec rake spec
........................................................***...

specタスクをクリアしないでverbose = falseを設定するいい方法はないかな…。

2013-02-06 13:55:21 +0900

ActiveSupportのassert_valid_keysHashのキーをチェックする。

ActiveSupportで提供されているHash#assert_valid_keysを使うと、メソッドの引数として渡されたHashに必要なキーが含まれているかどうかを容易にチェックできる。

{ :name => "Rob", :years => "28" }.assert_valid_keys(:name, :age) # => raises "ArgumentError: Unknown key: years"
{ :name => "Rob", :age => "28" }.assert_valid_keys("name", "age") # => raises "ArgumentError: Unknown key: name"
{ :name => "Rob", :age => "28" }.assert_valid_keys(:name, :age) # => passes, raises nothing

上の例のように、selfとなるHashassert_valid_keysの引数で指定されたキーが含まれていない場合にArgumentErrorが発生します。キーはSymbolStringで区別して判定されるので注意。

2013-01-27 18:24:54 +0900

Signals vs. Noiseの去年のエントリに、テストをどれくらい書くべきかということについてDHHが指針を示していたものがあったので読み返してみました。

予想通り、DHHはなんでもかんでもテストを書くということに対してはだいぶ批判的なスタンス。

曰く、テストを書くということの裏側には、テストを書く時間、テストをアップデートする時間、テストコードを読んで理解する時間といったコストが発生しているので、テストを書くことによって得られるメリット(回避できる問題)とのバランスをよく考える必要がある、と。

議論を呼ぶことは承知のうえでDHHが提案する「Railsアプリのテストにおいて、やってはいけない7つのこと」は以下の通り。

  1. 100%のカバレッジは目指さない
  2. コードとテストの比率は1:2だとコード・スメルがしてくる。1:3だと酷い匂い(stink)(訳注:要は、テストコードがテスト対象コードの倍を超えないくらいにしましょう、ということだと思う)
  3. 作業時間の1/3以上がテストに関する作業にかかっているとしたら、何かやり方を間違えている。半分以上をテストに割いているとしたら完全に間違っている
  4. ActiveRecordに標準で用意されているアソシエーション、バリデーション、スコープについてはテストしない
  5. 異なる要素を結合することから起きる問題について結合テストを使う(単体テストで間に合うものには用いない)
  6. プログラマ以外の人がテストを書いてくれるような魔法の国に住んでいるのでもないかぎりCucumberを使わないこと(そこに住んでいるのなら、妖精の粉の入ったボトルを僕に送ってくれ!)
  7. すべてのコントローラー、モデル、ビューについてテストファーストでやろうとしないこと(DHHの場合はだいたい20%がテストファースト、80%がテストアフター)

コメントも100個以上ついていて追うのが大変ですが、DHHがリプライしているあたりだけを読んでみるのも面白いと思います。Cucumber嫌いなんだな〜、と改めて感じた。

2013-01-25 16:16:45 +0900

Dribbbleの規模。

Dribbbleから届いたメールマガジンに2012 STATSとして、こんな数字が載っていた。

  • 166,441 new members joined Dribbble, bringing our total population to more than a quarter of a million members.
  • 14,488 designers posted work for the first time on Dribbble.
  • 318,347 shots and 47,263,176,953 pixels were dribbbled.
  • 1,049,007 comments were posted by 26,574 members.
  • 8,382,828 likes were recorded from 90,758 members.
  • 458,564,807 page views.
  • And we currently have 2,978 Dribbblers who are members of 405 meetups across 377 cities around the world.

  • 新しくサインアップしたメンバーは166,441人(トータルは25万人を超えた)

  • 初めて画像を投稿したデザイナーは14,488人

  • 全体の画像投稿数は318,347件、47,263,176,953ピクセル

  • 26,574人が1,049,007件のコメントを投稿

  • 90,758人が8,382,828件のLike

  • 458,564,807ページビュー

  • 377都市で405回のミートアップに2,978人が参加

2013-01-22 16:15:02 +0900

PowでNewRelicのdeveloper modeを動かす方法。

最近ローカルの環境をPow: Zero-configuration Rack server for Mac OS Xに切り替えたら、Railsアプリの/newrelicにアクセスしてもNew Relicのdeveloper mode(development環境でもそれっぽいパフォーマンス統計情報を表示してくれる)が表示されなくなってしまいました。

検索してみたところ、Powで使う場合は環境変数を設定する必要があるみたい。

というわけで、~/.powconfigに以下のように追加して、

# Use NewRelic RPM developer mode with Pow
# see: http://andre.arko.net/2011/11/12/use-newrelic-rpm-developer-mode-with-pow/
export NEWRELIC_DISPATCHER=pow
export POW_WORKERS=1

killall powすればOK。

私の環境ではPowの制御にpowderを使っているので、

$ powder down
$ powder up

で上手く動くようになりました。

NewRelic developer mode