こんにちは hsbt です。前回の仕事報告から3ヶ月ほどの間にシンガポールで開催された RDRC 2024 に登壇したり、Ruby のリリースワークフローの整備をしたりと、引き続き Ruby の開発に時間を費やしている日々でした。
今回は「Ruby コードレシピ集」という本を著者の皆さんと技術評論社様からご恵贈頂いたので、内容や感想を紹介したいと思います。
コードレシピ集と私の関わり
本書は私が前職である GMO ペパボに在籍していた3年前から企画段階に関わっていました。当時、技術評論社の担当の方から他の言語を学んだ人が Ruby を書くときに手元において使えるレシピ集となる本を出したいという提案をうけ、GMO ペパボの社内でシニア Ruby プログラマーを募って、企画をスタートさせました。
私はあくまでもオブザーバーとして関わり、著者である3名が毎週のように目次を持ち寄って進行していたところ、私がペパボを退職し、そこから月日が流れ...という状況でした。
時は流れ、つい先日に本書の刊行が決まったという連絡を受けて「当時の状況から3年経過して世に出せたのはすごい...」と感動していました。というのも、私だけではなく著者の3名もそれぞれ所属が変わり、その状態であっても粘り強く執筆を続けるのは難しく根気がいる作業だからです。
本書の内容の紹介
さて、経緯をご紹介したところで内容を見ていきたいと思います。Ruby コードレシピはページ数で 671ページ、記載のテクニック数が290というちょっとした辞典のようなサイズです。単純に1テクニックにつき2-3ページとしても、実際に動く Ruby のコードを乗せつつ、解説を行うにはギリギリの量と思います。
この本では以下のことには触れていません。
- オブジェクト指向プログラミング
- Ruby の class や module を始めとする言語設計
- Rails
『Rubyコードレシピ集』はどういう本か - kymmt の対象読者として書かれている
- Rubyの入門は簡単に済ませている初心者
- 他言語の経験者で新しくRubyに来た人
向けに、何かしらのプログラミング言語を習得している人へ、とりあえずやりたいことをショートカットで紹介する本になっています。つまり、作ろうとしているソフトウェアの概念を抽象化し、それらを Ruby の class や module としてどのように設計し動作させるか、というようなオブジェクト指向プログラミングについては別途学ばなければなりません。
もし、オブジェクト指向プログラミングの経験が浅いと感じる方は【書評】生成AIに何でも聞ける時代に「Ruby コードレシピ集」をあえて読む価値とは? - give IT a try にも書かれている通り、この本に加えて「プロを目指す人のためのRuby入門」などの副読本もおすすめします。
知らなかったテクニック
私が本を読むときは、頭の中にインデックスを作ることを目的に読むことが多いです。一字一句読むということは行わずに読み進めることで、本書については3時間ほどで読み終えました。テクニックの1つ目は ruby コマンドの実行方法から始まり、だいたい知っている、と読み進めて行き、ところどころに現れる「そうなんだ!」という発見については付箋を貼りながら読み進めました。
以下が発見の例です。
Range#include?
とRange#cover?
は似ているが、Range を受け付けることができるのはcover?
だけ- Object#then を実際に使った例
- unless に elsif を書くと syntax error、unless に else を書くのは避けていたけど、elsif がエラーになるとは知らなかった
- case-in を実際に使った例
- String#to_i(n)で基数変換、いつも String#hex とか String#oct 使ってた
- Pathname#empty? でディレクトリが空かを判定、Dir.glob でやってた...
上記以外のテクニックについては、ほとんどがすでに頭の中にインデックスがあったものでしたが、新しい発見があったのは大収穫でした。
また、『Ruby コードレシピ集』の執筆で工夫したポイント | shimoju.diary にも紹介がありますが、テクニックそのものに加えて、解となるコードが生まれた経緯や、もう一歩踏み込んで理解をするための手引などがこの本の魅力と思います。
まとめ
駆け足になりますが、Ruby コードレシピについての内容と hsbt が知らなかった、というポイントの紹介でした。
最後になりますが、この本では Rails ではなく、スクラッチで RSpec を使ってコードとテストを組み立てていく紹介もあり、これはフレームワークの中でのみテストを書くことがある、という機会が増えている現在では実用的に思いました。個人的には xSpec だけではなく、xUnit のテストフレームワークについても触れてもらえると良いと思いましたが、紙面の都合上しょうがないと思います。
生成 AI を使って、問題をコンピュータを解かせるためには、適切な問いを与えて、何が解かを知っていなければなりません。そのようなときに、このコードレシピは「問」と「解」の両方のインデックスを作るためには最適な本と思います。是非、手元に1冊おいて、Ruby をより効果的かつ効率的に書くテクニックを見つけてもらえると Ruby を開発している1人として嬉しい限りです。
アンドパッドでは、シニアな Rubyist を刺激する知見をまとめた大作を書くという Rubyist を、応援するだけでなく、熱烈に募集しています。