すがブロ

sugamasaoのhatenablogだよ

パーフェクトRubyという本を(共著で)書きました

8/10 パーフェクトRubyが発売になりましたね

パーフェクトPythonやパーフェクトPHPで有名なパーフェクトシリーズのRuby版であるパーフェクトRubyが発売されました。

@hibariya @takkanm @ryopeko @joker1007 @udzura たちとチームを組んで書きました。面白そうだなと思ったら買ってみてください :)

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

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

目次

目次はこんな感じです。Rubyの基本的な部分からBundlerやGemのつくり方(C拡張も説明あるよ!!)まで網羅されている書籍はなかなか無いのではないかな〜と思っております。

Part1 Ruby ~overview

1章 Rubyの概要
1-1 Rubyについて
1-2 本書の読み方
1-3 Rubyドキュメントの歩き方
1-4 Ruby処理系の入手方法
1-5 Rubyを使ってみよう
1-6 コーディングスタイル
1-7 様々なRuby実装
1-8 Rubyのコミュニティとの関わり方
1-9 Rubyの開発について知る

Part2 Ruby言語仕様

2章 Rubyの基礎
2-1 Hello, Ruby.
2-2 変数と定数
2-3 条件分岐と真偽値
2-4 式
2-5 クラス
2-6 モジュール
2-7 主な組み込みクラス
2-8 様々な代入式
2-9 例外
2-10 外部ファイルの読み込み
2-11 予約語
2-12 組み込みの変数/定数

3章 制御構造/メソッド/組み込み関数
3-1 演算子
3-2 基本的な制御構造
3-3 例外処理
3-4 大域脱出
3-5 メソッドの定義と呼び出し
3-6 基本的な組み込み関数

4章 クラスとモジュール
4-1 クラス
4-2 モジュール
4-3 オブジェクト

5章 主な組み込みクラス/モジュール
5-1 Numeric
5-2 String
5-3 Regexp
5-4 Comparable
5-5 Enumerable
5-6 Time
5-7 IO・File
5-8 Dir
5-9 Thread
5-10 Fiber
5-11 Process
5-12 Struct
5-13 Marshal
5-14 ObjectSpace

Part3 メタプログラミング

6章 Rubyのクラスオブジェクト
6-1 Classクラスからクラスを作る
6-2 クラスオブジェクト
6-3 特異クラス
6-4 メソッド探索方法
6-5 Module#prepend
6-6 Refinements

7章 動的なプログラミング
7-1 オープンなクラス
7-2 BasicObject#method_missing
7-3 eval

8章 Procオブジェクト
8-1 Procクラス
8-2 Proc#new以外のProcオブジェクトの作り方
8-3 Proc.new/Kernel.proc/Kernel.lambda
8-4 Rubyでのクロージャ

9章 Methodクラス
9-1 Methodオブジェクト
9-2 MethodクラスとUnboundMethodクラス
9-3 MethodオブジェクトとProcオブジェクト

10章 Rubyでのリフレクションプログラミング
10-1 オブジェクトについて調べる
10-2 クラスについて調べる
10-3 イベントをフックする

Part4 標準添付ライブラリ

11章 ライブラリ
11-1 マルチスレッドプログラミング(thread)
11-2 より手軽な非同期プログラミング(fiber)
11-3 ファイル/ディレクトリ操作を極める(pathname/fileutils/tmpdir/tempfile)
11-4 特定のフォーマットのテキストデータを手軽に扱う(yaml/json/csv)
11-5 上級者のための文字列オブジェクト(stringio)
11-6 集合で遊ぶ(set)
11-7 もっと詳しく,日付と時刻(time/date)
11-8 シンプルなHTTPクライアント(net/http)
11-9 最も基本的なテンプレートライブラリ(erb)
11-10 Rubyのベンチマークを簡単に(benchmark)
11-11 ログファイルを取り扱う(logger)

12章 組み込みツール
12-1 irb
12-2 RDoc
12-3 Rake
12-4 RubyGems

Part5 実践プログラミング

13章 gemパッケージの作り方
13-1 雛形の生成
13-2 gemspecについて
13-3 gemパッケージの作成
13-4 Rakeタスク
13-5 C言語でライブラリの作成

14章 よく使われる標準外のツール
14-1 Bundler
14-2 Capistrano
14-3 YARD
14-4 Pry

15章 コマンドラインアプリケーション開発
15-1 作成するTodo管理アプリケーションについて
15-2 Todo管理アプリケーションを作成する前に
15-3 CLIアプリケーションの作成
15-4 データベースアクセス処理とCommandクラス
15-5 コマンドラインからの引数解析
15-6 Commandクラスとの結合
15-7 Todo管理アプリケーションの完成とgemパッケージ化

16章 Webアプリケーション開発
16-1 Webアプリケーションを取り巻く環境
16-2 Todoアプリケーション 2.0.0で利用するライブラリ
16-3 Webインターフェースの追加
16-4 再び todoコマンド
16-5 Todoアプリケーション 2.0.0 の完成

本の出版までの流れ

執筆の話を頂いたのははるか昔で2011年の2月頃でした。パーフェクトPythonの著者でもある@everes 親分に「お前本書きたいって言ったけどRubyの本どうよ」みたいな感じで編集者さんに紹介してもらったのでした。本を書いてみたいとかは10年くらい前から言っているんですけど、こういうのは言い続けてみるもんですね……。

f:id:seiunsky:20130810215500j:plain

このパーフェクトシリーズというネームバリュー*1とボリュームを一人で書くのは無理だというのは明白だったわけで、その後は一緒にチームでやっていけそうな人を探して、なんとかかんとかここまでやってきました。当時は 日本Ruby会議2011のレポート班などもやっていたので、実際に執筆を開始したのはそれが終わってから、2011年の9月くらいからですね。ホント、発売までまる二年掛かっていて何をやっているんだ感ありますね。反省しております。。。

最終的に思ったのは、項レベル*2まできちんと書く内容をブレークダウンしたり、作成するサンプルソースの方を先に完成させてから*3文章を書くと、後戻りが少なくて良いかなと思いました。慣れてくればある程度の粒度でも行けるかもしれませんが、如何せん慣れてない人が書くので*4ゴールがかなり見える状態まで持って行ってから書かないと、途中で破綻してやりなおしたりすることになってしまうんですね。我々の普段の仕事と同じで、設計が重要です*5。

本を執筆する際に使ったテクノロジーについて

今はmarkdown2inaoとかも話題になっていて、markdownで書けば良いのでは?みたいな感じがありますが、僕らはReVIEW*6を使いました。書籍用ということもあり、パートや章、節といったアウトラインやリスト1.1みたいな番号がきちんと連動して出力されるので便利でしたね*7。

GitHubはレビューで大いに活用しました*8。また、執筆後半の細々とした作業(例えば著者略歴を書く、など)はissueでやりとりできたのでそれも良かったです。最初はチャットワークスとかスカイプとか色々試してみたのですが、結局FBのメッセージやグループで情報や状況のやりとりは行い、原稿など成果物のやり取りはGithubという形に落ち着きました。

Jenkinsはビルドするように使っていたものの、あまり運用に載せられなかったのは、心残りですね……。ビルドエラーの通知や成果物をDropboxに置いて最新版を見るようにする、とかできれば良かったなぁと思っています。

そんなわけで

この本を読んで得るものがあった、といってもらえれば、とても嬉しいです。

ちなみに、執筆時はこんな感じでwatchrを使ってreviewファイルを監視し、HTMLへビルドしてそれを参照するような感じでした(左側のgVimで原稿を書き、右側のvimではサンプルソースを書いてる)。

f:id:seiunsky:20130810214315p:plain

執筆メンバーの大半が書籍を書くというのは初めての経験だったので手探りでの作業も結構あって*9大変だったり迷惑掛けたりもしましたが、ここまでこれて良かったです。また、本書を書くにあたってレビューをしてくれた皆様のおかげでより良い本にすることができました。本当にありがとうございました。

ここまで読んでくれた方へ

もうパーフェクトRubyを読みたくて読みたくて仕方ないですよね?さあAmazonでポチってしまいましょう!!

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

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

いやいや、RubyじゃなくてPython使ってるからさーという方にはこちらをオススメします :D
パーフェクトPython (PERFECT SERIES 5)

パーフェクトPython (PERFECT SERIES 5)

追記

本を読んでくれた人、ぜひ感想をお手持ちのブログやAmazonのレビュー欄に書いてください〜

*1:果たして自分に書けるのか、みたいな不安もありました……

*2:パート→章→節→項という見出しレベルなのだ

*3:もちろん、ある程度作成していたのだけど、もっと時間を掛けてでもここをしっかり固めるべきだったと思う

*4:しかもブログのような一気に書くものじゃなくて長いスパンのものなので

*5:なんかもう当たり前すぎる結論である……

*6:ちなむと、ReVIEWでもinaoフォーマットで出力できるよ

*7:review-indexでおおよその規模感を把握できたりできたのも良かった

*8:ビルドしたテキストをPull Requestでメンバーに通知する形でやってました

*9:文章書かなきゃいけないのに便利Rakeタスク作って満足してしまったり……