カーリルAPIコンテストに参加してきました

 先日行われたカーリルAPIコンテストに応募し、会場で発表をさせていただきました。残念ながら入賞には至りませんでしたが、会場の笑いは取れましたし、ほかの発表者の方々の作品やお話もおもしろかったので、参加の目的は十分に達成できました。主催者のNota.incの方々や審査員の方々、それに当日参加してくださいましたみなさま、どうもありがとうございました。
 デモを含めて発表の持ち時間が3分間しかなく、背景や前提を説明しきれなかったところがありますので、ここで紹介したいと思います。

Next-L Enju 紹介状発行プラグイン(カーリル版)とは?

 図書館管理システム"Next-L Enju"で、近隣の図書館の蔵書を検索して紹介状を発行するためのプラグインです。紹介状とは、他の図書館の資料を利用する際に、自分の使っている図書館から発行してもらう書類のことです(詳細は後述)。「資料を探す」という切り口でのアプリケーションは多数の応募が予想されたので、あえて「図書館の業務で使う」という視点でなにか作れないかと思って作成しました。プレゼン資料がWebに掲載されています*1

利用の流れ

 (以下はEnjuのデモサイトにログインした状態でお読みください)

 ユーザnabetaさんは「えんじゅ市」にある「みた図書館*2を利用しています。

 ある日、「これからホームページをつくる研究者のために―ウェブから学術情報を発信する実践ガイド (ACADEMIC RESOURCE GUIDE)」を読みたいと思って、「えんじゅ市立図書館」を検索してみました。検索結果によると、自分のふだん使っている「みた図書館」をはじめ、えんじゅ市内のどの図書館にも所蔵がありませんが、市外の近隣の図書館ではいくつか所蔵があるようです。

 市外の図書館を利用するためには、えんじゅ市の図書館から発行された紹介状を持参する必要がある決まりになっています。nabetaさんは近隣の図書館から「港区立麻布図書サービスセンター」を選び、「紹介状を印刷」というリンクから紹介状のPDFファイルをダウンロードして印刷します。

 nabetaさんは印刷した紹介状を所属館の司書さんのところに持って行き、はんこを押してもらいます。さらにnabetaさんはこれを持って、港区立麻布図書サービスセンターに行き、めでたく目的の資料を入手します。

予想される質問集

図書館で紹介状なんて聞いたことないんだけど

 プレゼンで説明したように、紹介状が必要なのは多くの場合大学図書館専門図書館で、逆に公共図書館では紹介状自体を必要としない場合がほとんどです。また、相互貸借で他の図書館の資料そのものを取り寄せることができる場合も多く、その際には紹介状は不要になります。
 現在カーリルが対応しているのは公共図書館専門図書館だけなので、仮にEnjuが今すぐどこかの図書館に導入されたとしても、現時点では実用になるのは専門図書館に関係する場合のみだと思われます。将来カーリルが大学図書館に対応すれば、実用になる機会が増えるのではないでしょうか。

「みた図書館」の検索結果に表示されているなら、その図書館にあるってことじゃないの? なんでわざわざ紹介状がいるの?
  • 資料の情報と所蔵情報(その資料がどこにある、という情報)は別物です。また、Next-L Enjuは所蔵していない資料であっても、システムに登録して検索対象に含めることができるようになっています。これは杉並区立図書館の蔵書検索が採用しているやり方です。
  • 人気が高く、購入や予約のリクエストが集中すると思われる資料については、発売前にシステムに登録し、予約を受け付ける図書館が存在します。またそのような資料は、所蔵している資料がすべて貸出中であったり、何十人もの予約待ちが入っていたりするなど、所蔵していても長期間にわたって当該資料を確保できない場合があります。
今時紙で紹介状?
わざわざ図書館まで行かなくてもいいように、オンラインで資料を入手できるようにしろよ

 まさにそのとおりです。この件はいろいろ事情があって心苦しく思っていますし、多くの関係者が問題解決のためにがんばっているところなのですが、それを書き始めると話題が大きく変わってきますので、ここではこれ以上は触れません。

プログラムの説明

 Enjuの初期設定時に、図書館の情報(名称や住所、電話番号など)を登録します。このとき登録された住所をもとに緯度と経度を取得し、データベースに保存します。Enjuでは緯度と経度の取得に、graticuleを使用しています。また、その緯度と経度をもとに、カーリル図書館データベースAPIを使って「近隣の図書館」のsystemidを取得し、データベースに保存します。

 資料の詳細画面が呼び出されると、Enjuはカーリル蔵書検索APIを使って、その資料を所蔵している図書館の情報を呼び出します。問い合わせに使われる情報は以下のふたつです。

  • その資料のISBN
  • 現在ログインしているユーザの所属館の「近隣の図書館」のsystemid

 ここで得た図書館の情報をPDF出力用のテンプレートに渡して、紹介状を出力します。

 PDF出力には、prawnprawntoを使っています。prawntoはオリジナル版の開発が止まっているようですが、github上でforkされたものがいくつか存在しています。今回はhuerlisiさんの版を使っています。

 EnjuRuby on Railsで構築されており、紹介状発行プラグインRailsプラグインとして実装されています。詳細はgithub上のソースコードをごらんください。

作ってみての感想

 現在のカーリル蔵書検索APIでは、返ってくる図書館の情報がsystemidと各図書館の略称しかないので、紹介状作成のために各図書館(分館)の正式名称や電話番号を得ようとすると、もう一度カーリル図書館データベースAPIにアクセスしなければならないのが少し面倒だと思いました。もっとも、キャッシュするなりローカルに保存しておくなりすればよいのですがね。

 あと、これは作ってみるまで全く気がつかなかったのですが、資料のデータベースは熱心に作成され、WebAPI化も進んでいる一方で、図書館そのもののデータベースが意外に整備されていないのですね。ここに着目し、大胆に実装したカーリルには脱帽せざるを得ません。
 図書館のURL、所在地、電話番号、開館時間などがきちんとWeb上のメタデータとして整備されれば、利用者の利便性だけでなく、図書館の業務の効率も大幅に向上するのではないかと思いました。カーリルの強化にも期待ですが、ほかに取り組みが期待できそうなのは「日本の図書館」などの統計資料を持っている日本図書館協会か、「ゆにかねっと」を持っている国立国会図書館でしょうか。いずれも何かというと頼ってしまう組織ですが、もちろん単に頼るだけのようなことはせずに、Project Next-Lでも企画の詳細を考えてみたいと思います。

*1:プレゼン資料では「Google Maps上に表示」とありますが、動作が重かったため、テキストでの単純な一覧表示に変更しました。

*2:「みた図書館」はあくまでも架空の図書館で、現地に実在する図書館とは関係ありません。念のため。位置情報って例を示すのに架空のものを使うわけにいかないところが難しい。