同人誌(を視野に入れた)蔵書管理システム「motteter(もってたー)」

というのを作ってみました。
めちゃくちゃ長文なので見出しを付けました。

1.出発点:(特に同人誌の)蔵書管理を楽にやりたい

同人誌に限ったことではないですが、色んなものをボコボコ買ってると、時々「あれっこれ買ったっけ?」となる事があります。最悪の時は、買って帰ったら既に持ってたなんて事も。
そういう重複買いを防ぐためにも、色々な手段で蔵書管理をしてる人は多く、そういうニーズに応えて色んなアプリが世に出ています。オレもGoogle Tasks(To Do管理ツール)に「既に買ったもの・欲しいもの」リストを作ったりしてました。
既存の手段は数多くありますが、個人的に試した範囲では、以下の条件を全て満足の行くレベルで満たすものが無いように思えました。

(1)データの追加が楽に出来る
(2)重複確認がすぐに出来る
(3)モバイル/PCの両方からデータが扱える
(4)著者/アーティスト指定で、「この人の作品で持ってるもの」一覧という絞り込み検索が充実している
(5)バックアップが楽

特に、(1)については、バーコードが付いた本をスマートフォンのカメラで撮影してバーコードからISBNを検出してAmazonに問い合わせるなど、なかなか工夫されてるアプリもありますが、同人誌ってバーコード付いてない・・・CDも・・・あと同人誌ってAmazonに登録されてないし・・・( ̄+ ̄;
そんな感じで、バーコードが付いている物に限っては、既存のアプリで比較的楽に取り込めますが、それでは限界があるというか、いまいちかゆい所に手が届かない。

そこで!

欲しいものが無いなら自分で作ってしまえ、のUNIX文化にのっとって、作ってみました。その名も、既に持ってるもの管理システム「motteter(もってたー)」です。まだプロトタイプの序盤で、ようやくデータの取り込み機能が実装できた段階ですが、ちょいとご紹介。

2.作ってみた「motteter」ってこんな感じ

2.1 データの追加が楽!

まず、(同人誌を視野に入れたというのが目玉なので例として)同人誌を登録するとしたら、その同人誌の通販ページを開きます。残念ながら、こういう通販サイトに登録されていないアイテムについては手入力になりますが、そこは致し方ないです。


この商品画面で、「あ、これ持ってるわ/持ってたっけ?」となったら、データを登録/照会するブックマークレットを発動します。motteter用のブックマークをポチッと選択するだけです。


そうすると、後は自動で各種データを現在見てるページから引っ張って、自分専用のデータベースに問い合わせと登録をやってくれます。データベースは、GoogleのSpreadsheetという表計算アプリを使います。Googleの自分のアカウントの下に、Excelのワークシートみたいなのが一個出来て、そこにどんどん追加されていきます。

2.2 重複確認も楽!

さぁここからが本領発揮。既に所持品として登録していたものを重複して登録しようとすると・・・


「already motteter!(既に持ってたー)」と言われて、重複してるのが一発で分かります。もちろん、持ってるかどうかの確認だけというのも可能で、もし未登録だったら


「not motteter(not もってたー)」とか言われて、持ってないのが分かります。以上の操作は、商品ページを見ながらブックマークをポチッとやるだけ、ほぼ1クリック操作で後は自動でやってくれるので楽ですね。

2.3 PCからもモバイル端末からも扱える!

上に書いたとおり、Googleのサーバ上にアカウントと紐付けしてデータを置いているので、Google Docsにアクセスさえできれば、どこからでもデータの参照更新ができます。motteterの機能はブックマークレットとjavascriptで実装しているので、大流行中のスマートフォンでももちろん使えます。買い物に行った先で、「あれっこれ持ってたっけ?」となった時は、ブックマークレット一発で「あっ持ってたー」と!:-)

2.4 蔵書物の絞り込み検索は!

まだ未実装です。:-(
まぁ表計算アプリのデータなので、Spreadsheet上でフィルタでも掛けてくれれば一応絞り込みはできます。検索結果をどういう形式で見せるかも含めて検討中ですが、保存先が表計算アプリなだけに、融通はいくらでも利かせられます。絞り込み検索ならマクロか関数をちょろっと書けば一発だし!( ´∀`)

2.5 バックアップも楽!

データはSpreadsheetのワークシート一個になるので、このデータをExcel形式のファイルとして一個ダウンロードするだけで良い、と、これも楽々。

2.6 こんな機能もあるよ!

mottterのデータベースには「棚」という概念があって、たとえば「既に持ってるもの」だけでなく、「欲しいものリスト」など、目的に応じた棚が作れます。ブックマークレットで問い合わせると、登録済みならどの棚に入っているかも教えてくれるので、たとえば「欲しいもの」の棚を作っておけば、「あぁこれは既に買う予定に入ってるな」という事が分かります。また、新商品の情報が出た時に、とりあえず欲しいものリストに突っ込んでおくのも一発でできます。

3.実装の話:ブックマークレット+javascript+Google Docsにする利点

設計を始めた時は、実は今とは違う形で考えていましたが、今のブックマークレット+javascriptでデータ取得→Google Docsにデータ保存、という実装にすることで以下のメリットがあります。

(1)認証周りをGoogleに丸投げすることで、使うのが楽&専門家が作っているので安心&開発も楽
(2)既に開いた商品ページの中身を解析してデータを抽出するので、通販ショップのサーバに余計な負担をかけない

(1)に関する一番のメリットは、GmailやGoogle Docsを読める状態のブラウザからだったら、そのブラウザの認証情報に乗っかってアクセスできるので、アカウント持っててログイン済みだったら即使える、ということです。乗っかるといってもパスワードを横取りするという話ではなく、ブラウザが既に認証済みなので、そのブラウザでSpreadsheetの画面を開く→一行追加して各種パラメタをセルに入力する、という一連の作業をjavascriptで自動でやってるだけです。
また、データベースを他人に読まれたくないという人も居る(多分ほとんどの人はそう)と思います。それも、このSpreadsheetデータの公開範囲を非公開(自分だけアクセスできる)にするだけでOKで、他人がアクセスしようとするとGoogleの認証に弾かれてエラーになります。逆にシェアしたい時は、Spreadsheetデータの公開設定で共有したい人を追加すれば対応できます。
こうして、Googleという、ある程度認証の基盤が出来上がった所に乗っかることで、アカウントをどこかに新たに作る必要が無いので、アカウントが点在するリスクを低減できるだけでなく、利便性の向上もできます。開発する側も、認証周りを考える必要がないので作るのが楽だし、仮に脆弱性云々の問題が出たら、インフラを提供してるGoogleの専門部隊が早々に対策してくれる(だろう)から、セキュリティ云々のリスクを背負い込まなくて済むという利点もあります。
まぁ、このデータベースのデータが誰かに読まれちゃうような事態になったとしたら、Googleアカウントそのものが既に盗まれてるって事ですよ。パスワードは定期的に変えましょう。

(2)に関しては、実は開発開始当初はGoogle App Engine上にサーブレットを構築して、それ経由で検索処理を走らせることを考えていましたが、それだと以下のデメリットがあったので方針転換しました。

(a)同人ショップのサイトの年齢認証画面を超えられない
(b)仮に(a)が通ったとしても、とらのあなの検索エンジンが遅すぎて、新たに検索のアクセス要求を出すとなかなか応答が返ってこなくてイライラする
(c)離れたところに中継ポイントを作ると、それが意図しない形で攻撃の踏み台にされる等、セキュリティホールになる危険性がある

まぁ今の実装にしたことで、ショップのサーバに余計な負担がかからず、商品ページを見ながら直感的にポチッと操作できるという新たなメリットが生まれました。結果オーライということで。:-)

4.そう、きっとここから始まる…

4.1 これからの道のり

まだ登録と単発の問い合わせが出来るようになっただけで、開発はまだまだこれからです。とりあえずは下記の項目を実装する予定です。

・同人誌だけでなく様々なアイテムも取り込めるように、Amazonや楽天など対応サイトを増やす
 →現在、とらのあな、メロンブックス、COMIC ZIN、AmazonJPの一部が対応済み
・通販サイトに登録されてないアイテムについて、一部のパラメタを手入力して取り急ぎ登録や確認を出来るようにする
・検索機能の実装。著者やアーティスト指定の絞り込み
 →「この人の作品で持ってるものは?」などの検索を出来るように
・棚の中身一覧や棚の間の移動(欲しいものリスト→(買った)→既に持ってるものリストへ移動、など)を出来るようにする
 →今はSpreadsheetのデータを直接いじって対応してますが、Webブラウザ上でドラッグ&ドロップで直感的に出来るようにしたいと考えてます
・バーコードリーダアプリとの連携
 →既にあるアプリのように、書籍のバーコードをカメラで読み取ってISBNを検出して、そこからAmazonで検索→motteterで登録/確認、という流れに出来ると素敵。
 →バーコードを読むアプリは沢山あるので、それでAmazon検索して該当ページを開いてくれる奴が無いか調査中です。Amazonのページに飛べたら後はこっちのもの。

将来は、一定のフォーマットを用意して、それに沿ってブログ等に書かれたアイテムを取り込めるようにしたいと考えてます。うまいこと普及してくれれば、同人作家さんの新刊/既刊情報を一発で取り込めるようになったり、果ては、商業作家さんやプロ/アマチュアミュージシャンの新作情報などにも応用可能です。夢は広がります。

そんな感じで、夢の蔵書管理システムはまだ入り口が出来ただけですが、データの登録と単発の問い合わせに関してはなかなか快適です。

4.2 で、いつ出るの?(律)

もうちょい先!(n’∀’)η
まだ基本機能が完璧でなくて、タイトルや著者名に記号を含んでいると、うまく登録できなかったり検索で空振りしたりするので、その辺が潰せたらクローズドなアルファ版として希望者に使ってもらう予定です。乞うご期待!

4.3 結論

まぁ結局、どんなに便利なインフラを用意しても、登録と買う前の確認を忘れると意味無いんだけどね(ノ∀`)ァ’`,、’`,、’`,、’`,、’`,、

-おわり-