Ubuntu Weekly Recipe

第209回 Unityでニコニコ動画を検索する

この記事を読むのに必要な時間:およそ 5 分

第204回でも紹介したように,Unityは「Lens」を追加することでさまざまな検索インターフェースを追加することができます。

そこで今回は,ニコニコ動画のタグ検索を行うLensを作ってみましょう。

UnityとDashとLensのおさらい

今一度,Unityのシステムについておさらいしておきましょう。

UnityとLens

UnityはUbuntu 11.04から標準で採用されているデスクトップインターフェースです。アプリケーションドックであるLauncher,アプリケーションのメニューを表示するGlobalMenu,個々のソフトウェアの通知領域となるIndicatorなどのコンポーネントから成り立っています。

その中でも重要な位置を占めるのが,統合的な検索インターフェースであるDashです。Superキー(Windowsキー)を押すことで表示されるDashは,ユーザーに統一的な検索インターフェースを提供します。

LensはDash内部に検索条件や結果を表示するためのインターフェースとなります。何かを検索するときに特定の条件を付加したいことがあります。例えばファイルだったら「最終アクセス日時」⁠音楽ファイルなら「ジャンル」といった具合に,検索対象ごとによく使われる条件は異なりますし,動画だったらサムネイル,アプリケーションだったらアイコンのように,検索結果に表示したい画像もカテゴリーごとに異なります。このように,結果のインターフェースを柔軟に変更するのがLensの目的です。

Ubuntu 11.10の初期状態では検索できるのが,アプリケーション注1)⁠ファイルとフォルダー,音楽ファイルに限られますが,第204回で紹介したLensをアドオン的に追加することで,さまざまなデータをDashから検索できるようになります。

注1
未インストール状態のアプリケーションも検索できます。

ScopeとD-Bus

ユーザーが意識することはあまりありませんが,もう一つScopeという概念があります。これはLens内部注2で呼び出す検索システムそのものです。

YouTube LensならYouTubeのAPIを使って,Wikipedia LensならWikipediaのAPIを使って検索する必要があるため,これらはそれぞれ独立したScopeとして実装されます。また,複数のScopeを持ったLensを実装することも可能ですし,あるLensが,別のLensが作成したScopeを流用するといった実装も可能です。

Unity,Lens,Scopeはそれぞれ別プロセスとして起動します。このためプロセス間通信としてD-Busを使用します。

注2
Dashから直接呼び出すこともあります。

Lensのファイル構造

Lensのファイル構成は非常にシンプルです。したがってちょっとしたプログラミング経験がある人なら誰でも簡単にLensを作ることができます。

幸い,Unityと各種Lensの開発者であるDavid CalleとMichal Hrubyが,先日行われたUbuntu Developer Weekのセッション用に,Pythonを使ったサンプルライブラリを作ってくれたので,これをベースに説明しましょう。

Lensの作成方法や概念については一通りUbuntu Wikiでも詳細に説明されているので,そちらも参照してください。

ちなみに今回はPythonで記述しますが,Lens自体はCにVala,あとまだ試験的ではありますがJavaScriptでも記述できます。

サンプルコードの構造

実際にサンプルコードをブランチしてみましょう。

$ bzr branch lp:~unity-team/unity-lens-sample/python-4.0

Ubuntu 11.10で作成する場合は,Unity 4系のAPIを使う必要があるので,python-4.0をブランチします。UnityのTesting PPAを有効にしている場合や,Preciseを使用している場合はUnity 5系になるので上記のリポジトリをpython-5.0に変更してください注3)⁠

以下の3つのファイルが重要になります。

python.lens
UnityにLensとD-Bus通信を行うための各種情報を伝えるためのファイルです。ファイル名は個々のLensで一意なIDである必要があります。
phtyon-lens.svg
Dashの下部に表示するためのアイコンです。.lensファイルのIconでこのファイル名を指定します。
unity-lens-python.py
Lensの本体(Lensデーモン)です。検索結果のレイアウトや,フィルターはすべてここに記述します。このサンプルの場合,Scopeも内部に内包しています。
注3
Unityの4と5ではAPIも若干変わっています。今回は4を前提に説明しますので,5で試される方は4のAPIドキュメント5のAPIドキュメントを比較しながら読み進んでください。

サンプルのインストールと実行

上記ファイルをREADMEに書かれている手順で適切な場所に保存することで,サンプルを試すことができます。

$ sudo mkdir /usr/share/unity/lenses/python
$ sudo cp python-lens.svg /usr/share/unity/lenses/python/
$ sudo cp python.lens /usr/share/unity/lenses/python/

すべてのLensファイルは,/usr/share/unity/lenses/"LensID"/というディレクトリに保存します。この"LensID"は,.lensファイル名として設定した"LensID"と一致しなければならないことに注意してください。

今回の場合,python.lensなのでLensIDは"python"になります。

次にLensを起動します。

$ ./unity-lens-python.py

Dashから適切なLensを開いたら,UnityはD-Busを使ってLensと通信を行い。ユーザーが入力したデータをLensに渡します。このため,LensはUnityが起動している間は常にバックエンドで動いている必要があります。

最後に,Unityを再起動します。

$ setsid unity

Unityの再起動は.lensが更新されたときのみ必要です。Lensデーモン側(つまりunity-lens-python.py)を変更した場合は,Lensを止めて再起動するだけで有効になりますので,Unityの再起動は必要ありません注4)⁠

これにより,サンプルLensが使えるようになりました。Super+pキーを押して,サンプルLensを起動してみてください図1)⁠ちなみにこのショートカットは,.lensファイルの中で設定しています。

このサンプルはユーザーが入力した文字を大文字,小文字,数字に区分けして一文字ずつLensの中に表示します。また,Lensの中に表示されたアイコンを選択すると,各文字ごとのWikipediaのページがブラウザで表示されます。

図1 サンプルで「Ubuntu 11.10」と入力した例

図1 サンプルで「Ubuntu 11.10」と入力した例

注4
ただしカテゴリーを更新した場合は,Unityの再起動が必要なようです。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。

コメント

コメントの記入