Unity Dashクローン Web::Dash というのを作った

Ubuntuの検索ユーザインタフェースUnity Dashと同じような機能をWebブラウザでできるようにするWeb::Dashというプログラムを作った。

動作イメージはこんな感じ。下はXubuntu 12.04でWeb::Dashを立てて、Wikipediaレンズを使って検索したところ。XubuntuなのでもちろんUnityは入っていないんだけど、Lensさえインストールしていれば検索はできる。


他のスクリーンショットGithubWikiを参照ください。数は少ないけど。


インストール方法など、詳しくはCPANのサイトをどうぞ。

Pythonで書いたらもっと簡単だったのかもしれないけど、Pythonさっぱり分からないのでPerlで書いた次第。

Web::Dashの仕組み

Web::Dashというか、そもそもUnity Dashは下のようなアーキテクチャで構成されている。

   [Unity Dash]
         |
 [----- DBus -----]
   |     |      |
[Lens] [Lens] [Lens]

Unity Dashは検索窓を表示してユーザからの入力を受けつけ、DBusを通じてUnity Lensプロセスに検索を依頼する。Lensが検索結果を返すと、Dashはその内容をユーザに表示する。つまりUnity Dashはいわば"ガワ"の部分しか担当しておらず、実際の検索はLensプロセスに委譲している。

細かく言うとDashのアーキテクチャにはさらにUnity Scopeなるプロセスがいて、検索ロジックは基本的にこいつが担当する。場合によってはLensは複数のScopeを集約して共通の検索結果カテゴリを定義したり、フィルタリング処理を行ったりするらしい。また、Global Search(Unity Dashデフォルト検索窓によるLens横断検索)時にはDashとScopeが直接通信することもあるような感じだけど、そのへんはまだよく調べていない。

ともかく、Unity Dashで個別のLensで検索をする場合、検索処理はLens以下が担当する。なので要はDBus経由でLensの検索APIをたたけば検索を実行できるということになる。

そこで、Web::Dashは下のような構成になっている。

  [Web browsers]
         |
    [Web::Dash]
         |
 [----- DBus -----]
   |     |      |
[Lens] [Lens] [Lens]

Web::Dashは、下側のLensにはDBus経由でUnity Dashと同じように振る舞い、検索処理を依頼する。一方、上側のWebブラウザにはHTTPで画面を提供する。一種のHTTP - DBusプロトコル変換ゲートウェイと言える。

現状の問題は、検索結果はWebブラウザにただそのまま表示しているので、Applications LensやFiles Lensで出てきた検索結果にアクションを起こせない点。ブラウザからリンクをクリックすることでアプリケーションを起動したりファイルを開いたりすることもできなくはないけど、面倒なので今のところ放置している。Web検索系のLensは普通に使えるはず。

あ、あとLensには検索結果をフィルタリングする機能や、カテゴリごとに結果の表示方法を指定する機能もあるけど、そちらも未対応。なので「Unity Dashクローン」とかいうのはおこがましいかもしれない。