エンジニアになって約1年、Rubyを使った開発にはある程度慣れてきた。次のステップに上がるため設計を学べる技術書にもトライしていきたい。とはいえ、自分はRubyしか経験がないからJavaやC言語がサンプルコードだとそれを読み解くだけでもかなり大変だし、Rubyでどう実践すれば良いかがイメージしづらい、、。サンプルコードがRubyで書かれていて、設計が学べる技術書はないのかなぁ?
ぼくは約1年前に未経験からエンジニアに転職し、従業員300名以上の自社開発企業でRailsエンジニアとして働いています。
入社して半年ほど経ったころ、いつも心の片隅に引っかかっていたのが「設計」です。
Railsはとても便利で、ある程度の機能であればすぐに実装できてしまいます。
そのため半年ほど経験を積めば、ひとまず動くものは作れるようになれました。
しかし、その一方で自分のコードに自信が持てず、「このコードで本当にいいのかな…」と不安になることも多々ありました。
「このままでは自分の実装に根拠の持てないエンジニアになってしまう」という危機感もあり、設計について学べる技術書を探し始めたんですが、ぼくが出会ったほとんどの本はJavaやC言語のサンプルコードばかり。
これまで読んだ、設計に関する技術書は下記です。
- リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック
- 良いコード/悪いコードで学ぶ設計入門―保守しやすい 成長し続けるコードの書き方
- ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本
- ちょうぜつソフトウェア設計入門――PHPで理解するオブジェクト指向の活用
- オブジェクト指向でなぜつくるのか 第3版 知っておきたいOOP、設計、アジャイル開発の基礎知識
書いてあることが全く理解できないわけではないんですが、どれを読んでも結局のところ「この内容をRubyにどう落とし込んだらいいか?」と、Railsの開発にどうも生かせていない感覚が続いていました。
「Rubyで設計について学べる本は無いのかな…」
そう思って、RubyコミッターのブログやRubyコミュニティのドキュメントを探し回っていたところ、悩みを解決してくれる3冊の本に出会うことができたのです。
- リファクタリング:Rubyエディション
- オブジェクト指向設計実践ガイド
- Rubyによるデザインパターン
この3冊と出会ったことで、自分のエンジニアとしての知識や視座が格段に上がりました。
何よりもサンプルコードがRubyで書かれているため即効性があり、翌日の業務からすぐに実践してみることができます。
本記事では、エンジニア歴が1年程度、Rubyで設計を学びたい方向けに、この3冊がどんな本かを紹介していきます。
今の自分に必要な知識が得られるのは3冊のうちどれなのか、ぜひ考えてみていただけたら幸いです。
【実務経験1年以上】Rubyで設計を学べる技術書3選
リファクタリング:Rubyエディション
『リファクタリング:Rubyエディション』は「リファクタリングのスキルを一気に実務レベルまで引き上げたい」人が読むべき本です。
Martin Fowlerの著書『リファクタリング』は名著として有名だと思いますが、この本は原著の内容をRubyに対応させた一冊です。
原著と同様にリファクタリングの普遍的な原則をRubyのサンプルコードで解説しつつ、Rubyならではの書き方を生かしたリファクタリング手法もたくさん登場します。
以下はRubyらしさを生かしたリファクタリングの初歩的な例です。
# 修正前
parameters = params ? params : []
# 修正後
parameters = params || []
第1章ではリファクタリングを実際に進めるプロセスのサンプル、第2章ではリファクタリングの原則、第3章ではリファクタリングをするタイミングや基準、第4章ではリファクタリングにおけるテストの重要性、第5章以降はカタログ集として86のリファクタリング手法が紹介されています。
単なるテクニックだけでなくそれをどのような場面で使うべきかも書かれており、またサンプルコードが仕事でいつも使っているRubyなので、この一冊を読めば、明日からすぐ仕事で生かせる知識が手に入ります。
特に印象的なのは「コードの臭い」という考え方です。
これはリファクタリングの余地がありそうな箇所を指した表現ですが、この本を読んだことで「ここリファクタリングした方がいいな」とか「この書き方にはこういう意図があるんだ!」という気づきが、仕事の中で爆発的に増え、逆に自分がコードレビューする際もより良い書き方を具体的に提案できるようになりました。
デメリット
唯一のネックが金額で、8,800円します。
じつはこの本、一度絶版になっており、復刊ドットコムから復刊されたという経緯があるため、価格設定が高めになっています。
とはいえ内容のクオリティを考えれば、下手にいろんな技術書を買うよりもこの1冊に投資した方がいいと感じます。
とても即効性のある一冊です。
オブジェクト指向設計実践ガイド
『オブジェクト指向設計実践ガイド』は、オブジェクト指向について分かったような分かっていないような感覚を持つRubyエンジニアが読むべき一冊です。
依存関係やダックタイピング、インターフェースなど、オブジェクト指向の重要な概念をRubyで説明してくれます。
網羅的というよりは物語形式で徐々に良いクラスができていく流れを学べるイメージです。
ぼくはこの本を読むまで、「依存関係」「インターフェース」「ダックタイピング」といった概念を単語レベルでしか分かっていませんでしたが、今ではしっかりと理解できました。
次の2つのクラスをオブジェクト指向の観点で見て、どちらが適切であるか瞬時に根拠をもって判断できますか?
# クラス1
class Gear
attr_reader :chainring, :cog, :rim, :tire
def initialize(chainring, cog, rim, tire)
@chainring = chainring
@cog = cog
@rim = rim
@tire = tire
end
def gear_inches
ratio * Wheel.new(rim, tire).diameter
end
def ratio
chainring / cog.to_f
end
end
# クラス2
class Gear
attr_reader :chainring, :cog, :wheel
def initialize(chainring, cog, rim, tire)
@chainring = chainring
@cog = cog
@rim = rim
@wheel = wheel
end
def gear_inches
ratio * wheel.diameter
end
def ratio
chainring / cog.to_f
end
end
初見ではどちらが優れているかなんて全くわかりませんでした。
しかし本書を読み進めることで、クラス1はWheel
クラスに依存しているのに対し、クラス2はwheel
オブジェクトに依存しているため依存度が低い、と判断できるようになります。
Railsの開発でも、この「依存関係」の概念はとても大切だと感じました。
モデル間の関係を考える上で、この本で得た知識は大きな助けになっています。
デメリット
この本のネックは翻訳です。
文章だけを読むと、変な日本語ですこし分かりにくいです。
Rubyサンプルコードが豊富なので、文章表現の意味に固執しすぎず、コードベースでの理解を優先すると良いかなと思いました。
あと、結構むずかしいです。
Rubyでの実務経験が最低でも1年はないと理解できないレベルだと感じます。
最初の1回ですべて理解しようとするよりも、時間をおいて何回か読み直すことで威力を発揮する書籍である印象です。
Rubyによるデザインパターン
最後に紹介するのは『Rubyによるデザインパターン』です。
タイトルでわかるように、GoFのデザインパターンがRubyで学べる1冊です。
個人的には、この記事で紹介する中で最もおすすめしたい本です。
デザインパターンと聞くと難しそうなイメージだと思いますが、この本ではデザインパターンの説明をしつつ、モジュールの使い方やメタプログラミングなども解説されているため、Rubyの知識を増やしつつ、パターンについての理解も深められます。
Railsは「Convention over Configuration(設定より規約)」の思想でできているため、何も考えなくても実装はできますが、デザインパターンを学んでからだと見え方がだいぶ変わってきます。
この本を読んで以降、Rails自体にもいろんなデザインパターンが含まれているんだという気づきが多数ありました。
たとえば、「Rails.application.config
やRails.logger
はSingletonパターンなんだな〜」とか「ActiveRecordのコールバックはTemplateMethodパターンでできてるじゃん!」といった感じです。
この本でデザインパターンを学んだことで、Railsというフレームワークをより深く理解し使いこなせるようになりました。
デメリット
この本はエンジニア歴もしくはRuby歴が浅い人向けだと思います。
とっても読みやすかった反面、すでにデザインパターンの知識が豊富だったりRubyがめちゃくちゃ得意だったりする上級者にとっては物足りないかもしれません。
逆に、ぼくと同じくらいの経歴の人にとってはめちゃめちゃぶっ刺さる一冊だと感じます。
あと、この本は3冊のうち最も手に入りにくいです。
新品で買うのはまず無理だと思います。
ぼくはAmazonで状態が「非常に良い」の中古を購入しました。
Amazonでは新品もありそうでしたが、金額がとても高い(10,000円以上)ので、Amazonで状態の良い中古品を見つけたら、多少高めでも知識への投資だと思ってすぐに購入しておくのがおすすめです。
おわりに
3冊のうちどれが今の自分に必要なのか、判断できましたでしょうか?
Ruby on Railsの開発だけをひたすら続けているだけでは設計の知識はまず身につかないので、意識的に学ぶ必要があります。
逆に設計の知識や視点をキャリアの早い段階で少しでも学んでおくと、日々のRails開発でも新たな気づきをどんどん増やしていけるはずです。
ぼくは将来的にGo言語も使いたいと考えていますが、まずはRubyでオブジェクト指向やデザインパターンの理解を深めておくことで、他言語への移行もカンタンになります。
どれも良書なので、ぜひ自分に必要な一冊を購入してみてください。
- リファクタリング技術をRubyで学びたい → リファクタリング:Rubyエディション
- オブジェクト指向をRubyで学びたい → オブジェクト指向設計実践ガイド
- デザインパターンをRubyで学びたい → Rubyによるデザインパターン
コメント