Ruby と Rails を覚えるために約1ヶ月半でやったこと

仕事で Rails を使ったサービスを担当し始めて約1ヶ月半、RubyRails にもだいぶ慣れてきたので、ここまでどうやって勉強してきたか書いておこうと思います。いや、まだ初心者もいいところなのですが、そのうち忘れてしまって今しか書けなそうなので、書いておきます。

とはいえ、こういう情報は時間の経過と共に意味のないものになってしまいがちなので、なるべく時間に左右されない本質的なことを織り交ぜながら書いていきたいと思います。

irb(main):002:0> Date.new(2014,4,4) - Date.new(2014,2,19)
=> (44/1)

当時の知識

という程度。

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)

当時の気持ち

サービスを担当することになったときに考えたことは、このままでは全く戦力ならないぞ、ということだった。自分のことだけを考えると、仕事で勉強させてもらえるのでとてもいい話なのですが、とにかく早く役に立てるようにならないと、と思っていました。

やったこと

コードを読んだ

最初の2日間くらいでサービスのコードをとりあえず読みました。 意味がわからないところも多いけど(というかほとんどわからなかった)、それでもクラス名とか変数名とかを見れば、どういうことが書いてあるか想像はできます。どういうコードか全く知らないのと、わからなくても、なんとなくどこに何があるか知っているというのはだいぶ違うと思います。

コードレビューした

もともとサービスを一人で担当していた同僚の書いたコードをレビューしました。レビューといっても、何もわからないので、どちらかというとコードを読んで勉強していました。このとき心がけていたのは主に以下の2つです。

  • コードをしっかり読む
  • わからないことは調べて or 聞いて理解する

これは RubyRails、サービスの知識を身につける絶好の機会なので、全力でやっていました。

わからないことを調べる方法

基本的には、なるべく本家の情報を参照するようにしました。 それでもよくわからない部分に関してはググったりするという感じです。

コードレビューしてもらった

これは大きかったと思います。 レビュアーがキッチリとコメントをくれるので、

  • Ruby らしくないコード
  • 設計がよくないコード

というのをその都度直していくことができました。時間はかかりますが、だんだんとRuby らしいコード、設計を意識したコードを書くようになっていった気がします。設計を意識するというのは、たとえば以下のようなことです。

  • 1つのモデルクラスに詰め込みすぎないようにする
  • 責務を意識してクラスに分割する

また、チーム外のすごいエンジニアの方々も時々コメントをくれるので、見てもらっている安心感というのもありました。

使用しているライブラリのコードも読む

ドキュメントを読んでもライブラリの挙動がよくわからないときは、ソースを読むようにしています。具体的にこれまで読んだコードというと、以下のようなライブラリがあります。

見積もりと実績の乖離を痛感する

スクラムで1週間単位のスプリントを回しており、タスクのボリュームを見積もって付箋に数字を書くのですが、当時は 1.0 と書いた付箋が何日も残っていました。つまり「このくらいでできるだろう」と思ったことができない、ということです。なぜならば、やりたいことを RubyRails でやる方法がわからない、試行錯誤する、レビューの指摘が多く、修正に時間がかかる、というのが理由だったと思います。もちろん、この乖離というのは、これらの理由が解消されても別の理由でなくならないと思いますが、何が言いたいかというと、これによって危機感を感じていたということです。

危機感を感じる

自分のやりたいことが思うようにできない = 知識が足りていない、というのは勉強すれば解消できることなので、この圧倒的な知識の少なさに危機感を感じて、それをモチベーションにしていました。

逆に言うと、慣れてきて、ある程度できるようになると、危機感が薄れてきて、モチベーションが下がることになります(これは怠け者の性質ですね…)。しかし、それでは成長が止まってしまい、崖から落ちてしまうので、ハードルを下げず、もっと上を目指して、今後もわからないことに挑戦して、モチベーションを上げるというのはやっていくつもりです。

時間を使わせてもらった

コードレビューで時間をかけていたということを言いました。 当時は自分の仕事が進んでいないのに、それはひとまず脇に置いて人のコードをレビューすることに時間を使っていたということになります。ともすれば、自分の仕事もできてないのに・・・と思われるかもしれません(そんなことない?)。しかし、このことで自分の知識が向上するため、将来において役に立ちます。少し長い目で見ればこの方が効率的であると思います。

このようなことに時間を使わせてくれるチームに感謝しています。

Rails Guides の Active Record を全部読む

Rails のコードを書く上で中心となるのはモデルクラスなので、そこで使う Active Record の知識は必須です。これは必要になってから調べるスタンスより、あらかじめ基礎知識を頭に入れていた方が効率的でした。そのために Rails Guides の Active Record の章をすべて読みました。具体的には以下の章です。

  • Active Record Basics
  • Rails Database Migrations
  • Active Record Validations
  • Active Record Callbacks
  • Active Record Associations
  • Active Record Query Interface

また、Active Record を使わないモデルを作成するときに超絶便利なので、Active Model について書いてある以下の章も読みました。

当然、一度ですべて頭に入るわけがないので、ことあるごとに読み返しています。

ウェブ以外の情報

RSpec に関しては、ウェブ上の情報だけでは足りなかったので、(これも同僚に教えてもらったのですが)以下の書籍を読みました。

というか、まだ全部読み切っていません...

まとめ

こうやって書いてみると、RubyRails に固有のことよりも、一般的なことの方が多いようです。これらのことから考えると、何か新しいことを覚えるには、以下のようなことをやったらよさそうだと感じました。

  • 良質な入門書を読む
  • 良質なチュートリアルをやる
  • コードを読む
  • コードを書く
  • 誰かと一緒にやる
  • 仕事でやる
  • 危機感を持ってやる

書籍やWeb上の情報については現段階でベストだと考えているものを紹介していますが、今後もっといい手段がでてくるかもしれません。

ここに書いたことにどのくらい価値があるかわかりませんが、同じような状況にいる他の誰かが見て、少しでもお役に立てたら嬉しいです。