掲載日時: 2007-09-06 08:00

あのエフェクトがこんなに簡単に:魅力のAjaxライブラリAdobe Spry入門

Spryは、「デザイナのための」と銘打つだけあって、非常に簡単な記述でスクリプトを作ることができる。JavaScriptはほとんど使わずに、できるだけHTMLの拡張属性や独自の記述でまかなおうという努力が見える。

著者 : たにぐちまこと(H2O Space.)

URL : https://japan.zdnet.com/article/20355823/

 今回は、もう少し掘り下げて Spryの魅力を紹介していこう。

シンプルなファイル構成

 JavaScript ライブラリは、Webページに組み込んで利用するため、その分だけWebページのサイズが大きくなってしまう。そのため、不必要な機能は組み込まなくて済むようにしたり、自分に必要な機能だけを選んでファイルを作れるようになっているものもある。しかし、ダウンロードするファイルが数十MBに及んでいることがあったり、機能を付け足す度にライブラリをダウンロードし直す必要があったりする。

 Spryの場合、ダウンロードして解凍した状態では8MB弱。実際のライブラリファイル等は1MB程度でアップロードすることができる(図1)。また、「SpryEffects.js」「SpryHTMLDataSet.js」など、わかりやすい機能名でファイル名がつけられているため、必要な機能のファイルだけを的確に参照することができる。一つ一つのファイルは、100KB程度なので、参照してもほとんど気にならないサイズなのが魅力だ。

ライブラリは1MB足らずと軽量 図1:ライブラリは1MB足らずと軽量

簡単な記述

 Spryは、「デザイナのための」と銘打つだけあって、非常に簡単な記述でスクリプトを作ることができる。JavaScriptはほとんど使わずに、できるだけHTMLの拡張属性や独自の記述でまかなおうという努力が見える。

 例えば、

要素をフェードインで表示させたい場合、他のライブラリではオブジェクトを作って、そのプロパティに何かを設定して…といった、複雑な工程を経るものも少なくない。しかし、Spryの場合は簡単に作ることができる。実際に以下のソーススクリプトをコピーすれば、動作させることができるので、実際に試してみてほしい。








フェードアウトのサンプル





クリックすると、このエリアがフェードインします

 これで、領域のフェードアウトの処理を作ることができた(図2)。上記の一文を見るだけで、スクリプトに慣れた人なら何をやっているかわかるはずだ。上記は「ID属性が"areaTarget"の

要素を、500ミリ秒の早さで、100%から 0(%)までフェードアウトする」という意味である。

フェードアウト処理 図2:フェードアウト処理

 また、「XMLを読み込んで、ページ内に表示する」という一見複雑そうなスクリプトについても、以下のようなスクリプトで実現することができる。








XMLを読み込む







名前 1ラウンド 2ラウンド 3ラウンド 4ラウンド 5ラウンド
{name} {round1} {round2} {round3} {round4} {round5}

 これだけで、XMLファイルを読み込んでテーブルに表示させることができる(図3)。驚くことに、JavaScriptのスクリプトは1行だけで済んでいる。スクリプトの代わりに利用しているのが、「spry:」から始まる拡張属性をHTMLタグに記述することだ。こうして、デザイナやマークアップエンジニア(HTMLコーダー)でも簡単にJavaScriptを使ったスクリプトを作ることができるというわけだ。

図3:XMLファイルを読み込んでHTMLテーブルとして表示

 とはいえ、この辺りは賛否両論があり、デザインとスクリプトの分離という考えやスクリプトの応用性を考えると、必ずしも好ましい作り方とはいえない。このあたりは、好みの分かれるところといえるだろう。

ウィジットの完成度と応用性

 前回も紹介したが、筆者がSpryで最も魅力的に感じているのは、豊富なウィジットだ。アコーディオンパネルやタブビューを簡単に構築することができる。また、他のライブラリでは、CSSが既存のものに干渉してしまい、ウィジットの見た目が崩れてしまったり、既存ページ内の要素が崩れてしまうということが多々あったのだ。

 しかし、Spryの場合は今までそのようなケースに当たってしまったことはない。クラスによってCSSが明確に定義されており、どこに組み込んでもclass属性で適切にスタイルが適用されるようになっている。また、例えば次のCSSファイルを見てみよう。

@charset "UTF-8";

/* SpryAccordion.css - Revision: Spry Preview Release 1.4 */

/* Copyright (c) 2006. Adobe Systems Incorporated. All rights reserved. */

/* This is the selector for the main Accordion container. For our default style,
 * we draw borders on the left, right, and bottom. The top border of the Accordion
 * will be rendered by the first AccordionPanelTab which never moves.
 *
 * If you want to constrain the width of the Accordion widget, set a width on
 * the Accordion container. By default, our accordion expands horizontally to fill
 * up available space.
 *
 * The name of the class ("Accordion") used in this selector is not necessary
 * to make the widget function. You can use any class name you want to style the
 * Accordion container.
 */
.Accordion {
    border-left: solid 1px gray;
    border-right: solid 1px black;
    border-bottom: solid 1px gray;
    overflow: hidden;
}

/* This is the selector for the AccordionPanel container which houses the
 * panel tab and a panel content area. It doesn't render visually, but we
 * make sure that it has zero margin and padding.
 *
 * The name of the class ("AccordionPanel") used in this selector is not necessary
 * to make the widget function. You can use any class name you want to style an
 * accordion panel container.
*/
.AccordionPanel {
    margin: 0px;
    padding: 0px;
}
...

 これは、アコーディオンウィジット用のCSSファイルの一部である。これを見ると、コメントが適切に作られている上、クラス名も分かりやすくなっているため、改造が容易である。実際、ウィジットを実践に使ってみても、かなりカスタマイズを施して、オリジナルのパーツとして使うことができた。

 組み込みの方法であるが、スクリプトは以下のようになっている。








アコーディオンウィジットを使う





1つめのコンテンツ
1つめのコンテンツの内容です
2つめのコンテンツ
2つめのコンテンツの内容です

 またもや、JavaScriptはbody要素の一番下に1行あるだけである。これだけで、美しいエフェクトでアコーディオンが開閉するのだ(図4)。これを見たときは筆者は感動してしまった。

簡単な記述でアコーディオンを実現 図4:簡単な記述でアコーディオンを実現

フォーム検査の利点と今後の改善点

 フォーム検査も次のように実装は簡単だ。








フォーム検査を使う





お名前: お名前をご記入ください

 エラーメッセージをあらかじめ準備しておき、決められたclass属性をつけた要素で囲っておけば、エラーが発生するまでは表示されなくなる。また、エラーが発生したらテキストフィールドの色が変わって、エラーメッセージが表示されるという仕組みだ(図5)。スクリプトはやはり、1行程度で完成する。

フォームエラーも簡単 図5:フォームエラーも簡単

 ただ、このフォーム検査ウィジットについては、まだ本バージョンから搭載されたばかりというのもあって、未完成の感が否めない。例えば、エラーメッセージについてはHTMLには最初から存在していて、CSSによって隠しているだけだ。これでは、音声ブラウザやCSSを無効にした状態では、常に表示・発声され続けてしまい、正しく内容が伝わらなくなってしまう。

 標準のCSSを改造したりスクリプトを組み直せば、解消することはできる。しかし、今後のバージョンアップで標準的に、これらが解決できるようになると、実用度はより上がるといえるだろう。今後に期待したい。

豊富なドキュメント・サンプルとディスカッションルーム

 このように、まだまだこれからの部分はあるものの、やはりSpryは非常に優れたライブラリといえるだろう。ライブラリの場合、ライセンスが緩い代わりにドキュメントが整備されていなかったり、サンプルが高度すぎて応用できないものなどもあったりして、最初の段階でつまずくことも多い。

 しかし、ドキュメントやAPIリファレンスは英語ではあるものの、既に整備されている。また一つのメソッドに一つサンプルが付属しているような箇所も多々あるため、難なく使うことが可能だ。

 さらに、Adobe Labs自身がディスカッションルームを準備しており、わからない部分は質問すれば、場合によってはAdobeの開発者自身から回答を得ることもできる場合がある。リクエストや質問を、直接開発者に届けることができるというのは、貴重な場といえるだろう。

ZDNET Japanは、Ziff Davisからのライセンスに基づき株式会社4Xが運営しています。
ZDNET Japan is operated by 4X Corp under license from Ziff Davis.

Copyright © 2026 4X Corp, Inc. All rights reserved. No reproduction or republication without written permission.