• 検索結果がありません。

Ajax-ch00

N/A
N/A
Protected

Academic year: 2021

シェア "Ajax-ch00"

Copied!
15
0
0

読み込み中.... (全文を見る)

全文

(1)

vi

序章

本書の内容

Ajax は本書の執筆時点で非常に注目を集めている新しい技術であり、この技術の内幕を名高

いManning 社の「In Action」シリーズの1 冊として紹介できることをうれしく思います。ただ、

本書を執筆する中で、私たちはちょっとした問題に突き当たりました。Ajax はホットなトピッ

クですが、実際には新しい技術ではないのです。また、技術と呼ぶのも多少語弊があります。

どういうことか説明しておきましょう。Ajax では、よく知られているいくつかのウェブ技術を

組み合わせ、それらを新しい興味深い方法で使用します。まったく新しい技術の使い方を初めて

学ぶ時は、まっさらの状態から始めるられるので、ある意味では単純に話を進めていくことがで

きます。しかし、Ajax の場合はそうはいきません。さらに、学ばなければならないことはたくさ

んあります。そのため、本書は「In Action」シリーズの他の書籍とは少し異なる構成になってい

ます。本書を読んでいてこの点が気になるかもしれませんが、Ajax というテーマにとってはこの

構成がベストであると理解してほしいと思います。

また、本書を読み進めていくとわかりますが、Ajax 技術そのものはすべてクライアントサイド

の話であるものの、その特徴はサーバーサイドにも及びます。本書では主にクライアントサイド

プログラミングを取り上げ、紹介するコード例の大部分はJavaScript です。Ajax の原則は、ク

ライアントとサーバーをきれいに分離し、どんなサーバーサイド言語にも対応できるようにする

ことです。そこで本書では、多様な環境を使用する読者を想定し、サーバーサイドコードをPHP、

Java、C#、Visual Basic .NET などさまざまな言語で記述することにしました。さらに、どんな

環境にも移植できるようにするため、特定の実装に依存しないシンプルなサーバーサイドコード

を書くように努めました。言語固有の機能を使用しなければならないところでは、その環境にな

じみのない読者でも処理の内容を理解できるように、詳しい説明をしています。

本書の対象読者

Ajax は、さまざまな分野の交差点に位置しています。そのため、本書の読者もさまざまな方面

からアプローチしてくるものと考えられます。ある人は、コンピュータ工学の学位を持ち、大規模

なソフトウェアプロジェクトの現場で何年間も経験を積み、時々プレゼンテーション層の開発に

首を突っ込んでいる、というプロフェッショナルなエンタープライズ開発者かもしれません。ま

たある人は、グラフィックデザインの分野からウェブデザインやいわゆる「ニューメディア」の分

野に進み、PHP、Visual Basic、JavaScript/ActionScript などのスクリプト言語を使ったプログ

ラミングを独学しているプロフェッショナルなクリエータかもしれません。あるいは、その中間

に分類される人々、たとえばウェブの勉強をし直しているデスクトップアプリケーション開発者

や、ウェブベースの管理ツールを統合するよう指示されたシステム管理者などもいるでしょう。

Ajax-ch00 06.5.17 19:11 ページvi

(2)

こうした人々は、Ajax に真剣に興味を持っています。本書では、これらすべての読者のニー

ズに(少なくともある程度までは)応えようと努力しています。サーバーサイド開発者のために、

ウェブブラウザをダム端末として扱う際に使用する基本的なウェブ技術についての参考資料を紹

介しています。また、アドホックなコーディングスタイルに慣れているであろうニューメディア

開発者のために、ソフトウェアの設計と組織化についての基礎知識を説明しています。Ajax は

分野横断的な技術であるため、どの方面から来た読者であっても、あまりなじみのない領域にぶ

つかることになるでしょう。私たちが読者の知識を広げる手助けをしますので、本書を読みなが

ら、新しいスキルを身に付けていってほしいと思います。私たちもAjax を利用しながら同じよ

うに学んできましたし、本書の執筆を進める間も新たに学んだことが多くありました。これは非

常に実り多く、楽しい経験であり、新たな専門分野を開拓できるというメリットもあります。

本書の構成

本書は4 つのパートに分かれています。Part Ⅰでは、Ajax とは何か、開発ツールとしてAjax

を利用すべき理由、Ajax 開発に役立つツールについて説明します。Part Ⅱでは、Ajax アプリ

ケーションを動作させるためのコアテクニックを取り上げ、Part Ⅲでは、これらを踏まえたうえ

で、ただの概念実証コードを実動環境で使えるソフトウェアにするために何が必要かということ

を解説します。Part Ⅳでは、実践的アプローチを採用し、5 つのAjax プロジェクトを段階的に作

成していきます。それぞれの章では、これらのプロジェクトをリファクタリングし、読者のウェ

ブアプリケーションでもすぐに使用できるコンポーネントにします。

前にも述べたように、Ajax は技術ではなく方法論です。そこで第 1 章では、Ajax 以前のウェ

ブ開発に慣れている開発者のために、Ajax という新しいプロセスの考え方を改めて説明します。

具体的には、Ajax と従来のウェブアプリケーションとの基本的な違い、ユーザビリティについ

ての考え方、有益な概念などについて解説します。Ajax の周辺事情を知りたい人は、まずここ

を読んでください。実際のコードをすぐにいじってみたい人は、第 2 章に進んでください。

Ajax を構成する各種の技術について、すでに十分な資料が公開されています。第 2 章では、簡

単な例を紹介しながら、これらの技術をひととおり見ていきます。しかし、包括的な解説をする

つもりはありません。これらの技術をAjax の一部として利用する際に、それぞれの技術の使い

方や振る舞いがどのように変わるかということを重点的に説明します。

第 3 章では、本書の第三のテーマである Ajax コードベースの管理について説明します。

JavaScript コードベースは大きくなり、ソースコードが1.5MB を超える場合もあることを考え

ると、Ajax 用の JavaScript を記述することは、これまでとは違う手法が必要であると言えま

す。ここではデザインパターンとリファクタリングについて取り上げますが、それはこれらの手

本書の内容 Ajax-ch00 06.5.17 19:11 ページvii

(3)

viii

序章

ちが実感したからです。実行速度を求めるようになれば、読者もきっと同じ意見を持つことで

しょう。

第 4 章と第 5 章では、Ajax のコアコンポーネントに目を向け、デザインパターンの知識を応用

してベストプラクティスを見出します。第 4 章では、従来のウェブ開発でおなじみのMVC(モデ

ル・ビュー・コントローラ)パターンを新しい方法で適用して、クライアントサイドのコードを

クリーンに保つ方法を見ていきます。第 5 章では、クライアント/サーバー間のさまざまな通信

方法を取り上げ、各種のフレームワークをAjax に適用する方法について解説します。ここまで

の章で、Ajax に関する基礎知識はすべてカバーしたことになり、Ajax の動作の仕組みをひとと

おり理解できるでしょう。

第 6 章から第 8 章では、ここまでに得た基礎知識を踏まえて、アプリケーションの完成度を高

め、ただの概念実証コードから魅力的で安全かつ実用に耐えるアプリケーションにするための方

法を説明します。第 6 章では、ユーザビリティに焦点を当て、非同期タスクの実行中に、ユー

ザーに適度な情報を知らせ続ける方法を詳しく見ていきます。すべての処理をユーザーに見せる

必要はありませんが、何も知らせないのもいけません。どのくらいのバランスがよいのかを見極

める方法を紹介します。

第 7 章では、Ajax におけるセキュリティの問題をさまざまな角度から見ていきます。Ajax は

ウェブ技術であり、Ajax が直面する問題の多くは、他のウェブアプリケーションと何ら変わり

ません。この章では、Ajax 固有の問題(生成されたJavaScript をサーバーからセキュアにイン

ポートする方法、ウェブサービスのエントリポイントを不正な直接操作から保護する方法など)

に焦点を当てながら、セキュリティの基本を説明します。重要なアプリケーションの場合、セ

キュリティは絶対に講じなければならない措置です。ここでは、セキュリティを制御するために

必要な基本的手順を説明します。

第 8 章では、もう1 つの必要不可欠な措置であるパフォーマンスについて取り上げます。アプ

リケーションのパフォーマンスをモニタする方法と、パフォーマンスを向上させ、そのパフォー

マンス向上をアプリケーション全体に反映させるためのコード分析の方法を説明します。

Part Ⅳとなる第 9 章から第 13 章では、実際のAjax プロジェクトを見ていきます。どのサンプ

ルでも、まずは簡単な方法で機能を実装し、その後で、わずか数行のコードを書くだけで読者の

開発プロジェクトに組み込める堅牢なアプリケーションへとリファクタリングします。このプロ

セスにより、Ajax の原則を理解し、再利用のメリットを知り、Ajax のリファクタリングの実践

的な例を見ることができます。

Ajax-ch00 06.5.17 19:11 ページviii

(4)

第 9 章では、HTML フォームをAjax で拡張して、ユーザー体験を向上させる簡単な方法を紹

介します。具体的には、ユーザーがあるフィールドにデータを入力した時に、バックグラウンド

でサーバーにリクエストが送られ、2 つ目のドロップダウンリストに項目が自動的に取り込まれ

るようにします。第 10 章でも、引き続きフォームの拡張というテーマに取り組みます。ここで

は、ユーザーのキーストロークに応答してサーバーからデータを取り出すことで、動的な入力補

完を実装します。

第 11 章では、さらに一歩進めて、Ajax ユーザーインターフェイスの新しい可能性を探ります。

ここでは、ウェブページというよりもワークステーションのデスクトップに近い、ドラッグとサ

イズ変更の可能な内部ウィンドウを備えた完全なポータルアプリケーションを開発します。Ajax

プロセスはウィンドウの移動をバックグラウンドで追跡しているので、ユーザーがデスクトップ

から離れても、常に同じ状態に保たれます(別のマシンから再度ログインした場合も同様です)

第 12 章では、Ajax ベースの検索システムの開発を通じて、クライアントサイドXSLT の有用

性を紹介します。クライアントサイドXSLT は、生のXML データを書式およびスタイルの適用

されたコンテンツに変換する際に大きな威力を発揮します。

第 13 章では、バックエンド実装を持たないAjax クライアントを紹介します。このAjax クライ

アントはサーバープロセスと通信しますが、この例では、インターネット標準のRSS を使用し

て、ブログやニュースシンジケーションフィードと直接やり取りします。

最後に、読者の役に立つと思われる情報を3 つの付録として掲載しています。本書の本文で

は、Ajax 技術そのものについて説明しています。新しい分野横断的な技術の場合は、J2EE

や.NET などの成熟した技術よりも、その技術を効果的に利用するためのツールの組み合わせを

探すのが難しいことがあります。Ajax ツールを提供しているベンダはまだありませんが、今後間

違いなく出てくるはずです。それまでの参考として、付録 A では、私たちが本書のAjax プロジェ

クトを開発および整理するために使用したツールとワザの数々を簡単にまとめています。

付録 B は、ソフトウェア設計の原則は理解しているが、それをJavaScript という柔軟で構造化

されていない一風変わった言語で実践するにはどうしたらよいかわからない、というエンタープ

ライズプログラマのための資料です。ここでは、JavaScript という言語で何ができるかをひとと

おり説明し、Java やC# との大きな違いを指摘します。

ツールベンダがAjax に追いついていないので、フレームワーク開発者もまだ立ち遅れていま

す。現在、Ajax フレームワークの世界では改良が進められており、さまざまな試みや再発明が

行われています。付録 C では、現時点で私たちが把握しているAjax フレームワークとライブラ

リをまとめ、それぞれの概要と詳細情報へのリンクを掲載しています。

本書の内容 Ajax-ch00 06.5.17 19:11 ページix

(5)

C

C

O N T E N T S

1.1

なぜ

Ajax

リッチクライアントなのか

. . . .

3

1.1.1 ユーザー体験の比較 . . . 3 1.1.2 ネットワークの遅延 . . . 9 1.1.3 非同期の対話 . . . 11 1.1.4 長期的な利用パターンと短期的な利用パターン . . . 14 1.1.5 ウェブに関する常識を捨て去る . . . 15

1.2

Ajax

の特徴となる

4

つの原則

. . . .

17

1.2.1 ブラウザが扱うのはコンテンツではなくアプリケーションである . . . 17 1.2.2 サーバーが配信するのはコンテンツではなくデータである . . . 19 1.2.3 ユーザーとの対話は滑らかで継続的である. . . 20 1.2.4 真のコーディングには規律が必要である . . . 23

1.3

現実世界の

Ajax

リッチクライアント

. . . .

23

1.3.1 フィールドワーク . . . 24 1.3.2 Google Maps . . . 25

1.4

Ajax

に代わる技術

. . . .

28

1.4.1 Flashベースのソリューション . . . 28

1.4.2 Java Web Startとその関連技術 . . . 29

1.5

まとめ

. . . .

30

監修者まえがき . . . iii はじめに. . . iv 本書の内容 . . . vi 謝辞 . . . xi

xiv

Ajax

とウェブアプリケーション

1

ウェブのための新しい設計

1

Ajax-contents 06.5.17 19:13 ページxiv

(6)

1.6

参考資料

. . . .

31

2.1

Ajax

のキーとなる技術

. . . .

34

2.2

JavaScript

を使ったユーザー体験の構成

. . . .

36

2.3

CSS

を使ったルック&フィールの定義

. . . .

38

2.3.1 CSSセレクタ. . . 39 2.3.2 CSSスタイルプロパティ . . . 41 2.3.3 CSSの簡単な例 . . . 42

2.4

DOM

を使ったビューの編成

. . . .

48

2.4.1 JavaScriptを使ったDOMの操作 . . . 49 2.4.2 DOMノードの取得 . . . 51 2.4.3 DOMノードの作成 . . . 53 2.4.4 ドキュメントへのスタイルの追加 . . . 53 2.4.5 ショートカット:innerHTMLプロパティを使う . . . 55

2.5

XML

技術を使った非同期なデータのロード

. . . .

56

2.5.1 IFrame . . . 57 2.5.2 XmlDocumentとXMLHttpRequestオブジェクト. . . 59 2.5.3 サーバーへのリクエストの送信 . . . 61 2.5.4 コールバック関数を使ったリクエストのモニタ . . . 64 2.5.5 完全なライフサイクル. . . 65

2.6

Ajax

の真の魅力

. . . .

68

2.7

まとめ

. . . .

70

2.8

参考資料

. . . .

71

3.1

リファクタリングへ向けて

. . . .

74

3.1.1 パターン:共通のボキャブラリの作成. . . 75 3.1.2 リファクタリングとAjax . . . 76 3.1.3 バランス感覚を保つ . . . 76 3.1.4 リファクタリング イン・アクション . . . 77

2

Ajax

入門

33

3

Ajax

へのリファクタリングの導入

73

Ajax-contents 06.5.17 19:13 ページxv

(7)

xvi

3.2

小規模なリファクタリングのケーススタディ

. . . .

80

3.2.1 ブラウザ間の不整合:FacadeとAdapterパターン . . . 81 3.2.2 イベントハンドラの管理:Observerパターン . . . 84 3.2.3 ユーザーアクションハンドラの再利用:Commandパターン. . . 87 3.2.4 リソースへの参照を1つだけに保つ:Singletonパターン. . . 90

3.3

MVC . . . .

95

3.4

ウェブサーバーの

MVC . . . .

97

3.4.1 パターンを使わないAjaxウェブサーバー層 . . . 97 3.4.2 ドメインモデルのリファクタリング. . . 101 3.4.3 プレゼンテーションからのコンテンツの分離 . . . 104

3.5

サードパーティのライブラリとフレームワーク

. . . .

107

3.5.1 クロスブラウザライブラリ . . . 108 3.5.2 ウィジェットとウィジェットスイート. . . 113 3.5.3 アプリケーションフレームワーク . . . 116

3.6

まとめ

. . . .

119

3.7

参考資料

. . . .

120

4.1

別の種類の

MVC . . . .

122

4.1.1 さまざまなスケールにおけるパターンの利用 . . . 122 4.1.2 ブラウザにおけるMVCの適用. . . 124

4.2

Ajax

アプリケーションにおけるビュー

. . . .

125

4.2.1 ビューからのロジックの分離. . . 126 4.2.2 ロジックからのビューの分離. . . 132

4.3

Ajax

アプリケーションにおけるコントローラ

. . . .

136

4.3.1 従来のJavaScriptイベントハンドラ . . . 136 4.3.2 W3Cのイベントモデル. . . 139 4.3.3 JavaScriptでの柔軟なイベントモデルの実装. . . 140

コアとなる技術

4

Ajax

アプリケーションとしてのページ

121

Ajax-contents 06.5.17 19:13 ページxvi

(8)

4.4

Ajax

アプリケーションにおけるモデル

. . . .

145

4.4.1 JavaScriptを使ったビジネスドメインのモデル化 . . . 146 4.4.2 サーバーとの対話 . . . 147

4.5

モデルからのビューの生成

. . . .

149

4.5.1 JavaScriptオブジェクトに対するリフレクション . . . 150 4.5.2 配列とオブジェクトの取り扱い . . . 154 4.5.3 コントローラの追加 . . . 156

4.6

まとめ

. . . .

160

4.7

参考資料

. . . .

160

5.1

サーバーサイドでの処理

. . . .

162

5.2

サーバーサイドのコーディング

. . . .

163

5.2.1 人気のあるプログラミング言語 . . . 163 5.2.2 n層アーキテクチャ. . . 164 5.2.3 クライアントサイドとサーバーサイドのドメインモデルの維持. . . 165

5.3

全体像:共通のサーバーサイド設計

. . . .

166

5.3.1 フレームワークを使わないウェブサーバーコーディング. . . 167 5.3.2 Model2ワークフローフレームワーク . . . 168 5.3.3 コンポーネントベースフレームワーク. . . 170 5.3.4 サービス指向アーキテクチャ. . . 173

5.4

詳細:データの交換

. . . .

178

5.4.1 クライアントオンリーでの対話方法. . . 178 5.4.2 サンプル「プラネットブラウザ」の紹介 . . . 179 5.4.3 ウェブページのように考える:コンテンツ中心の対話方法 . . . 182 5.4.4 プラグインのように考える:スクリプト中心の対話方法. . . 185 5.4.5 アプリケーションのように考える:データ中心の対話方法 . . . 191

5.5

サーバーへのデータの送信

. . . .

197

5.5.1 HTMLフォームの使用. . . 197 5.5.2 XMLHttpRequestオブジェクトの使用 . . . 199 5.5.3 クライアントからの更新を効果的に管理する . . . 201

5.6

まとめ

. . . .

210

5.7

参考資料

. . . .

211

5

サーバーの役割

161

Ajax-contents 06.5.17 19:13 ページxvii

(9)

xviii

6.1

正しい理解:高品質なアプリケーションの構築

. . . .

214

6.1.1 応答性 . . . 215 6.1.2 堅牢性 . . . 215 6.1.3 一貫性 . . . 216 6.1.4 わかりやすさ . . . 217 6.1.5 機能させる. . . 217

6.2

ユーザーに情報を知らせ続ける

. . . .

218

6.2.1 自身のリクエストに対するレスポンスの処理 . . . 218 6.2.2 別のユーザーからの更新の処理 . . . 220

6.3

Ajax

用の通知システムの設計

. . . .

224

6.3.1 通知のモデル化. . . 225 6.3.2 ユーザーインターフェイス要件の定義. . . 227

6.4

通知フレームワークの実装

. . . .

228

6.4.1 ステータスバーアイコンの描画 . . . 228 6.4.2 詳細な通知の描画 . . . 231 6.4.3 部品をまとめる. . . 232

6.5

ネットワークリクエストでのフレームワークの使用

. . . .

239

6.6

データの鮮度の通知

. . . .

243

6.6.1 簡単な強調表示スタイルの定義 . . . 243 6.6.2 Scriptaculous Effectsライブラリを使った強調表示 . . . 245

6.7

まとめ

. . . .

246

6.8

参考資料

. . . .

247

7.1

JavaScript

とブラウザのセキュリティ

. . . .

250

7.1.1 「オリジンサーバー」ポリシーの導入. . . 251 7.1.2 Ajaxで考慮すべきこと . . . 252

プロフェッショナル

Ajax

6

ユーザビリティ

213

7

セキュリティと

Ajax

249

Ajax-contents 06.5.17 19:13 ページxviii

(10)

7.1.3 サブドメインに関する問題 . . . 253 7.1.4 クロスブラウザのセキュリティ . . . 254

7.2

リモートサービスとの通信

. . . .

255

7.2.1 リモートサービスのプロキシ. . . 255 7.2.2 ウェブサービスでの処理. . . 256

7.3

機密データの保護

. . . .

266

7.3.1 「man-in-the-middle」攻撃 . . . 266 7.3.2 セキュアなHTTPの使用 . . . 267 7.3.3 JavaScriptを使ったプレーンHTTPの暗号化. . . 269

7.4

Ajax

データストリームに対するアクセスの規制

. . . .

271

7.4.1 セキュアなウェブ層の設計 . . . 272 7.4.2 ウェブデータへのアクセス制限 . . . 276

7.5

まとめ

. . . .

281

7.6

参考資料

. . . .

282

8.1

パフォーマンスとは何か

. . . .

284

8.2

JavaScript

の実行速度

. . . .

285

8.2.1 アプリケーションの速度計測:ハードウェア的な方法 . . . 286 8.2.2 Venkmanプロファイラの使用. . . 291 8.2.3 Ajaxの実行速度の最適化. . . 293

8.3

JavaScript

のメモリフットプリント

. . . .

306

8.3.1 メモリリークの回避 . . . 306 8.3.2 Ajaxに固有の考慮すべきこと . . . 310

8.4

パフォーマンスのための設計

. . . .

316

8.4.1 メモリフットプリントの測定. . . 316 8.4.2 簡単な例. . . 321 8.4.3 結果:メモリフットプリントを150分の1に減らす方法 . . . 326

8.5

まとめ

. . . .

328

8.6

参考資料

. . . .

329

8

パフォーマンス

283

Ajax-contents 06.5.17 19:13 ページxix

(11)

xx

9.1

ダブルコンボスクリプト

. . . .

332

9.1.1 クライアントサイドソリューションの限界. . . 332 9.1.2 サーバーサイドソリューションの限界. . . 333 9.1.3 Ajaxベースのソリューション . . . 334

9.2

クライアントサイドのアーキテクチャ

. . . .

335

9.2.1 フォームのデザイン . . . 336 9.2.2 クライアント/サーバー対話の設計. . . 337

9.3

サーバーサイドの実装:

VB.NET . . . .

339

9.3.1 XMLレスポンスフォーマットの定義 . . . 339 9.3.2 サーバーサイドコードの記述. . . 340

9.4

結果の表示

. . . .

343

9.4.1 XMLドキュメントの操作 . . . 344 9.4.2 CSSの適用 . . . 346

9.5

高度な問題

. . . .

347

9.5.1 複数選択のためのクエリ. . . 348 9.5.2 ダブルコンボからトリプルコンボへ. . . 349

9.6

リファクタリング

. . . .

350

9.6.1 改良された新しいnet.ContentLoader . . . 351 9.6.2 ダブルコンボコンポーネントの作成. . . 356

9.7

まとめ

. . . .

364

10.1

動的な入力補完とは

. . . .

366

10.1.1 一般的な動的な入力補完機能. . . 366 10.1.2 Google Suggest . . . 368 10.1.3 動的な入力補完を実行中のAjax . . . 369

10.2

サーバーサイドフレームワーク:

C# . . . .

370

10.2.1 サーバーとデータベース. . . 370

Ajax

サンプルプロジェクト

9

動的なダブルコンボ

331

10

動的な入力補完

365

Ajax-contents 06.5.17 19:13 ページxx

(12)

10.2.2 サーバーサイドコードのテスト . . . 372

10.3

クライアントサイドフレームワーク

. . . .

374

10.3.1 HTML . . . 374 10.3.2 JavaScript . . . 375 10.3.3 サーバーへのアクセス. . . 384

10.4

機能の追加:異なるクエリによる複数の要素

. . . .

395

10.5

リファクタリング

. . . .

396

10.5.1 1日目:TextSuggestコンポーネントの戦略の立案. . . 397 10.5.2 2日目:クリーンで設定可能なTextSuggestの作成. . . 401 10.5.3 3日目:Ajax対応 . . . 405 10.5.4 4日目:イベントの処理 . . . 410 10.5.5 5日目:補完候補ポップアップUI . . . 416 10.5.6 リファクタリングの事後報告. . . 425

10.6

まとめ

. . . .

425

11.1

進化するポータル

. . . .

428

11.1.1 従来型のポータル . . . 428 11.1.2 リッチユーザーインターフェイスを備えたポータル. . . 430

11.2

Java

を使った

Ajax

ポータルのアーキテクチャ

. . . .

431

11.3

Ajax

ログイン

. . . .

433

11.3.1 ユーザーテーブル . . . 433 11.3.2 サーバーサイドのログインコード:Java . . . 434 11.3.3 クライアントサイドのログインフレームワーク . . . 437

11.4

DHTML

ウィンドウの実装

. . . .

442

11.4.1 ポータルウィンドウのデータベース. . . 443 11.4.2 ポータルウィンドウのサーバーサイドコード . . . 445 11.4.3 外部ライブラリの追加. . . 449

11.5

Ajax

自動保存機能の追加

. . . .

451

11.5.1 ライブラリの適合 . . . 452 11.5.2 データベースへの情報の自動保存 . . . 454

11.6

リファクタリング

. . . .

457

11.6.1 コンストラクタの定義. . . 459 11.6.2 AJAXWindow.jsライブラリの適合 . . . 460

11

Ajax

によるウェブポータルの機能拡張

427

Ajax-contents 06.5.17 19:13 ページxxi

(13)

xxii

11.6.5 リファクタリングの事後報告. . . 468

11.7

まとめ

. . . .

468

12.1

検索テクニック

. . . .

472

12.1.1 従来型の検索 . . . 472 12.1.2 フレームやポップアップの手法の欠点. . . 474 12.1.3 AjaxとXSLTを使ったライブサーチの検討. . . 475 12.1.4 クライアントへの結果の返送. . . 477

12.2

クライアントサイドコード

. . . .

478

12.2.1 クライアントのセットアップ. . . 478 12.2.2 処理の開始. . . 479

12.3

サーバーサイドコード:

PHP . . . .

481

12.3.1 XMLドキュメントの構築 . . . 481 12.3.2 XSLTドキュメントの構築. . . 484

12.4

XSLT

ドキュメントと

XML

ドキュメントの結合

. . . .

486

12.4.1 IEの処理. . . 488 12.4.2 Mozillaの処理 . . . 488

12.5

検索の仕上げ

. . . .

490

12.5.1 CSSの適用 . . . 490 12.5.2 検索の改善. . . 492 12.5.3 XSLT使用の判断 . . . 493 12.5.4 Ajaxの弱点であるブックマークの克服. . . 494

12.6

リファクタリング

. . . .

496

12.6.1 XSLTHelper . . . 496 12.6.2 ライブサーチコンポーネント. . . 500 12.6.3 リファクタリングの事後報告. . . 505

12.7

まとめ

. . . .

506

13.1

外部の情報の閲覧

. . . .

508

13.1.1 XMLフィードについて . . . 509 13.1.2 RSSの構造. . . 510

12

XSLT

を利用したライブサーチ

471

13

Ajax

によるスタンドアロンアプリケーションの構築

507

Ajax-contents 06.5.17 19:13 ページxxii

(14)

13.2

リッチユーザーインターフェイスの実現

. . . .

513

13.2.1 プロセス. . . 513 13.2.2 テーブルを使わないHTMLフレームワーク . . . 514 13.2.3 CSSフォーマットの適用 . . . 517

13.3

RSS

フィードのロード

. . . .

522

13.3.1 グローバルなスコープ. . . 522 13.3.2 Ajaxプリロード機能. . . 524

13.4

遷移エフェクトの追加

. . . .

527

13.4.1 クロスブラウザな不透明度の規則 . . . 528 13.4.2 フェード遷移の実装 . . . 528 13.4.3 JavaScriptタイマの組み込み . . . 530

13.5

付加的な機能

. . . .

532

13.5.1 追加のフィードの挿入. . . 532 13.5.2 スキップ機能と一時停止機能の組み込み . . . 534

13.6

プロジェクトの制約の回避

. . . .

537

13.6.1 Mozillaのセキュリティ制約の克服 . . . 537 13.6.2 アプリケーションスコープの変更 . . . 540

13.7

リファクタリング

. . . .

541

13.7.1 RSSリーダーのモデル . . . 541 13.7.2 RSSリーダーのビュー . . . 544 13.7.3 RSSリーダーのコントローラ . . . 549 13.7.4 リファクタリングの事後報告. . . 562

13.8

まとめ

. . . .

562

A.1

適切なツールを使ったスマートな作業

. . . .

564

A.1.1 適切なツールの入手 . . . 564 A.1.2 独自ツールの作成 . . . 565 A.1.3 ツールキットの保守 . . . 566

A.2

エディタと

IDE . . . .

567

A.2.1 コードエディタに求められるもの . . . 567 A.2.2 現在利用可能なツール. . . 569

A.3

デバッガ

. . . .

574

A.3.1 デバッガを利用する理由. . . 574

付録

A

Ajax

開発者向けツールキット

563

Ajax-contents 06.5.17 19:13 ページxxiii

(15)

xxiv

A.3.4 独自のクロスブラウザ出力コンソールの構築 . . . 582

A.4

DOM

インスペクタ

. . . .

586

A.4.1 MozillaのDOM Inspectorの使用 . . . 586

A.4.2 IE用のDOMインスペクタ. . . 588

A.4.3 Mac OS X用のSafari DOMインスペクタ . . . 589

A.5

Firefox

の拡張機能のインストール

. . . .

590

A.6

参考資料

. . . .

592

B.1

JavaScript

Java

ではない

. . . .

596

B.2

JavaScript

におけるオブジェクト

. . . .

598

B.2.1 アドホックなオブジェクトの構築 . . . 598 B.2.2 コンストラクタ関数、クラス、プロトタイプ . . . 603 B.2.3 組み込みクラスの拡張. . . 606 B.2.4 プロトタイプの継承 . . . 607 B.2.5 JavaScriptオブジェクトにおけるリフレクション . . . 608 B.2.6 インターフェイスとダックタイピング. . . 610

B.3

メソッドと関数

. . . .

613

B.3.1 ファーストクラスオブジェクトとしての関数 . . . 614 B.3.2 オブジェクトへの関数のアタッチ . . . 615 B.3.3 他のオブジェクトからの関数の借用. . . 616 B.3.4 Ajaxのイベント処理と関数のコンテキスト . . . 617 B.3.5 JavaScriptにおけるクロージャ. . . 622

B.4

まとめ

. . . .

625

B.5

参考資料

. . . .

626

索引. . . 644

付録

B

オブジェクト指向プログラマのための

JavaScript

講座

595

付録

C

フレームワークとライブラリ

627

Ajax-contents 06.5.17 19:13 ページxxiv

参照

関連したドキュメント

削氷機で作った砕氷を、1.18mm ふるいを使って母体供試体上にふりかけて作製した。試験は擬似積雪を作製後

Power Platform とは Power Apps、Power BI、Power Automate を合わせた製品群です。ビジネス ニーズに応じてさまざまなアプ リをカスタマイズ、拡張、構築することで、Office

重要な変調周波数バンド のみ通過させ認識性能を向 上させる方法として RASTA が知られている. RASTA では IIR フィルタを用いて約 1 〜 12 Hz

状態を指しているが、本来の意味を知り、それを重ね合わせる事に依って痛さの質が具体的に実感として理解できるのである。また、他動詞との使い方の区別を一応明確にした上で、その意味「悪事や欠点などを

状態を指しているが、本来の意味を知り、それを重ね合わせる事に依って痛さの質が具体的に実感として理解できるのである。また、他動詞との使い方の区別を一応明確にした上で、その意味「悪事や欠点などを

関係委員会のお力で次第に盛り上がりを見せ ているが,その時だけのお祭りで終わらせて

 第一の方法は、不安の原因を特定した上で、それを制御しようとするもので

ドリフト流がステップ上段方向のときは拡散係数の小さいD2構造がテラス上を