UNIXシェルスクリプト マスターピース132 という本のレビューをした

友人の大角(id:ozuma)が最近「UNIXシェルスクリプトスターピース132」という本を書いた。シェルスクリプトの実践的なサンプルをいっぱい集めた本だ。

UNIXシェルスクリプト マスターピース132

UNIXシェルスクリプト マスターピース132

僕もこの本の制作に関わっていて、原稿のレビューをした。レビューというのは書評という意味ではなく、ソースコードレビューのレビュー。

いろいろ思うところがあるので、レビューというのがどんなものなのか含めてちょっと紹介してみる。

どんな本か

サーバー管理とかで使うようなシェルスクリプトのテクニックを紹介してる本で、実践的な見本のスクリプトが132個載ってる。実際シェルスクリプトでやりたいことがあったとして、それをどう書けばいいか分からない、みたいなことはけっこうあると思う。そういう人向けのサンプル集といった位置づけの本だ。

あと、Linux, BSD(FreeBSD), Mac に対応していて、どの OS でも動くように書いたり、OS ごとに違うところは「Macのときはこう書く」みたいに補足で説明したりしてる。親切。

作業の環境

原稿やレビュー内容のやりとりはサイボウズLiveで行うことにした。

まず著者が一週間分の原稿を投稿し、その内容をレビュアーが確認してコメントで指摘事項を書く感じ。これを毎週繰り返した。一週間でだいたい5から7Tips、全部で132個Tipsがあるので5ヶ月ぐらいかかった。初めはレビュアーは僕一人だったが、主に僕の負荷的な都合で途中からレビュアーをもう一人増やしてもらった(ありがとう)。

確認用のマシンとして Linux, BSD, Mac が必要になった。Linux は普段のメインマシンとして使っているのでそれをそのまま使った。MacMacBook Air を持っているのでそれを使った。BSD は持ってなかったので、VirtualBoxFreeBSDをインストールして使った。

何をしたのか

レビュアーとして僕が何をしたかというと、本としての体裁とか日本語の表現とか、そいういう国語っぽいところはほとんどチェックしていない。そうではなくて、シェルスクリプトのプログラムとしてのレビューを行った。開発で行う普通のソースコードレビューに近くて、だいたいこんな感じのことをした。

  • 意図した通りに動作するか
  • バグはないか
  • Linux, BSD, Mac どれでも動作するか
  • もっと良い書き方はないか
  • 別解(別の書き方)はないか

元の原稿の時点で根本的に間違ってるみたいなことはなかったけど、細かな間違いや不具合はけっこうあった。例えば通信エラーやファイルが存在しないような異常時の処理が考慮されていないとか、文字列内にスペース、改行、カンマなどが含まれているときに問題があるとか。"$var" とダブルクォートで囲わないとダメなところが $var とそのまま書いてあるようなパターンもけっこうあった。

誤記とか typo とかもチェックした。普通のコードレビューなら些細なことだけど、本として出来上がったものに誤記があるとかっこ悪いし紙に印刷してしまったものは修正できないので、けっこう大事なところだと思う。なので例えば英単語は辞書で確認したりとかした。

著者はスクリプトとしてどう書くかとか文章としてどうやって説明するかとか、そういう本としてのメインのところを意識して書いているだろうし、自分が書いたものは当然正しいと思ってるので、細かいところまで気が付きにくいと思う。

それに比べて、僕はまず前提として「間違いがあるかもしれない」と疑って色んなパターンを考慮して確認やテストをしたので、そういう細かいところを指摘できたんだと思う。

逆に言うと細かいところしか指摘できてないわけなんだけど、その分著者が些細なことを気にせず本来の記述に集中できるわけで、役割分担としては有効に機能してたと思う。

レビューの様子

最初のきっかけとしては、著者の大角から「シェルスクリプトの本書くんやけど、レビューやってや」みたいな感じで依頼が来た(もうちょっとフォーマルな頼み方だったかもしれない)。そういうレビューは初めてだったけど、シェルスクリプトは好きだし、大歓迎で OK の返事をした。

著者曰く「小さな Tips をいっぱい載せる本で、Tips 単位でレビューできるので普通の本よりやりやすいよ、簡単だよ!」という話で、シェルスクリプトは僕も書けるし、作業内容についてはまあいけるだろうと考えてた。今考えると死亡フラグだったと思う。

実際に初めてみるとこれがなかなか大変で、異常系とかいろんなパターンを考えながらのテストは思ってたより難しいし、それを Linux, BSD, Macと3つの環境で確認するとなるとけっこう時間がかかってしまった。平日の夜になんとか時間作って少しやって、残りは週末まとめてという感じで進めた。

最初の週にとりあえずユーザーインターフェース周りの Tips をやってみたんだけど、これがかなり難しいし、めんどくさかった。

  • 「パスワード入力の際に、ユーザーのキー入力を表示しないようにする」
  • 「ユーザーのキー入力を1文字だけ取得する(入力時にEnterを不要にする)」

とかで、「いきなりこんなマニアックなもん載せるのかよ」とか思ってた。結論としては最初の週にやったやつが一番難しかった。

だいたい、よく考えたら普通一冊の本に132個もコードが載ってるのだろうか。標準より多いように思う。

結局途中からもう一人の人にもレビュアーとして参加してもらった。それでだいぶ楽になったし、後半作業にも慣れてきたこともあって、無事全部のコードのレビューが完了した。

レビューを通していろんなスクリプトを試したし、man を読んだり参考サイトを調べたりもした。著者は当然僕よりもっとやってる。

10のことを人に伝えようと思ったら100ぐらいのことを知っていないといけないと思う。本というのは人に何かを伝えるためにあるんだけど、今回一番勉強になったのは書いた人本人なのかもしれない。

この本が多くの人の元に届くことを期待しています。

最後に

実家の親に本のレビューをしたことを伝えたら、「あんたなんかがそんなことやって大丈夫か」みたいなこと言われた。あんまり信用されてないようだ。次に実家に帰った時にはその本を持ってこいと言われた。なんとなくうれしそうにしてた。