見出し画像

【2冊目】プロを目指す人のためのRuby入門[改訂2版] 言語仕様からテスト駆動開発・デバッグ技法まで

まーくん | 西見 公宏

こんにちは!かれこれ25年ぐらいプログラマーをやっているまーくんです。

そのうち10年以上はRuby on RailsでWebアプリケーションを開発するプログラマをしておりまして、言語別で見ると一番使っている言語がRubyなんだなーとしみじみしております。

Ruby自体は大学時代に出会った言語で、Perlより読みやすくてめっちゃ良い!と感激して、その後一人でずっと愛用していました。SIer時代もExcelのデータ項目定義書みたいなドキュメントからDDLを生成するスクリプトをRubyで書いていたりしていたので、私の秘伝のタレは大体Rubyで書かれてるって感じです。

そういう訳で2冊目に取り上げたのがRuby関連書籍ではベストセラーになっていると噂の「プロを目指す人のためのRuby入門」(以下「チェリー本」)です。

◎この本との出会い

と言いつつ、著者の伊藤さんはソニックガーデンでの同僚でして、チェリー本 第1版の出版のときに「ブログ書くよ!」と言って書籍を献本してもらったのに関わらず書く書く詐欺で書かず、第2版は改訂内容のレビューに参加した役得で書籍を頂いたという感じで、もう何かいい加減申し訳ないなって思っていたのですが、ここに来てレビューを書くチャンスを得て救われたような思いでおります。

ちなみにマジどうでもいい話ですが、ソニックガーデン的には私が最初の社員で、伊藤さんは2番目の社員って感じでした。

◎なぜこの本を読む必要があるのか?

いきなりお前何言ってんだという感じになりますが、ぶっちゃけ今どきのプログラミング言語って公式のドキュメントを読めばある程度書けるもんだと思います。

C言語をK&Rで学んだって人はたくさんいるかも知れませんが、Go言語とか新しめの言語を本読んで勉強しましたって人はあんまりいないと思うんですよね。

それでもなおRubyを書く人に私がチェリー本をオススメしたい理由は、「Rubyっぽく書くにはどうすれば良いか」が凄くしっかり語られているからです。

◎プログラミング言語の解説書の存在意義とは

そもそもプログラミング言語の解説書の存在意義とは何か?を考えたとき、単に文法レベルの解説と実用例を分かりやすく紹介することが意義なのではなく、私見ですがそのプログラミング言語特有の匂いというか、文化を伝えることがその意義なのではないかと思うのです。

1993年にPerlを初めて見たとき、なぜか「Lisp、Smalltalk、Perlの特性を組み合わせたオブジェクト指向言語があれば、生産性を高めてくれる素晴らしい言語になるのでは」というインスピレーションが湧いたのです。それで、そのような言語を開発し始め、Rubyと名付けました。

「7つの言語 7つの世界」P.10 Matzへのインタビューより抜粋

上記のMatz(Rubyの制作者)へのインタビューからも分かる通り、RubyはLispみたいにリスト処理が容易に書けて、Smalltalkみたいにオブジェクト指向してて、Perlみたいに気軽に実行できることを志向して作り出された言語なんですよね。

なのでRubyプログラマーは基本的にforループなんてよっぽどのことがない限り書きません。Enumerableなオブジェクトに対してeachメソッドやmapメソッドを駆使して繰り返し処理を書きます。

でも、この雰囲気が分かっていない他言語からやってきたプログラマーはガンガンfor文を使った繰り返し処理を書いたりするので、コードレビューで生粋のRubyプログラマーとのバトルが始まったりするわけです・・・

これは決して好みの問題とかそういうものではなくて、プログラミング言語とはその文化や雰囲気・匂いを理解して書くことではじめて、読みやすく、言語の機能をフルに活用でき、パフォーマンスの出るコードを表現できるものなのだと思うのです。

完全に私見ですけどね・・・

◎「よくある書き方」でコード例が書かれている

立ち戻って、チェリー本の良いところは本当に「よくある書き方」でコード例が書かれていることです。

地味なところですが、以下のような形でoptionsみたいな変数名でハッシュを受け取るメソッドってよくあります。

# P.190 第5章 5.6.6 メソッド呼び出し時の {} の省略
def buy_burger(menu, options = {})
  puts options
end

で、普通に書けばこんな風に値を渡すと思うんですが、

buy_burger(:fish, { drink: true, potato: false })

しかしRubyには「最後の引数がハッシュであればハッシュリテラルの {} を省略できる」というルールがあるため、現場のコードではこんな風に書かれていたりするわけです。

buy_burger(:fish, drink: true, potato: false)

Ruby on Railsのコードを見たことがある人なら、こういう表現をよく目にすることがあると思います。

このような書き方についてちゃんと逐一丁寧にフォローしてあるので、本当に恐れ入るなぁ・・・と思うわけです。

あと、巻末で次のステップへ進むための書籍が紹介されているのも、ちゃんと学習者の気持ちを考えられているなーと思います。

◎「リファクタリング:Rubyエディション」

ちなみに巻末で紹介されていない本で私の一押しなのは「リファクタリング:Rubyエディション」という、それなりに経験のある人なら大体知っているマーチン・ファウラーという有名な人が書いた「リファクタリング」という名著のRubyバージョンの本なのですが、何の運命のイタズラなのか定価なのに8,800円というすさまじい値段がついています・・・(元々は3,500円ぐらいだったと思います)

リファクタリングとはコードの振る舞いを変えずにその書き方だったり設計を見直して最適な状態にする作業のことを言うのですが、日常のコーディングはとにかくリファクタリングの繰り返しみたいな感じなので、リファクタリングのノウハウって凄く役に立つんですよね。

でも、元々の「リファクタリング」は静的型付け言語であるJavaで例が書かれているので、動的型付け言語であるRubyから見ると結構まどろっこしく・・・

それだけにRubyの特徴を活かしたリファクタリングを紹介している「リファクタリング:Rubyエディション」は一押しなのでした。

いつかこの本も紹介できればいいなぁ。

ではでは。

この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!