ククログ

株式会社クリアコード > ククログ > プログラミング言語のドキュメント検索をもっとリッチに

プログラミング言語のドキュメント検索をもっとリッチに

昔から「Rubyはドキュメントが弱い」と言われてきました。「PythonやPHPはあんなにドキュメントが揃っているのに、それに比べてRubyは。。。」というわけです。でも、待ってください。ドキュメントは記述が充実しているだけで十分ですか?簡単に目的のドキュメントにたどりつけますか?

GoogleやBingなどの検索エンジンや、Amazonを筆頭とするECサイトは「探しものを見つけやすくする」ことにどんどん磨きをかけています。なぜ、ドキュメントの検索機能はそれほど進歩しないのでしょうか?

ドキュメントの検索機能が、検索エンジンやECサイトでも使われているような最新の検索パターンを取り入れ、もっとリッチになればプログラミングがもっと楽しくなるはずです。それをRubyのドキュメントで実現しようとしているのがるりまサーチです。

最近、るりまサーチがよりパワーアップしたので、どう変わったかを紹介します。↓は、第3回フクオカRuby大賞用に作ったるりまサーチの資料です。

第3回フクオカRuby大賞用のるりまサーチの資料

よくある検索機能

PythonのドキュメントページSphinxで生成されています1。SphinxにはJavaScriptで実装された検索機能がついていて、キーワードによる検索のみが可能です。シンプルで検索サーバーを用意しなくてもよい手軽さはうれしいですが、よいキーワードを思いつかないと目的のドキュメントにたどり着くのは難しいです。

PHPのドキュメントページの検索機能は検索対象のカテゴリ化とYahoo!の検索機能を利用しています。Yahoo!の検索機能を使った部分ではHTMLのページだけではなく、Atomフィードのファイルもヒットしてしまっています。通常のWebサイト検索ではAtomフィードもヒットしてよいかもしれませんが、ドキュメント検索ではAtomフィードはノイズです。既存の検索機能を利用することもできますが、より精度をよくしたい場合はチューニングが必要だということです。

プログラミング言語のドキュメント検索は通常のWeb検索や文書検索などの自然言語の検索と傾向が違います。例えば、記号が含まれていたり、省略語が使われていたり、メソッド名・クラス名などキーワード(スコアを上げた方がよい語)となる語がわかりやすかったりといった具合です。このあたりをふまえた上でチューニングするとより探しやすいドキュメント検索機能ができあがります。

では、チューニングした結果は、どのようにユーザーに見せるとよいでしょうか。それには先進的な検索機能を提供するWebサイトが参考になります。よい検索機能がデザインパターンとしてまとめられています。

検索のデザインパターン

https://amazon.co.jp/dp/4873114764

昨年末、「検索と発見のためのデザイン」という本がオライリージャパンから出版されました2。この本の中で、実際のWebサイトのスクリーンショットと一緒に、「検索のデザインパターン」としてよく使われるよい検索機能をパターン化しています3。パターンの数は少ないのですが、このように検索機能をデザインパターンとしてまとめているのがよかったです。検索に興味のある方はこの部分だけでも眺めてみるとよいでしょう。

パワーアップしたるりまサーチにもこの本で作っている検索のデザインパターンにでてくる機能が実装されています。るりまサーチが、ドキュメント検索にチューニングした結果をどのように見せているかを2つ紹介します。

入力補完(オートコンプリート)

検索のデザインパターンの1つとして入力補完(オートコンプリート)機能が紹介されています。デスクトップでもWebでもかなり広まっているので見かける機会が多いのではないでしょうか。

Web検索の場合はクロールした文書の中によく含まれている単語や、ユーザが多く入力する単語などを元データとして、ユーザーの入力を補完することが多いでしょう。しかし、ドキュメント検索の場合、クラス名やメソッド名など、補完対象とすべきキーワードがわかりやすく含まれているので、それを使います。これにより、ノイズが少ない補完候補を出すことができます。

Yahoo!など外部の検索エンジンを使っている場合はこのようなチューニングは難しいのではないでしょうか。

ちなみに、るりまサーチの入力補完機能はgroonga本体に組み込まれている「サジェスト機能」を利用しています。groongaのサジェスト機能はまだ仕様が固まっていないため、APIが変更される可能性が大きくあります4。使用する場合はそのことに注意してください。

なお、るりまサーチの入力補完のUI部分はjQuery UIのAutocompleteを利用しています。

ファセット型ナビゲーション

groongaでは「ドリルダウン」と呼んでいる機能で、絞り込み候補を表示する機能です。るりまサーチでは「クラス名」や「ドキュメントの種類」(インスタンスメソッドのドキュメントや定数のドキュメントなど)など、いくつかのグループを作って、それぞれのグループ毎に絞り込み候補を表示しています。

ファセット型ナビゲーション

この機能のよいところは、キーボードで入力しなくてもマウスクリックだけで絞り込んでいけることです。一昔前の検索では「よいキーワード」を自分で考えて絞り込んでいく必要がありましたが、この機能を使うことにより「提示されたキーワードから選ぶ」だけでよくなります。便利で探しやすくなりましたね。

まとめ

プログラミング言語のドキュメント検索システムはもっと便利になって、プログラマを助けるべきという話でした。そのためにるりまサーチが提供している今風の検索機能を2つ紹介しました。どちらも、ユーザーが探したいものを見つけるためのキーワードを完全に知らなくても見つけることができるようにするための機能です。今後は、これらの機能のように、ユーザーがそれほど頑張らなくても見つけたいものにたどりつける機能がより一般的になってくることでしょう。

みなさんもWebサイトに検索機能をつけるときは、テキスト入力フォームを1つ置くだけではなく、さらに別の方法も加えてより簡単に目的のものを見つけやすくできないかを考えてみてください。

  1. Sphinxはgroongaのドキュメントでも使っていますね。

  2. 翻訳本です。

  3. 著者は建設業界やXP界隈でもよく名前のでるアレグザンダーに大きく影響を受けているようです。

  4. なのでまだドキュメント化されていない。