at backyard

Color my life with the chaos of trouble.

Ruby on Railsで仕事して1月が経って感じたことなど

Ruby on Railsで仕事して1月が経って

これは自身の個人的な振り返りとしての備忘録。

Ruby on RailsとTDD(テスト駆動開発)という組み合わせで業務を行うようになって、一月が経過したので、
実際に1ヶ月間、業務を行い、詰まったところなどを思い出しながら書いてみようと思う。
(ちょっと更新が後ろにずれて既に一月半が経過しているけど...)


RSpec

テストの粒度は入力と出力を意識することが大切だと学んだ。

最初のうち、コード内の変数に意図した値が入っているかまでテストしようとしていた。
勿論そういうテストが必要なケースもあると思うが、
ユニットテストの場合、大切なのはこの値を入力した時に、
意図したアウトプットがなされているか、
意図した値がDBに登録されているか?
である。

それよりも細くなると、中身をロジックを改修した際に、テストコードも書き換える必要が出てきてしまう。
何でもかんでもテストを書けば良いというわけではない。

またテストを考えることにより、自然とコードの設計を考えるようになった。
「オブジェクト志向が大事なのはわかるけど、そんなこと考えなくても現に僕のコード動いているもんね」
ということを考えなくなり、自然と設計を意識するようになった。

FactoryGirl

業務ではテストデータの生成にFactoryGirlを使用している。

FactoryGirlは、基本的なデータのみを"spec/factories"配下に用意しておいて、
テストパターンによって特殊なデータが使いたい時は、RSpec側のコード上から(before)作成するというやり方を学んだ。
これは後でコードを見返す時にも、どういうデータを用意しているのかがコード上から分かる、という利点もある。

例えば簡単な例だが、
下記のようなデータを用意しておいて、これとは別にテストケースに応じたデータを作成する。

FactoryGirl 生成データ

FactoryGirl.define do
  factory :user, class: User do
    id 1
    name 'user'
    email 'user@example.com'
	admin false
  end
end

RSpecコード

    before(:each) do
      @user1 = FactoryGirl.create(:user)
	  # @user2を用いて、管理者権限を持ったユーザのテストを行う
      @user2 = FactoryGirl.create(:user, id: 2, name: "user02", email: "user02@example.com", admin: true)
    end

vimカスタマイズ

開発環境はVimを使用しているが、コードを書いていてタイポエラーになることが多かった。
最初の頃は謎のエラーでテストが通らなくて無駄に時間を費やすことが多かった。
あと、書いている途中でインデントがめちゃくちゃになることもあり、そういう修正に無駄に時間を費やしていた。
JavaであればEclipseなどのIDEが間違いは指摘してくれていたので、今まではあまり気にならなかったが、


これはいけないと思い、vimに予測変換やインデント表示を追加した。
構文チェックも入れようとしたが、なんだかんだで業務環境には適用していない。

1. インデントを揃える
2. 予測変換機能を追加する

この2点の機能を追加することにより、タイポの回数はぐっと減り、
コードの見直しに無駄に時間を取れることが減ったからだ。

・インデントについては下記を導入

github.com

・コード補完については下記の記事を参考にneocomplete を用いた補完を行うようにした。

pocke.hatenablog.com

rubocopは安心毛布

機能の実装が終わり、コードレビュー依頼を投げる前にrubocopを走らせて、
必ず規約違反している部分は修正するようにしている。

基本的には一度規約チェックして、そこから

rubocop -a

で自動修正させてから、まだ引っかかる箇所を手動で修正する

Ruby、ならびにRuby on Railsの書き方について

まだRubyRailsRSpecらしい書き方ができてない自分は、
田舎から都会に上京したての学生よろしく、土地勘(Rails勘)ゼロのなかなかやばいコードを量産していた。
(いや、まだ今もしている。)

これについてはコードレビュー時の指摘で色々と教えていただいた。とてもありがたい。
ここら辺は人からの指摘や、人の書くコードを読むことが、Rubyらしい書き方を学ぶ最短の方法であるように感じた。

また指摘をいただいてコードをリファクタリングするときに、
テストコードが書かれていると、精神的な安心感が全然違う。
よく聞く言葉に、そのコードは動いているんだから触らない方が良い、という旨の言葉があるが、
テストコードをきっちりと書いているプロジェクトでは無縁であると思った。


実際にRails書いていて、こういう書き方便利だなーと思った書き方については、
下記の記事に書いてみた。
(他にも思い出したり、発見があったものについては追記していく)

shinshin86.hateblo.jp