読者です 読者をやめる 読者になる 読者になる

「AngularJSリファレンス」という本を書きました

AngularJS book

金井さん(@can_i_do_web)と吉田さん(@teyosh)との共著でAngularJSリファレンスという書籍を執筆しました。

AngularJSリファレンス

AngularJSリファレンス

どのような本か?

この本はAngularJSの脱初心者〜中級者向けを目指して書きました。
公式ページのチュートリアルやドットインストールの入門講座をこなして、ある程度AngularJSを使えるようになった人が、その次に進みたいときに読むのに適していると思います。
また、AngularJSのソースコードを読まないと分からないような内容もいくつか書いているので、AngularJSを使い込んでいる人にも何かしらの新しい発見があるのではないかと思います。

本書はAngularJSの機能をひと通り網羅した内容になっています。
タイトルに"リファレンス"と入っていますが、単純に機能を紹介するだけではなく、serviceとfactoryの使い分けの方法を紹介したり、パフォーマンスを考慮した実装方法について解説していたり、カスタムフィルター・サービス・ディレクティブの実装例を数多く紹介していたりするので、ただのリファレンスにとどまる内容にはなっていません。

一方で、JavaScriptやHTMLの基礎、AngularJS向けのAPIサーバーの作り方、チュートリアル形式でアプリケーションを作る、というようなことは書いていないのでご注意ください。

みどころ

個人的におすすめなのは、Chap.11のテストとChap.12のセキュリティです。

Chap.11では、Karmaを使ったユニットテストと、Protractorを使ったインテグレーションテストについて解説しています。
ユニットテストについては、別の章で作成したサンプルコードを対象にして、フィルター・サービス・ディレクティブのテストを書くという形式で、Karmaの使い方、JasmineのAPI、モックの使い方や作り方などを解説しています。
インテグレーションテストについては、簡単なToDoアプリケーションを対象にしてProtractorの使い方を解説しています。さらに、ダウンロードできるサンプルコードには、本文中で解説しているテストコードの他に、各章のサンプルコードに対するインテグレーションテストを付属しています。本文中では紹介しきれなかったテクニックを使っていたりするので、ぜひ参考にしてみてください。

Chap.12は、間違ったことを記述するとまずいところなので、慎重になって書きました。ページ数の割には調査にもっとも時間がかかった章かもしれません。
この章では、どういう脆弱性があって、その脆弱性に対してAngularJSではどのような対策をしているのかを解説しています。さらには、制限の強い機能を先に説明し、できないことがあれば危険を理解した上で制限をゆるめていくという構成で解説しています。また、SCEを無効にするような危険な機能はあえて載せていません。

テストやセキュリティはAngularJSのコアの機能ではないため情報があまり多くないので、本書をぜひ役立ててもらえるといいなと思います。

AngularJSの対象バージョンについて

本書はAngularJSのバージョン1.2と1.3の両方に対応しています。

出版されるころにはAngularJS 1.3がリリースされているだろうという目論見で、AngularJS 1.3対応版として書いていました。その目論見通り、つい先日(8月29日)、AngularJS 1.3.0-rc.0(リリース候補版)がリリースされました。リリース候補の段階に入ったので、これから書籍の内容が通用しなくなるような変更は入らないと思っています。
ただし、ルーティング機能に関してはAngularJS 2.0向けに開発しているものをAngularJS 1.3にバックポートすると発表されているので、今後大きく変わるのかもしれません。

なお、AngularJS 1.3の新機能については、脚注に注意書きがしてあります。そのため、AngularJS 1.2で開発している人も問題なく読めるようになっています。(実際のところ、1.2と1.3はそれほど大きな違いはないですけどね)

ちなみに、個人的におすすめなAngularJS 1.3の新機能はng-strict-diと、ng-repeatの中で使えるasキーワードです。本書でも紹介しているので、ぜひ使ってみてください。

裏話的なもの

書籍の紹介はここまで。
ここからは裏話的なものを書きたいと思います。

執筆に至った経緯

昨年末くらいにQiitaにちょくちょくAngularJSネタを投稿していました。おかげさまでそれなりにストックされています。

この投稿がきっかけで「AngularJSの本を出す企画があるのですが参加しませんか?」と声をかけてもらえたようです。
つねづね機会があれば本を書いてみたいと思っていたので、即答でOKしました。

執筆に利用したツール

原稿はRe:VIEWで書いてBitBucketで管理していました。

今回はじめてRe:VIEWを使ってみたのですが、手軽に使うことができていいですね。中でもお気に入りなのが、外部ファイルを取り込む機能です。
サンプルプログラムはJavaScriptとHTMLで書いて、自動テストを通すようにしておきます。そしてGruntのコマンドをたたくと、サンプルプログラムを本文に取り込んで、HTMLやPDFを生成するようにします。
このような構成になっているので、テストを通っていないコードが本文に入ったり、サンプルプログラムのコピーミスを防いだりすることができました。

とか言っておきながら、ローカルにインストールしてあるProtractorのバージョンが古くて、テストが通らなくなっているところがありました。ごめんなさい><
詳細は正誤表のページをご覧ください。まもなく修正内容が反映されると思います。

雑感

執筆を引き受けたのはいいものの、短い期間でたくさん書く必要があったし、自分がどれくらいのペースで書けるのかも分かりませんでした。
そこで、毎日書いた文字数を記録して、目標に届かないようだったら土日に多めに時間をかけたりとかペース調整して書くようにしました。

f:id:ZOETROPE:20140831160410p:plain

その甲斐もあって何とか予定通り書き終えられました。でも平日の仕事が終わってからの時間と土日を使って、ほぼ休みなく2ヶ月くらい書いていたので、最後のほうは手首とか背中とかいろんなとこに痛みが…。もし次の機会があったなら、もう少しゆっくりめのペースで書きたいところです。

あと、ぼくの書く文章は誤解を与えないように注意しているせいか、くどい表現が多いみたいです。スカっと読める文章を書けるようになりたいですね。


というわけで、一度お手に取っていただけると幸いです。

AngularJSリファレンス

AngularJSリファレンス