養成読本を反省しつつ、ではリファレンスはどんな書籍か

タグ: Laravel5.1LTS   Laravel  

2015年12月8日、Laravelリファレンス発売促進カレンダーです。

肝心の「Laravelリファレンス」の内容を紹介していなかったので、いくらか詳しく、私個人の感想を入れながら書いてみたいと思います。

その前に、前書の反省から。

Laravel養成読本

「エキスパート養成読本」をはじめ、技術評論社のSoftware Design plusシリーズといえば、大型のムック本(書籍と雑誌の中間)と思い浮かべていただく方もいらっしゃるでしょう。しかしながら、ムック本であるとか、各章が独立しているとか知らずに購入された方も多かったかもしれません。

こちらの書籍に関しては、当初から「ムック本」として出版され、各著者が各担当章を責任を持って書き上げる形式として執筆依頼されたものです。書き始める前にどんな内容にするか、担当編集からたたき台が提出され、ダブらないようにそれを調整し、割り振り、後は各著者が書き上げました。(この頃は「養成読本」ではありませんでした。全体のページ数が多くなったため、「養成読本」として出ることになりました。)

「ムック本であるから各章が独立している」というのは著者陣には認識がありましたが、この書籍を手に取ってくださった方々の中には、通常の書籍とムック本の違い、ましてはムック本であることもわかりづらいため、「各章がバラバラである」という印象を抱かれた方も多いようです。(Amazonのコメントを読む限り、この書籍だけでなく、技術系ムック本全体の傾向でもあります。)

第三者の目でAmazonなど書籍の通信販売際で表示される表紙を見てみれば、「ムック本である」ことを見て読み取ることはできません。ましてや、「ムック本であるから各章がバラバラである」が当たり前だになってしまったのは、(この本に限らず)作り手の勝手な押し付けです。書店で手に持ってもらえば、内容を確認してから購入してもらえますが、通信販売がシェアを大きく広げている現代では、わかりやすく「各章は著者が分担し、責任を持って著作している」など、その旨を表紙できちんと説明すべきだったと思います。(私個人がこう思っていても、何もやりようがないのですが。)

そして、著者間が独立して章を書き上げるいう前提であったため、著者レビューや第三者によるテックレビューなどが行われていませんでした。各自が自分の原稿を個人でブラッシュアップしました。そのため、見落とした過ちで出版後多くの訂正を出すことになりました。これには「今まで担当してきたのが、ムック本でも同じ会社の人とか、近い関係の人が組んで書くことがほとんどで、今回の書籍のように著者が住んでいる場所もバラバラ、環境もバラバラであるという状況の経験がなく、レビューの提案が無かったのも一因であった」と担当者さんが本人が分析していました。近い関係の人達であれば、自主的にレビューが行われるのでしょうが、基本無関係な著者陣を集める時には、レビューのスケジュールも考えておく必要があるという見識を皆さんと共有したいと思います。(ムック本の出版予定がある方にぜひ。)しかし、たぶん、一番の原因は各自が自分の章を書けば良いという点が初めから強調されすぎた弊害だと思います。強調されたがゆえに、レビューを受けようとか、レビューが必要だというアイデアがまったく浮かびませんでした。

また、表紙のデザインで「封蝋印」に「速習」と書かれています。この表紙を見た時には単なるデザインであるとしか認識していませんでしたが、Amazonのコメントに、「けっして速習できない」と書かれています。冷静に、内容を吟味してみれば、確かに速習向きの内容ではありません。キャッチーな言葉ではありますが、不適切でした。

ターゲットは「Laravel初心者から中級者まで」でした。各章はこのターゲットに基づいて、題材が決められました。前半から後半にいくにつれ、レベルをあげるように章が決められました。Laravelのように特定のフレームワークという狭いターゲットの場合、マーケットも狭いわけです。特定のレベルの方向けだけに書いても部数が見込まれませんから、ある程度レベルも記述範囲も広くなるのは商業出版するため、致し方ありません。ページ数が決まっており、その中でたくさんの主題を扱うため、広く浅くになってしまいます。

声をかけていただいた時期はバージョン4.2の頃です。当然ターゲットも4.2です。次期バージョンが5.0になるなんてアナウンスされていませんでした。4.2が4.3になるなら、さほど違いは大きくないでしょうが、5.0へ上がるとなると変更も大きくなります。更に読者に与える印象も違います。5.0がリリースされたら、4.2はどうしても「古い」という印象を与えてしまします。

次期バージョンが5.0になるという情報は、章の割り振りが済んだあたりで入ってきたかと記憶しています。ターゲットをどうするのか、打ち合わせましたが、バージョン5.0のリリースと締め切りがほぼ同じでした。ご存知の通り、メジャーバージョンが上がる直前、実はマイナーバージョンをあげるときも同じなのですが、リリース直前までいろいろ変わるのがLaravelです。(リリース後も進化します。)明確なベータリリースという概念は取り入れていません。そのため、5.0をターゲットに書くわけにいかず、結局4.2がメインターゲットとなりました。

バージョンに関しては呪われていました。もしあのとき、英断で「ちょっと発売を送らせてターゲットは5.0」と決めたとしても、次のバージョンは5.1でLTS(ロング・タイム・サポート、長期サポート版)です。5.0と5.1では結構変化がありました。いずれにしても結局、すぐに「古い」と言われることになりました。

LTSが2年に一度出されることがアナウンスされています。ですから、次のLaravel出版ブームは次のLTSの頃だと考えるのが妥当です。Laravelは進歩が大きいフレームワークのため、紙の書籍にはそぐわないのですが、LTSであればメンテ期間の2年間、内容が陳腐化することはありません。(実際は、LTSでも新機能が追加されているのですが…)

私は第1章を担当しました。書いていてなんですが、個人的には「歴史」や「バックボーン」に興味を持たないタイプの人間です。一番古くからLaravelを使っていた人間ですので、このムック本では技術的な部分は他の人に任せ、こうした部分を書くのが適当だろうと当初から思っていました。ですから、担当の割り振りは当然だろうと思っていました。

短い歴史を通して、バックボーンを伝えることに重点を起きました。背景的な物事に興味がない人間でありますが、Laravelのバックボーンを理解するのは、フレームワーク自体を理解するために手助けになると思ったからです。技術的な「クール」な部分は、他の著者に任せ、「熱く語る」ことにしました。書いている途中で、この文章は好きな人と嫌いな人に別れるだろうなと、考えていました。内容的には、技術書には不必要な部分でありますので、最後にもし全体のページが多すぎて詰める必要があるのならば、切り捨てられてもかまわないと思い書きました。

出版後、このバックボーンの部分が意外と好評だったのは不思議でした。つまるところ、技術者にもいろいろなタイプがおり、思い入れや情熱に反応するタイプの人も多いということでしょう。可能であれば、多くのタイプの人に伝わるように、様々なポイントから情報を発信するのは、悪くないようです。

Laravelリファレンス

最初にポイントだけ絞ってお伝えしましょう。この記事を書いているたった今、最終的に手を入れられている最中で、すぐに印刷屋さんに回されます。ほっかほかの内容です。

  • 名前に「リファレンス」が含まれていますが、7割方は解説です。
  • 対象はLaravel初心者から中級者です。
  • 初心者と言っても全くフレームワークを知らない人向けではありません。公式ドキュメントのチュートリアル程度は自分で実行でき、ドキュメントも読める程度のレベルの初心者を想定しています。
  • 内容を順に紹介すると、最初の1/5で概論と基本となる機能を紹介しています。
  • データベースの解説にも1/5を割いています。コードに埋もれておりドキュメントに記載されていない部分を表にまとめています。
  • フレームワークに含まれる応用的な部分(認証、イベント、キャッシュ、エラー処理、ログ、多言語化、メール、ペジネーション、セッション)に1/5を割いています。
  • コンテナ、プロバイダー、契約(コントラクト)、ファサードというフレームワークの拡張に関わる事項に1/8、テストに1/8、セキュリティーやコマンドラインツールの制作にも触れ、代表的なComposerパッケージを紹介し、最後に1/8を使い、ブログサンプルを設計から実装まで解説しています。

私の感想です。

  • なんと言っても紙の書籍です。オンラインやPDFではなく、紙で読みたいという要望はいつでもあります。まだ刷り上がっていませんが、私自身は利用するためにディスプレイの下に置いておこうと思っています。DBのメソッドや設定項目を思い出す時に、こうした要点の片まりのような書籍はやはり便利ですから。
  • 前書と同じく「広く浅く」になっています。ページ数の関係で、公式ドキュメントより情報量は少ないです。ただし、多用される部分を中心に解説していますので、全体を把握するには効率がよいでしょう。
  • 私が初心者に勧めるとしたら、1.Laravelをインストール(公式ドキュメント+Laravelリファレンス)、2.公式のチュートリアルをこなす、3.リファレンスの初めのサンプルプロジェクトを眺め、全体的な使い方をさっと掴む。4.リファレンス全体をさっと読む。5.自分で簡単なブログやTodoシステムを作りながら、各機能を試す。6.詳細はドキュメントやリファレンスを参照する。になります。
  • できるだけ用語は統一しましたし、プロの手による編集作業である程度全体の統一はされましたが、他人の目で見ると記述や表現は各章の担当の癖がどうしても残っています。多人数による著作では致し方ないようです。

これ以降は、私の思いですので、読まなくても結構です。

今回の書籍は、既に何度か紹介したとおり、当初は中級者向けとのことでした。ページ数があり、あるがゆえに値段が高くなり、高くなるがゆえに初心者では購入してもらえないので、中級者向けの内容とのことでした。

私はどちらかといえば、ある内容を噛み砕いて伝えるほうが得意です。それを考えるとやはり初心者向けの解説が適しています。更に、原稿を書く時期がちょうど花粉症の頃でした。花粉症が出るときは、症状が出ていても、薬でおさえていても、頭の回転が非常に鈍ります。難易度と花粉症による思考の鈍りを考慮し、一度お断りしました。

今回の著者は記述ページ量順に名前が並んでいます。はじめの方から新原さん、竹澤さんと並んでいますが、二人の書いた量はさほど変わらないかと思います。お二人は話の最初からの参加者です。話をお断りした時に、「二人で決めて書いたほうが良い本になる」とお伝えしました。中級向けでテストを必ず含むというコンセプトがはっきりしていましたので、そうした書籍には人数がいるより、個人か少人数がより適していると思っています。

その後、「やはり初心者を中級レベルに引き上げる内容をいれることになった」ということで、私も参加することになりました。

私の担当分だけについてバラすならば、割り振られた内容を丁寧に書いていったら、概算で予定ページ数の2.5倍程度にもなったため、先ず自主的に1.4倍程度に減らしました。この時点で、ページ数が溢れたら電子書籍へスピンオフさせる可能性があるから、削除しない方向でという話がありましたので、それ以上手を入れませんでした。

当初は初心者向けのチュートリアルを含める構成でした。しかし、どう頑張ってもページ数が全く足りません。そこで、助言に従いサンプルプログラムを公開し、その一部を解説する形式へ変更しました。後ほど、Laravelの公式ドキュメントにチュートリアルが追加されたため、この決定はラッキーでした。レベルとしては、公式ドキュメントのものより少々レベルを上げ、より実用的にしています。公式ドキュメントのチュートリアルは、新機能の紹介も多少含み、「どうだ便利だろう」感が強くなっています。より地に足を付けたサンプルプログラムです。

サンプルプログラムは、当初普通のCRUD処理にしようかと思いましたが、初心者が悩む認証処理と絡め、ユーザーのCRUD処理にしました。コードから学ぶタイプの方のため、コメントはたっぷり入っています。初心者が悩みそうな所をうまいこと抑えたつもりです。小さなサンプルに要点をたくさん詰め込みました。

機能の概論の部分は、全ての機能を羅列してもしかたがないので、できるだけ応用の効く基本となる部分に絞りました。

この時点で、著者陣以外の方々のレビューを受け、内容が多少膨らみました。(後ほど編集作業が入るため、最初からこの時点のレビューはテクニカルな部分に絞るべきでした。そのほうが関わった方全員の労力を節約できたかと思います。)

その後全員が書き上げ、レビューを通し、ページ数を合計したら、予定数の倍近くになるとのことで、半分は紙の書籍、半分は電子書籍へと移すことが決まりました。(私の意見は、中級向けの内容を紙へ、それ以外を電子書籍へ移動する、初心貫徹型でしたが、それとは逆に紙にやさしめの内容、電子書籍にはよりコアな部分ということになりました。レベルの高い部分は、ややコア過ぎて、紙の書籍には適さないのではないかという判断からです。)

紙の書籍全体が、初心者向きへシフトしたため、当初から初心者向きの内容を担当している私の書いた部分は、80%程紙の書籍に入ります。最終段階で更につめましたが、おおよそ含まれます。電子書籍に向けて、多少内容を足したいと思っています。Laravelはいろいろと広い主題を扱っていますから、本当はこの書籍の5倍ほどないと、十分に書ききれません。

悔やまれるのは、原稿の締め切りが徐々に後ろにずれていったため、手を入れられる機会が少なかったことです。初めから、今の期日だと最初からわかっていれば、もっと知恵を絞れたのにと残念に思っています。そのため、自分の書いた部分の満足度としては70%程度です。スピンオフ電子書籍では90%ほどに上げたいと思います。

さて、この記事が書き上がったたった今、ついに印刷屋さんに行きました。初めて「はじめに」の部分を読んで、私の名前が上がっていてビビっています。 :D

スピンオフ電子書籍

内容は全く未定です。今の時点で、GitHubにプライベートリポができた状態です。

内容を追加してもかまわないようなので、今からいろいろ追加しようかと思っています。