技術評論社さんより出版されている「AngularJS アプリケーションプログラミング」を、WINGSプロジェクトさんの書籍レビュアーに応募し、献本頂きましたので、レビューいたします。私はWebシステム開発の専門家ではないので、間違いがあればご指摘頂ければ助かります。
最近のリッチなWebサイトは、もれなく何らかのフレームワークを用いて作られています。言語とフレームワークが一体となっているJavaとは違い、perlやphpなどの柔軟なスクリプト言語においては、その柔軟さ故に大規模なシステムを一貫したルールに則って開発していくのには不向きでした。そのうち、サーバ側の処理能力も高くなってLAMP(perからphp)が台頭してきたこともあり、コンテンツを一貫した見栄えで供給できるCMS(XoopsやWordpress等)が登場し、より複雑なコンテンツを体系定期に設計・実装していくためのフレームワーク(CakePHPやFuelPHP等)が登場しました。
このAngularJSは、こうした大規模システムを構築するためのフレームワークの一つです。ただし、これまでのフレームワークと違い、クライアント、つまりブラウザ上で動作するJavaScriptのフレームワークです。JavaScriptは、多くのブラウザ上で動く唯一の言語ですが、私から見るとかなり癖の強い言語で、ある意味柔軟ではありますが、とても大規模なシステムを構築するには向いているとは言えません。ですから、登場からかなり長い期間、JavaScriptは不遇の時代を過ごしましたし、2010年代になって脚光を浴びた際も、jQueryのような、ピンポイントの利用に限られていました。
ところが、その後スマートフォンの普及によって、クライアントサイドで動くアプリケーションでも、複雑で洗練された処理が求められるようになってきました。当然、Webシステムに対してもその価値観が及びはじめ、とても生産性が高いとは言えないJavaScriptで、大規模で系統だったシステム開発への要求が高まってきました。
こういったなかで登場したのが、このAngularJSです。(大きく分類すれば)サーバサイドのフレームワークに広く使われているMVC型のフレームワークをJavaScriptに導入したもので、多くの処理をクライアント側でやってしまおうという、大胆な試みです。このあたりの基礎的な背景も1章で触れられています。類似のフレームワークの中ではやや後発ですが、シリコンバレーでは確実に本命視されているフレームワークです。特にAngularJSはフルスタック(必要な全ての機能を体系的に提供する)フレームワークですので、サンプルコードの中には、非力なマシンだと若干重い事もありました。幸い、プロセッサの処理速度や、ブラウザの実行エンジンの高速化、データ回線の高速化は日進月歩で進んでおり、かなり高度でリッチなシステムも、クライアント側で処理出来るようになっていくと思われます。むしろ、旧来のように、入力を反映させるために「送信」ボタンを押し、POSTをサーバでの処理を経て結果が返ってくるほうが、利用者にとって不便を感じる時代になってきています。また、ブラウザの開発者ツールも充実してきたので、場合によってはクライアントサイドで構築する方がデバッグがやりやすい時代に入ってきています。
AngularJSは、包括的なフレームワークで、jQueryやjQueryUIのような機能なども含めて、アプリケーションに必要なフレームワーク一式を提供します。そのため、その機能は多岐に及んでおり、この本もかなりの分量になっています。正直に言うと、最初の方で簡単なフォームを操作するだけで、なぜこんなに面倒な事をしなければならないのか、jQueryならもっと簡単に、直感的に書けるじゃないか、と思ってしまいました。しかし、それはAngularJSの表面しか見えてなかったからでした。「JavaScriptできちんとしたモダンなプログラミングモデル(例えばMVCモデル)を採用して大きなシステムを構築する」という、素人目には無理難題に挑戦しているのがAngularJSなので、コーディングルールが多いです。本書も見た目の分量は多い(本文で497ページ)ですが、それを一つずつ過不足がなく、無駄なく分かりやすい説明が成されているのが本書でした。これを一冊読めば、かなり高度なサイトも構築できるようになる基礎を身につけられるようにできています。
一方で、JavaScriptは癖が強く、あまり馴染みの無い特徴を多く持っています。jQueryの時代は、そこまで高度な設計はプラグインの作者に任せておいて、利用者はワンラインのおまじないを書いて目的を達することもできました。ですが、AngularJSを使うほどのシステムになると、JavaScriptの細かな動作仕様について知っておかなければ、なぜこういう動作をするのか、なぜこういう「迂回路」のような書き方をしなければならないのか、理解できない部分が多くありました。また、JavaScriptによる制約なのか、AngularJSの設計思想による制限なのかも分からない箇所もありました。もちろん、これは私の勉強不足が原因ですし、そこから説明してたらとても紙面が足りません。言うなれば、本書を読むための「JavaScript入門」がもう一冊あっても良いレベルだと感じました。もちろんJavaScriptの入門書やリファレンスは沢山ありますが、AngularJSの思想は、JavaScriptそのものの思想とはかなり違っていて、むしろそこを埋めるためのフレームワークであると思いますので、本書を理解するための入門書から読みたいと感じました。
本書は「コピペでHello Worldがつくれるよ」という表面上の話だけでなく、フレームワークの構造から、暗黙で動いてるコネクタの仕組みまで詳しく説明している専門書であると言うことです。テーマごとに整理されているので、最初のうちはリファレンスとしても使えるでしょう。本質的な部分を「ここはこういうものです」と誤魔化さずきちんと説明してあるので、フレームワークの裏の挙動をきちんと理解したい、そう思わせる技術書です。
また、後半では、今や必須とも言える「テスト駆動型開発」に必要なユニットテストの自動化や、多くのプラグインによるリッチなUIの実装まで紹介されております。このあたりまで読んでいくと「jQueryでやれば良いじゃん」とは思わなくなってきます。また、本書は入門書から実践書の範囲をしっかりカバーしており、その思想や動作原理を誤魔化すことなくきちんと説明しています。きちんと説明されたら、きちんと理解したい、と思ってしまうのは当然で、それだけ作り込まれた内容であると言えます。JavaScript中級者が、本格的なシステムを構築する際の最初の書籍としてとても良い本です。
同じJavaScriptをベースにしたサーバサイドのnode.jsの開発の勢いは衰えることなく、ECMAScript6 も制定されました。こうしている間にも、AngularJS2 がアルファ版をリリースしていますし、JavaScriptの欠点を補うため、TypeScriptを採用しています。WebSocketのような、粒度の小さい逐次通信技術も発展していますし、AngularJS2とTypeScriptは、今後の大規模Webサイトの本命になるかも知れません。ですが、これはもう少し先の話になりそうですので、ここでAngularJSの基礎を押さえておいて、来たるべき事態に備えておくのは悪くないと思います。
AngularJS2では、双方向バインディングの見直しや、より厳密なモデル化の進化など、より洗練されたフレームワークになりそうですので、AngularJS2が登場した際には、本書のAngularJS2対応版がいち早く読みたいです。また、このレビューの中でやたらjQueryと比較してしまいましたが、本書を読めば分かる様に、本来の目的が全く違います。jQueryと合わせてAngularJSを使う事もできます。カバーする範囲が全く違うのです。また、最近流行のスマートフォンアプリなども、ManifstJS等と合わせて構築できそうな気がします。
- 難易度 : 中級
- 取っつきやすさ : ★★★
- 内容充実度 : ★★★★★
- 読みやすさ : ★★★★
- 最新テクノロジ : ★★★★★
Comments are closed