『パーフェクトJavaScript 』――JavaScriptは「勉強しなくてもOK」な言語なのか?
パーフェクトJavaScript 井上誠一郎、土江拓郎、浜辺将太 (著) 技術評論社 2011年9月 ISBN-10: 477414813X ISBN-13: 978-4774148137 3360円(税込) |
■今、どこにでもあるJavaScript
前世紀、JavaScriptは「ホームページのおまけ」として使われる言語だった。ロールオーバーするアイコン、マウスポインタを追いかける猫、「右クリックは禁止です!」……。うっとうしい仕掛けを回避し、セキュリティを高めるため、JavaScriptはブラウザの設定でOffにするのがネットサーファーのたしなみとされていた時代もあった。Webブラウザでのクライアントサイドスクリプティングでできることなんて、その程度だったのだ。
あれから十余年。今やJavaScriptはどこにでもある。Webアプリケーションの中核的な動作を担っていることだって少なくない。WebブラウザでJavaScriptをOffにする? あのWebサイトもこのSNSも、まったく閲覧できないじゃないか!
ダイヤルアップ時代には考えられなかった、現代での「JavaScriptの用途」をおさらいしてみよう。
●Webアプリケーションのフロントエンド
TwitterやFacebookは、Webブラウザ上でいろんな機能を実現している。更新がリアルタイムで通知されたり、オンラインの友達とチャットができたり、今までの「デスクトップアプリケーション」のようなことがブラウザのウインドウだけで行える。Google Docsに至っては、表計算やワードプロセッサ、プレゼンテーションソフトまでブラウザ上で動くようにしてしまった。
これらはみんなクライアントサイドスクリプティング、つまりJavaScriptによって実装されている。
●スマートフォンアプリ
iPhone4Sは、3日間で400万台を販売したらしい。各キャリアの製品情報ページを見ると、いつの間にかタッチパネルのAndroid端末の方が多くなった。電車の中でスマートフォンを使っている光景は、今やちっとも珍しくなくない。
普及フェイズに入ったスマートフォン向けのアプリケーションを開発する際にも、JavaScriptは重要な役割を担っている。Webブラウザ上ではPCと遜色ない性能でJavaScriptが動作するため、多彩な機能を持ったアプリケーションを実装できる。また、「ネイティブアプリケーション」においても、内部では組み込みのWebブラウザを使い、HTML5+CSS3 +JavaScriptで実装されているケースが増えている。
●サーバサイド・スクリプティング
Webブラウザやスマートフォンはクライアントサイドでの利用だが、JavaScriptによるサーバサイド・スクリプティングも現在注目を集めている。以前から細々とiPlanetやJaxerといったプロダクトは存在したのだが、Node.jsの登場で状況は一変した。
Node.jsは、GoogleのJavaScriptエンジンであるV8をバックエンドに使い、サーバサイド用途としても十分なパフォーマンスを達成できるようになった。また、イベント駆動型のアーキテクチャは、C10K問題への解としても期待されている。
まだまだ開発途上の若いプロダクトだが、すでに商用環境への導入事例もあり、日本でもカンファレンスが開催されるなど、注目度は高い。
■「みんな勉強しなくてもできると思ってる唯一の言語だよね」?
クライアントのみならず、サーバサイドでも注目を集めるJavaScript。Web系の開発を行う際には、もはや避けて通ることは難しい。つまり、JavaScriptはもはや「Webプログラマのたしなみ」になりつつあるのだ。
一方、著名なJavaScriptプログラマのDouglas Crockford氏は、こんな恐ろしくも的確な発言をしている。
JavaScript is the only language that people think they can program without actually learning it.
え、日本語で? OK、筆者の同僚による日本語訳を紹介しよう。
JavaScript はみんな勉強しなくてもできると思ってる唯一の言語だよね、HAHA
日本語訳でも恐ろしい。何が恐ろしいって、冗談ではなく一定の真実を含んでいるところが恐ろしい。jQueryとプラグインを導入してちょっとハデめのUIが動いてしまうと、それだけで「JavaScriptプログラミングをした!」と思ってしまう層が、確かに存在するからだ。
■パーフェクトなJavaScriptの追求
注目度と重要度、ともにJavaScriptは急上昇中である。しかし、イディオムや文化が醸成する前に普及してしまった、という歴史的経緯があるため、残念ながら「勉強しなくてもできると思ってる」プログラマが一部には誕生してしまった。なぜか。それにはいくつかの理由が考えられる。
●入門書と「サイ本」のミッシングリンク
JavaScriptをきちんと学ぶための参考書は、長らく決定版が存在しない状態だった。数多ある入門書と、言語仕様を詳解した「JavaScript 第5版」(通称「サイ本」)の間には大きな難易度の乖離があり、初心者を中級者~上級者へと押し上げてくれる本は「JavaScript: The Good Parts」ぐらいしか見当たらない状況が長く続いてきた。
満を持して登場したのが、本書『パーフェクトJavaScript』である。
■信頼と実績の「パーフェクト」シリーズ
C#、Java、PHPに続く、信頼と実績の「パーフェクト」シリーズ。本書もシリーズ名に恥じぬ良書に仕上がっている。
最も注力しているのが、Part2の「JavaScript言語仕様」だ。入門書ではまったく不足だが「サイ本」では詳細すぎる言語仕様の解説を、的確な密度と難易度でまとめている。プロトタイプチェーンの図示、callとapplyの解説からコールバックのイディオムへの誘導などは、「なんとなく」理解していた筆者のJavaScript習熟度を一気に押し上げてくれたように思う。
以降、「クライアントサイドJavaScript」「HTML5」「Web API」「サーバサイドJavaScript」と解説が続く。いずれも動作原理に的を絞った内容になっているので、「すぐ使えるサンプル」が網羅されているわけではない。しかし、「JavaScriptプログラマ」として仕事をするのであれば、避けては通れない内容なので、脱初心者のためにもしっかり身に付けておきたい。
■執念と良心
「パーフェクト」シリーズの既刊同様、「ちゃんとしたプログラミングを教えたい」という執念にも似た記述が、本書にも散りばめられている。柔軟な言語仕様が特徴のJavaScriptは、裏を返せばいくらでも「ゆるふわ」コードや「カオス」コードを書くことができてしまう。P.038のコラムで語られているように、歴史的経緯により「イディオム」が定着しないまま普及してしまったのが一因である。
筆者の個人的感想としては、「ちゃんとした入門書の不在」も原因の1つだと思っている。本書「2-3-2 varの省略」から少し引用すると……
本書に限らず良心的な本であれば暗黙のグローバル変数を推奨しないはずです。本書も推奨しません。varの記述は省略しないでください。
とある。「パーフェクト」シリーズの魅力がちゃんと受け継がれた「良心的な本」であることの、明確な証拠ではないだろうか。
■まとめ
JavaScriptは、Webプログラミングに携わるならば避けては通れない言語となった。混沌に打ち勝つには、「正しい理解」が最大の武器になる。
「正しい理解を提供しよう」という意志を持って書かれた本書の行間には、著者陣から惜しみない「良心」が注がれている。もしあなたが職業プログラマであれば、きちんと理解を深めた上でコードを書くのが「プロとしての良心」ではないだろうか。
本書から良心を受け取り、武器を身に付け、混沌と戦うプログラマが1人でも増えることを願ってやまない。
(『Wife Hacks ~仕事と家族とコミュニティと~』
コラムニスト kwappa)