R.I.P. 147.js

たまには技術ネタ.以前の職場で開発したちょっとした「しくみ」が来るシステムリプレイスによって引退すると聞いたので簡単にまとめておこうかなと思いまして.


どんなん

図書館のOPACで雑誌を検索すると右上に小窓が登場して電子ジャーナルへのリンクが表示されるという,ただそれだけのものです.

f:id:kitone:20120721205433p:plain
https://op.kulib.kyoto-u.ac.jp/webopac/catdbl.do?pkey=SB00161282

この機能は決まった名前をつけなかったのですが「半透明リゾルバ」とか「リンク小窓」とか「右上のアレ」とか「AutoResolver」とかその場の気分でいろいろな呼ばれ方をしていました.


しくみの裏側

リンクリゾルバ(Serials Solutions社の360 Link)のAPIを利用したJavaScriptをOPACに組み込むことで実現しています.

つまり,ユーザが雑誌書誌のページを表示させると,

  1. ページ中から雑誌のISSNとタイトルを抜き出す(スクレイピング
  2. ISSNとタイトルを使ってリンクリゾルバのAPIを呼び出す[*1]
  3. 該当する雑誌のタイトル,電子ジャーナルのURL,利用可能期間などがXML形式で返ってくる
  4. 必要なデータだけ選んで画面の右上に表示する

という処理が裏側で走ります.詳しくはJavaScriptソースを見てください.


このしくみをOPACに組み込むにあたっては,ベンダさんに大規模な機能改修をお願いしたわけではなく,ページ中に

<script type="text/javascript" src="usr/js/147.js"></script>

などとJavaScriptファイルを読みこませるようにしてもらっただけです.なんかトラブルが起こったときにはこの部分をコメントアウトして動かないようにすればきれいさっぱり元通りになります[*2].


なお,ベンダさんとやり取りするときの連絡票の番号が「利サ147」だったのでスクリプト名を「147.js」にしたという安直な命名.


リリースまでのいろいろ

就職して数ヶ月経ったころに「Serials Solution社、リンク・リゾルバにXML APIを実装」ニュースを見かけました.これだけではAPIが出たという以上のことが分からなかったので,すぐに職場の先輩を通じてSerials Solutionsさんにさらなる情報をくれるようお願いしてみました[*3].

それから半年ほどして年が明けたころにようやく仕様をまとめたドキュメントにアクセスできるようになり,APIを試すことができました.で,何をしようかなーと思って3時間くらいで作ったのがこのしくみ(のプロトタイプ版)です.2008年の1月とかですか.


なんでこんなものを作ったのか.ひとえにリンクリゾルバのアイコンをクリックするのが面倒くさかったからです.「クリックすれば電子ジャーナルにアクセスできますよー」っていうわけですが,いや,クリックせんでも分かったほうがええやん,と[*4].


数百行のスクリプトですし,作るのは簡単だったんですが実運用に組み込むまでにはいろいろありました.一番心配だったのはパフォーマンス低下につながるんじゃないかということです.自分の作ったものがボトルネックとなってサービスの質が下がるというのは目も当てられない.また,OPACに関連した資料や情報リテラシー教育などにも影響が出るという事情も.

試行錯誤の結果,この小窓を表示する位置が画面右上固定になったのは,まぁ,OPACのHTMLソースが汚すぎて画面のなかに差し込むとデザインが崩れるというだけの理由でした.できるならより適切な位置に表示したいところだったのですががが.


……で結局作って1年ほどが過ぎた2009年3月にリリースすることができました[*5].利用者の少ない春休み期間中に,という計算だったような.4月になるのをびくびくして待っていたのを覚えています.


リリースしてから

2009年8月のARGカフェ&フェスト@大阪で「クリックしないリンクリゾルバの作り方」というタイトルでライトニングトークをしてみました.


また,あとからSerials SolutionsのGさんに伺ったところではこのAPIに手をだしたのはうちが世界で初めてだったということで,そんな大したものではないけれどちょっとだけ誇らしくなったのを覚えています[*6].


このしくみが某私立大学図書館でも導入されたと聞いたときはちょっとだけ頭を抱えましたね…….


問題点

先述のライトニングトークをしたあとでOPAC担当から外れ,そのあとは id:xiaodong たちがトラブル対応などをしてくれました(おつかれさまでした).


運用でいちばん問題になったのは「表示されている雑誌とは別の雑誌のリンクが(も)表示されてしまう」という現象です.

この現象が起こるのは,たいてい(1)ISSNのない雑誌で,(2)書誌のタイトルが非常にシンプルという場合です.例えば「研究紀要」とか.このような場合はそのシンプルなタイトルだけでAPIを呼び出すため,別の雑誌もヒットしてしまうことが多く,別の電子ジャーナルのリンクが表示されてしまうと.

この問題は当初無視しようかとも考えたのですが,さすがに目に余るようなケースも出てきて,そういったタイトルが発見されるたびに対象外にする(ブラックリスト入り)というアドホックな対策を取りました.コード中の以下の部分です.

//特定のタイトルではリゾルブしない
function _checkBlack(title){
  BLACKLIST = ['紀要','研究紀要','研究報告','人文','Bulletin','ESP','Museum','Psyche','論集','Imago','年報','Annual report','研究成果報告書','Transactions','MMJ','Studies in applied mathematics','Journal','広報','At','Vision','Biological bulletin','DIO','Development','Anglia','研究年報','The China journal','Special report','所報','調査','試験報告','Information bulletin',];
  for(var i = 0; i < BLACKLIST.length; i++){
    if(title === BLACKLIST[i])
      return 1; //black
  }
  return 0;
}


また,Google Analyticsを入れていたもののアクセス解析をきちんとしきれなかったことも心残りです.どれくらい使われていたのか.ほんとうに必要なのか.評価をせずに終わってしまいました.


ほかには,リリース後に気になってきてコードをMVCモデル[*7]で書きなおそうと試みたものの結局うまくできた気がしてなくて悔しいままのこととか.APIJSONP返してくれなくてCGIかまさんといかんのもなんとかならんかというあたりとか.


さいごに

いずれにせよ関係者の皆さまおつかれさまでした.ありがとうございました.

これはある意味でリンクリゾルバを「否定」するために作ったしくみでしたが,最近は佛教大学図書館の飯野さんがリンクリゾルバの重要性を積極的に主張されていて[*8],自分のなかでまだきちんと整理しきれていないもののとても興味深く感じています.





*1:クロスドメインなリクエストになるのでOPACサーバ上のPerl/CGIスクリプトもかませています.

*2:この方法は別の方の命名により後に「OPAC+」と呼ばれるようになりました? http://www.code4lib.jp/2011/07/485/

*3:その際にサインかなんかが必要で課長の手を煩わせたような記憶が…….

*4:今と違って当時はまだOPACで電子ジャーナルが検索できなかったのですよ.

*5:http://current.ndl.go.jp/node/12285

*6:CODE4LIBのメーリングリストでこのAPIの使用例について話題になったときもさほどレスがありませんでした.一応投稿してアピールしてみたり.http://www.mail-archive.com/code4lib@listserv.nd.edu/msg07727.html

*7:JavaScriptMVCってなんか苦手…….勉強せねば.http://www.amazon.co.jp/dp/487311554X

*8:「リンクリゾルバ・ルネサンス」 http://ci.nii.ac.jp/naid/110008723196