読者です 読者をやめる 読者になる 読者になる

筑波大学の科目を検索するやつ「きりのは」を作った

つくった

桐の葉


毎年この時期になると科目検索アプリを作る病気にかかっているまつのきです(去年作ったのはこちら)

github.com

というわけで,今年も作りました.今年は「桐の葉」という名前のアプリです.

github.com

このアプリは大学が作成したものではなく,私が個人的に作成した非公式のアプリです.

科目の詳細画面にツイートボタンを設置しておきました. 友達と「この授業とろうぜ!」というノリで科目情報を共有していただけたら嬉しいです.

筑波大学では,科目を検索する手段として,

  • Twinsの科目検索機能
  • KDB

の2つが利用可能です. KDBの出現により,我々学生は格段に科目を検索しやすくなりました.

もう少し柔軟にクエリを書きたいなぁと思うことが何度かあり,ちょうど新年度だったので作ってみました.

例えば,「数学」に関する科目で,3単位以上,3A棟で開講されている講義を検索したいとすると,桐の葉の検索フォームに

title: 数学 credits >= 3 location: 3A

と入力して検索をすることができます.

ちなみに,検索フィールドは

  • code (文字)
  • title (文字)
  • credits (数値)
  • terms (文字(スペース区切り))
  • instructors (文字(スペース区切り))
  • daytimes (文字(スペース区切り))
  • info (文字)
  • grades (文字(スペース区切り)(本当は数値の配列にしたい))
  • location (文字)

があります. 全文検索エンジン(Apache SolrとかElasticsearchとか)にデータを格納することを念頭にテーブルを作ったので,RDB的にはダメなフィールドが幾つか存在します.

全文検索エンジンを使いたいんですが,お金がないのでいつかやりたいです.今はHerokuの無料枠で頑張ってます.無料枠なので負荷に耐えられないかもしれません.優しくしてください.

また,大学院科目はデータベースに登録していませんので検索されません. Herokuの無料枠ではデータベースに登録できるレコードは10000万件までで,大学院科目を含めると科目データが18000件ほどになるので諦めました.誰かが僕に月に900円くれれば大学院科目も検索できるようになります.


すこしだけ実装の話もしましょう.

今回は全文検索を実現するにあたり,以下のRubygemを用いました.

github.com

特別なことはほぼ必要なく,モデルファイルに「このフィールドを全文検索の検索対象にする」ことを記述してやれば(see: kirinoha/subject.rb at master · himkt/kirinoha · GitHub全文検索が可能になる,驚愕の一品です.

本当に気軽でとても良いのですが,問題もあります.

  • 検索結果のリランキングができない(多分
  • パフォーマンスが良くない(多分

Apache SolrやElasticsearchでは,特定の検索語やフィールドに対して重みをつけて検索結果をスコアリングし,ランク順で出力することが可能ですが,このsearch_copではそれは不可能です(当たり前だ

また,すべての検索リクエストはRDBに対して行なわれているので,ちゃんとした全文検索エンジンを使ったシステムよりもパフォーマンスは悪いはず?(データが高々10000件なのでそこそこの速度で検索できてるけど

以上,科目検索システム桐の葉の紹介でした. ちゃんとお金をかけて作り直したい気もしますが,大貧民学生にはちょっとしんどい.石油当てたら作り直します.

何か分からない点(たくさんありそう)がありましたら, 松之木 (@himkt) | Twitter までお気軽にお問い合わせください. プルリクエスト待ってます...(チラ github.com