初めての JavaScript 第 2 版2009年12月30日 17時07分

O'Reilly Japan から書籍『初めての JavaScript 第 2 版』(Shelley Powers 著、武舎広幸・武舎るみ訳) (Amazon) が出版されています。出版にあたって、私が技術レビューを務めさせていただきました。販促効果があるのかわかりませんが、帯に推薦文も寄せています。

単なる JavaScript の書き方にとどまらず、デバッガの使い方など基礎になる事柄を幅広く取り扱っていますので、JavaScript を始めたいという方は一度手にとってみることをお勧めします。また、周囲にそのような方がいる場合もぜひ勧めてあげてください。

読み終えた方は、『JavaScript 第 5 版』(Amazon) や『JavaScript: The Good Parts』(Amazon) に進むのもいいですし、Prototype.js などのコードリーディングをしてみるのもいいと思います。なお、ここで Prototype.js の名前を挙げたのは、次の二つの理由によります。

  1. ソースコードが比較的読みやすい。
  2. 既にコードリーディングを行った人が大勢いて、Web 上に多数のコード解説がある。

WEB+DB PRESS Vol.49 WAI-ARIA2009年03月02日 17時35分

現在発売中の WEB+DB PRESS Vol. 49 にて Accessible Rich Internet Applications (WAI-ARIA) に関する記事を書かせていただきました。2009 年は Web アクセシビリティの年になるという噂をどこからともなく聞きつけてこのテーマにしたのですが、ちょうど WAI-ARIA 1.0 の最終草案も公開されよいタイミングになったのではと勝手に思っています。

WAI-ARIA とは何なのか、詳しいことは雑誌記事を参照していただくとして、簡単に言えば JavaScript で構築した RIA を機械的に認識するための仕様です。たとえば JavaScript でこったボタンを作ったとしましょう。利用者がどうやって「それがボタンである」ということを認識するかといえば、「周りから浮き出ていてマウスカーソルを乗せると色が変わる」といった感覚によっているわけです。

PC 上でグラフィカルなブラウザ経由でしか Web を使わないのならそれでもいいかもしれませんが、Web の閲覧環境というのは千差万別でしてそれでは困ることも多々あります。そこで、グラフィカルな表現に加えて「これはボタン、すなわち何らかの動作のトリガーとなるものである」という情報を埋め込んでおくことで、個々の閲覧環境に応じた表現をとることも可能となるのです。

さて、雑誌記事中では WAI-ARIA で拡張された tabindex 属性にも触れているのですが、それと関係して「Web2.0ナビ: 送信ボタンの上にリンクがあればtabindex=-1に」という記事がありました。フォーム内で、フォームコントロールのみをキーボードアクセス可能にするために、リンクの tabindex 属性に値 -1 を指定しようという内容です。しかし、これをやってはいけません。そのリンクがキーボードアクセス不能になり、アクセシビリティが低下してしまいます。

そもそも tabindex 属性によるアクセス順の指定には、ページ内での絶対的な順序しか指定できない (特定の要素からの相対的な順序の指定ができない) という欠点があり、乱用すれば直感的な操作を妨げてしまいます。tabindex 属性を使う際には以下 2 点に気をつけ、アクセス順を指定する属性としてではなく、フォーカス可能かどうか・キーボードアクセス可能かどうかを指定する属性として使うべきというのが私の考えです。

  1. tabindex 属性の値には基本的に 0 (フォーカス可能かつキーボードアクセス可能) か -1 (フォーカス可能だが直接的にキーボードアクセス可能ではない) かのみを用いる。
  2. HTML 4 で tabindex 属性が定義されている要素 (リンクとフォームコントロール) では基本的に tabindex 属性を用いない。

tabindex="-1" を使う場面の解説は雑誌記事に譲るとして、執筆にあたってつくづく感じたのは日本語資料の充実具合です。WCAG 2.0 が勧告からわずか 1 か月で日本語に訳され、WAI-ARIA 関連文書の日本語訳もそろっているなど、もう関係各所の皆様には足を向けて寝られません。

そんなこんなで 1 年間続けさせていただいた WEB+DB PRESS での連載も今回が最終回です。正直ライブラリ全盛のこの時期に DOM だの何だの書いていて受け入れられるのだろうかとも思いますが、何らかのヒントにでもなれば幸いです。読者の皆様、編集はじめ関係者の皆様、本当にありがとうございました。

WEB+DB PRESS 連載2008年04月25日 00時24分

現在発売中の WEB+DB PRESS Vol. 44 より、「JavaScript + ブラウザ探検」という連載を始めることになりました。初回は「JavaScript + ブラウザ温故知新」として、DOM の基本概念や JavaScript を扱えるブラウザの歴史などをまとめています。次回以降は DOM や HTML 5 といった、ブラウザで利用できる API を中心に話を進めていこうと思っています。

というわけでタイトルに「JavaScript」と入ってる割に、純粋な JavaScript の話はあまりなさそうですが、ブラウザ上で何かを実現するためのヒントとなれれば幸いと思っていますので、よろしくお願いします。

「まるごとJavaScript & Ajax! Vol.1」2007年02月02日 23時20分

まるごとJavaScript & Ajax! Vol.1」の執筆に参加させていただきました。ええっと、まあ、その、なんと言うか……書きすぎました。「にわかな奴ほど語りたがる」の典型です。半分とは言わないまでも 3 分の 2 くらいで収めるべき内容だったような気がします。

一応言い訳をしておくと、雑誌に寄稿するのは初めてで分量の見当がつかなかったからで。桁数行数は示されていたのだから、ワープロソフトで整形すればページ数の目安が一目瞭然のところを、そんなことすら思いつかなかったわけで。すっかり余裕なしで書き上げてしまった原稿をひとつの記事にまとめ上げてくださった編集の方々には感謝するばかりです。

ちなみに書いていて思ったことといえば Opera 9 のアグレッシブさ。記事中では触れられませんでしたが Web Forms 2.0 の一部実装など、IE 3 の CSS 実装の二の舞にならないかと思わず心配してしまうほどです。

遅くなりましたが Special 2 Part 1、ジェネレータを用いたアニメーションのサンプルです。また、インプレスのサポートページにて訂正情報が出ています。

C MAGAZINE Firefox 特集2005年09月28日 05時50分

C MAGAZINE 2005 年 10 月号の特集「Firefox のすべて」を読みました (ごめんなさい、立ち読みです) 。「Part. 3 ソースからみた Firefox」は私に C++ での GUI プログラミング (というより C++ 自体) の経験がないこともあってざっと目を通すだけだったのですが、ちょっと気になった点が。

「Interface と実装は同じ UUID を持つ」というような記述があったと思うのですが、これは誤りではないでしょうか? 私も以前勘違いしていたのですが、ひとつの「実装」が複数のインターフェースを実装することもあれば、ひとつのインターフェースが複数の「実装」に実装されることもあるので (ややこしい……) 、インターフェースと実装の UUID は独立している必要があるのではないかと。例に出ていた StringBundleService の場合も、

インターフェース
  • IID: nsIStringBundleService
  • UUID: D85A17C0-AA7C-11d2-9B8C-00805F8A16D9
実装
  • Contract ID: "@mozilla.org/intl/stringbundle;1"
  • UUID: D85A17C1-AA7C-11d2-9B8C-00805F8A16D9

1 ビット違いますし。

それから、個人的には、Components.classes[...].createInstance() / getService() が呼び出された時点で実装が作られ、QueryInterface() はその実装の持つインターフェースを実際に使えるようにするもの、とイメージしているので、そのあたりの説明に少し違和感を感じました。

……なんて買ってもいないのにあつかましく書き散らして申し訳ない限りです。ほかの記事も合わせて 1 時間半も立ち読みするくらいならとっとと買えと……。