TNC Personal Index Module
■ 「Indexed Database API」を用いて、そのサイト内での索引機能を提供する
■ 目的ページへの直接的アクセス手段の提供により、サイトのユーザビリティを向上させる
モジュールの概要
TNC Personal Index Module は、Drupal 7 における Block Module として、それがコールされる各ページにおいて、ユーザーに対してそのサイト内での個人化された索引機能を提供します。具体的には、ユーザーが当モジュールを介してインデックス登録するページ情報を、HTML5 の一機能である「Indexed Database API (IndexedDB)」を用いて、そのユーザーが利用しているブラウザが管理するデータベースに保存します。そして、そのユーザーがインデックスを呼び出すことで、ブラウザのデータベースから保存されているインデックス情報を読み出し、当該ユーザーに対して提示します。それにより、ユーザーは、そのサイトにおいてよく利用するページや有益であると思うページなどを個人的にインデックスに登録し、かつ、サイト内のどのページにおいてもそのインデックス内のリンクからいつでも目的とする当該ページに直接アクセスすることができる、というわけです。サイトの大規模化・コンテンツの充実化に伴うサイト構造の複雑化・ナビゲーション階層の多層化により、一方では、ユーザーにとってはサイトが「わかりにくい」「使いにくい」「目的ページへの到達に時間がかかる」という状況が生まれやすくなりますが、当モジュールは、インデックスという形でユーザーに対して目的とするページへの直接的なアクセス手段を提供することにより、サイトのユーザビリティの向上を図ります。「Personal Index」とは、言わば「ユーザー自身によりカスタマイズ可能な個人的ナビゲーション機能」であり、それにより、そのサイトが、ユーザーにとっての有益な「情報・知識基盤(Information Base / Knowledge Base)」、さらには、新たな「知識創造の場(Knowledge Creating Field)」「思考促進の場(Thinking Incubating Field)」としてより良く活用されることを目指しています。
開発履歴
2012年03月19日 UPDATE|Firefox 11(2012年03月13日リリース)上での稼働を確認しました。
2012年02月03日 UPDATE|Firefox 10(2012年01月31日リリース)に対応しました。
2012年01月23日 UPDATE|通常権限ユーザーに対して、「区切りバー」の挿入・削除機能を提供するようにしました。
2012年01月23日 UPDATE|当モジュールの名称を「TNC Personal Index Module」へと変更しました。
2012年01月13日 LAUNCH|当サイトにて、実運用を開始しました(ログインユーザー対象)。Information No.0029
(アップデート内容の詳細につきましては、このページの最下部にてインフォメーションしております。)
管理面での特徴
(1)ユーザーによるインデックス項目の「追加」と「削除」のアクションの場合には、リクエストを一旦サーバーに送信し、サーバー側において追加・削除の件数を把握するようにしています。その際には、(現時点においては)ユーザーの個人情報は取り扱わず、集計のみを行っています。また、各インデックス項目の「修正」については、サーバーへの送信は行われず、クライアント側のみで行われるようになっています。(※信頼可能ユーザーのみでの利用も想定し、「追加」「削除」についてもサーバーとの送受信を介さずに完全にクライアント側でのみ稼働させるオプションの実装も検討中)(2) IndexedDB の「データベース」「オブジェクトストア(リレーショナル DB における「テーブル」に相当)」の名称は、可能な限りのセキュリティ向上を意図して、サイト管理者が設定可能としています。(3)ユーザーのインデックスに登録されるページの「タイトル」「URL」については、サーバー側からクライアント側に指定されるデータが使用され、このモジュール内では変更できないようになっています。ただし、信頼可能ユーザーは「タイトル」の変更も可能となっています(2012年01月23日、機能追加・修正)。(4)URLのクエリ文字については、「(A)許可しない」「(B)ホワイトリスト法によるフィルター」「(C)ブラックリスト法によるフィルター」「(D)無制限(関知しない)」の4つのパターンに対応しています。「ホワイトリスト法」による場合には、キーと共に、値についてのフィルタリングも可能となっています。また、(C)(D)については信頼可能ユーザー限定での使用を想定しています。(5)信頼可能ユーザーに対しては、「カテゴリー」「ノート(メモ・覚書)」の入力を許可することもできます。ただし、デフォルトで指定するユーザーに対しては、これらの機能は提供されないようになっています。
利用面での特徴
(1)(当モジュールの使用権限のある)ユーザーは、当モジュールがコールされる全てのページにおいて、(A)当該ページのインデックスへの「追加(登録)」、(B)インデックスに登録された情報の「修正」「削除」、が可能となります。(2)ユーザーは、登録したインデックス項目を「タイトル」「URL」「作成日時」などでソートして表示することができます。(3)ユーザーは、それらのソートとは別に、ドラッグ&ドロップにより、登録したインデックス項目の表示順序を変更することができます。(4)通常ユーザーの場合には「区切りバー」、信頼可能ユーザーの場合には「カテゴリー」によって、インデックスを整理することができます。(5)インデックス項目の「追加」「削除」「修正」「表示変更」に関する操作は、全てページ遷移無しで実行され、短時間の内に完了します。「追加」「削除」の場合には、サーバー側との送受信があるため若干の待ち時間が生じますが(これも Ajax なのでかなり短時間で完了します)、「修正」「表示変更」の場合には、処理がクライアント側だけで完了するため、操作はほぼ一瞬で完了します。(6)ユーザーはインデックスの表示の状態(「ソート」「カテゴリー(有効な場合)」の項目選択等)を指定することができますが、それらの設定状態は次回アクセス時(ページ遷移の後)にも再現されるようになっています。
技術面での特徴
(1)当モジュールは、サーバー側においては、Drupal 7 用の Block Module として、それが設定可能な全てのページにおいて稼働が可能となっています。(2)当モジュールは、クライアント側においては、その機能を実現するために、HTML5 の機能である「Indexed Database API(IndexedDB)」「Drag And Drop API」「Web Storage」の機能を利用しています。
開発者としてのコメント
機能的には非常にシンプルなこのモジュールは、「IndexedDB を利用してページ情報を登録・管理する」という主機能としては、2010年の夏頃に Drupal 6 用の Field Module として完成(Firefox 4 ベータ上で稼働)していたものを(その後に、IndexedDB の様々な仕様変更や Drupal のアップグレードなどがあり、開発中断となっていましたが)、今回、Drupal 7 用の Block Module として全面的に再構築したものです(現状では、Firefox に対してのみの機能提供)。その過程では、(1)ドラッグ&ドロップ機能の追加、(2)ユーザー設定情報の永続化機能の追加、(3)IndexedDB を操作するための汎用 API(追加・削除・修正・取得など)オブジェクトの作成など、HTML5 技術の一端に親しむことができました。加えて、これまでの私の JavaScript コーディングは、グローバル変数とグルーバル関数を書き連ねる古典的スタイルのものでしたが、名前空間、クロージャー、関数(メソッド)や変数の隠蔽などによる安全面への配慮など、現代的スタイルへとステップアップすることができました。ということで、このモジュールの開発は、プログラマーとしては、IndexedDB を始めとする HTML5 への技術的な興味・関心から始めたものですが、その面では私的な目的は達成したことになります。そして、それにより、(1)ユーザーの利便性の向上、(2)データの安全性の向上、(3)「IndexedDB 操作機能」と「モジュール独自機能(=アプリケーション・ロジック)」の分離による仕様変更等への柔軟性(変更容易性・迅速性)の向上など、モジュールとしての品質を向上できたものと思います。また、プランナーとしては、サイトやウェブそのものの「使い勝手」の現状(不便さ)に対してそれらを少しでも改善することを意図したわけですが、当モジュールが提供するユーザー経験において、それらに貢献するものとなっていればと思います。
開発履歴(詳細)
2012年03月19日 UPDATE|Firefox 11(2012年03月13日リリース)上での稼働を確認しました。
Firefox 10 から 11 へのアップグレードにおいては、Indexed Database API の実装自体の変更点は少なかったため、このアプリケーションについてのコード修正は(結果的には)不要でした。しかし、私自身のこれまでの Firefox のライブラリ環境(Mac)においては、Firefox 11 上では、シンプルなテストコードにおいてもデータベースのオープンでエラー( errorCode は 1)となるため、Indexed Database API 自体が使用できない(データベース削除は可能でしたが)、という状況となりました。ということで、その部分に関してはそれ以上のコード修正の余地は皆無であるため、結果的には、ライブラリ環境の新規構築により対応せざるを得ませんでした(新規構築した環境では Firefox 10 上と同様に稼働。ただし、アプリケーションのデータは個別に移行が必要)。このような現象は私のライブラリ環境に固有のものかもしれませんし、現時点ではこれ以上の原因特定は行っていないため(新規ライブラリ環境構築という)暫定的対応となっていますが、もしかして今後同様の現象に直面されるかもしれない開発者の方のために、一応記録として記しておきます。

2012年02月03日 UPDATE|Firefox 10(2012年01月31日リリース)に対応しました。
Firefox 10 において Indexed Database API の実装が最新仕様に合わせて更新されたのに伴い、当モジュールもその実装に合わせるべく該当部分の修正を行い、Firefox 10 上で稼働するように対応しました。

2012年01月23日 UPDATE|通常権限ユーザーに対して、「区切りバー」の挿入・削除機能を提供するようにしました。
当モジュールでは、信頼可能ユーザーにおいては、テキスト入力可能な「カテゴリー」を利用することができますが、通常権限ユーザーにおいては、目的外での流用を避けるために、「カテゴリー」は利用できないようになっています。従って、従来は、通常権限ユーザーにおいては、ドラッグ&ドロップによる並び順のカスタマイズ以外は、登録したインデックス項目を分類・整理することができませんでした。そこで、通常権限ユーザーにおけるインデックス項目の分類・整理ニーズに若干なりとも対応するために、「区切りバー」の挿入・削除機能を追加し、利便性の向上を図りました。これにより、通常権限ユーザーにおいては、複数のインデックス項目を「区切りバー」によりグルーピングできることになります。また、併せて、信頼可能ユーザーにおいては、「タイトル」の変更も可能なようにしています。

2012年01月23日 UPDATE|当モジュールの名称を「TNC Personal Index Module」へと変更しました。
当モジュールの名称は、当初は「TNC Personal Bookmark Module」でしたが、それを「TNC Personal Index Module」へと変更しました。名称変更の理由は、次の3点です。(1)「Bookmark」とは、Web においては、一般的に、Web 全体に対するマーキング行為として認識されている。(2)サイト内における「ブックマーク」行為は、実質的に、サイトの「インデックス(索引)」として機能する。(3)「Indexed Database API」を利用している当モジュールは、「Index」というキーワードとの親和性が高い。ということで、具体的には、旧名称は一般的な意味合いでの「Bookmark」との混同の可能性があるのと危惧から((1)の観点)、新名称として「Index」もしくは「Navigation」というキーワード候補が浮かびましたが((2)の観点)、(3)の観点において「Index」の方を採用し、「TNC Personal Index Module」とすることとしています。