月曜日までに考えておきます

ITネタとゲームネタ中心に興味のあること色々書きます。

「パーフェクトRuby」読み終えたので感想

8/10(土)に出たRuby本「パーフェクトRuby」を読み終えたので感想です。

全体的な感想

開発環境の作り方やメソッドやクラスの定義方法などの入門的な内容から、メタプログラミングという中級者以上向けの内容が含まれているほか、著者の人たちが実際に開発に使用しているであろう役に立つgemの使い方が書かれてある本です。

入門やメタプログラミングについては他の書籍でもカバーされていますが、こういうgemの情報はなかなかまとまった書籍には情報がないのでありがたいですね。Webでググって出てきた情報やGitHubのREADMEを見て、試してみるというのがデファクトになっているかと思います。WEB+DB PRESSなどには載っていたりすることもありますが、こういうRuby専門書で詳しい解説が日本語で読めるという本は今まで見たことがなかったので、こういう実践的な内容が読める本は素晴らしいと思います。

各パートと自分が学べた点の一部

本の各パートと、自分にとって知らなかったのを理解できてとても良かった!って部分を書いていきます。

Part2 Ruby言語仕様

  • Object#freezeでオブジェクトの変更を禁止する。定数などにオススメ(P.137)
  • Numberc#step(P.144)
    • times, uptoを使ってたけどこれも状況によって使い分けするとよさそうだと思いました
  • Arrayの第二引数に渡した値は同じオブジェクトなのでひとつの要素に破壊的操作をするとすべての要素に影響する。(P.172)
    • 気をつけないとまずい
  • Hash#to_aとArray#assoc(P.185)
    • HashからArrayに変えたあと、それにアクセスする方法

Part3 メタプログラミング

  • クラス変数とクラスインスタンス変数の違い(P.237)
  • Ruby2.0の新機能 Module#prepend(P260)
    • モジュール側でsuperを書いて利用側で実装するという使い方が例を含めて書かれていてよかったです
  • Refinements(P.263)
    • これも実例を踏まえてわかりやすく書かれていました
  • Module#remove_methodとModule#undef_methodの違い(P.318)

Part4 標準添付ライブラリ

  • benchmarkライブラリ(P.387)
    • 実行前と実行後でTime.nowしたものを引いた値を出力するようなことをしてたんですが、こういうものがあるんですね
  • gem serverでRDocを参照するためのローカルサーバが立ち上がる(P.432)
  • 自分で編集してしまったgemの状態をインストール直後に戻すgem prinstineコマンド(P.435)

Part5 実践プログラミング

  • bundle openでgemパッケージがインストールされているディレクトリが開く(P.462)
  • binstubs(P.464)
  • bundle package(P.468)

特にPart5は

  • gemの作り方
  • Rakeタスクについて
  • よく使われるGemの説明

など、実践的な内容でむちゃくちゃありがたいですね。さっそく職場に持っていって活用しようと思います。

また、最後のアプリケーション開発例も、「RailsでScaffoldで一瞬でアプリが動きます」というよくある内容ではなく、まずはコマンドラインインターフェースのものをgemとしても公開できるように作成し、それからSinatraでWebアプリケーション化するという内容。渋い。そして、仕組みへの理解が深まりますね。特に私が感銘を受けたのはコマンドラインアプリをgemとして公開する用に作るという思想。gem公開まだしたことがなくてしてみたいんですけどアイデアがなくてな~って思ってたんですが、コマンドラインから叩く自分用のツールはいくつか作ったことがあるので、これをちょっといじって公開できるレベルにすればいいんだな、と考えられる用になったのでよかったです。

まとめ

全体的に広い範囲をカバーしていますが、Ruby2.0でのメタプログラミング箇所とgemの作り方や有益なgemの説明のあたりの内容の充実度が素晴らしいと感じました。初学者向けではなく、初学者レベルはある程度こなせるようになった上で、中級者、上級者を目指したい人におすすめの本だと思いました。

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

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