Notionで蔵書検索システムを作る

はじめに

個人的なボランティアとしての話。

小規模の図書館にかかわる業務をシステム的に補佐できないかを検討することになった。図書館といっても冊数は多くなく1000冊には到底満たないくらい。利用者も、ある限定された範囲の人に対して書物の貸し出しをするイメージ。

今までは、その場所に来た人が「この本借りたい!」となったときに貸し出しをしていた。しかし、昨今の情勢を鑑みると対面でのやりとり前提のやりづらさもあり、その場に来れない人にも蔵書の貸し出しが出来たらいいな、というところから話が始まった。

このような経緯から図書館業務全般をシステム化するのではなく、利用者が蔵書を借りやすくするためのシステム作成が焦点になっている。検討の結果、利用者が借りたい蔵書を探しやすいシステムを作成することにした。

すなわち、今回のシステム化においては、利用者・貸出状況の管理は対象外(今までと同様の運用を維持する)としている。

蔵書検索システム

営利目的の組織ではないため、今回のシステムにおいては以下の制約を満たす必要がある。

・システム構築・運用にかかる費用は無料にしたい
・Excelの使い方が分かる程度のPCスキルの人でもデータの更新が出来る

無料で図書館システム構築をする例についてネットで情報を検索していると、図書館システムを無料で利用できるようにしているまさにそのもののサービスが既にあるようだ(例えば、http://weblib.jpn.org/index.php)。

こういうシステムでは貸出管理などもできるようで通常の図書館システムを構築するにはうってつけだったのだが、次の理由で断念した。

・どのような本があるか全く分からない状況において、利用者が借りたい書籍名を入力したとしても、蔵書数が少ないため入力された書籍が存在しないことの方が多いと予想される。

この状況においては、一覧化されている状態からキーワードで絞り込める方が使い勝手が良くなる。

合計冊数が少ないので、Staticなホームページに全件のデータを入力しておき、Javascriptで絞り込むことも考えられないことはない。が、その場合、蔵書が追加されるたびにホームページ自体を更新する必要がある。ホームページ更新のためにはそこそこのPCスキルが求められることになり、誰でも出来る作業ではない。

そんな状況で、Notionがぴったりのサービスであることに気付いた。NotionであればWebページとして公開することもできる。Notionのデータベースとして蔵書を登録しておけば、絞り込み検索も高速に可能だ。

ただし少しだけ懸念点がある。Notionのデータベースは、カラムの削除などが簡単にできてしまう。ある程度Notionの操作に慣れた人でないと誤ってカラム削除してデータ復旧不可能な事態になる可能性がある。

Notionを普段使わない人にNotion特有の操作方法、懸念点を理解してもらうのは少し敷居が高そうに感じている。このため、Notionのデータはマスターにしない方が無難だと思う。そんな中、Notionのデータベースは、Excelファイルを取り込む機能があることに気付いた。それであれば、マスターの管理はExcelでやってしまって、蔵書の更新がある度にNotionにアップロードすることにしてしまえば良い。Excelであれば操作方法に慣れている人も多いので操作ミスの懸念も低くできる。ということで、マスター管理をExcelにしつつ、Notionに取込みという方針でやることにした。

蔵書の登録

次は蔵書データを電子化する作業がある。全ての蔵書を手入力してデータ取得していくのは嫌なのでいい方法がないか検討をした。世の中にはISBNコードから書籍情報を取得できるAPIを提供しているところがあるようだ。そのうちの一つにopenBDというものがあった。使いやすいAPIだったのでこれを使うことにした。

ただし、このAPIに登録されていない書籍もあるため、そのときにはamazonでISBNコードでの商品検索(APIではなくwebページ)をすればコピペできそうだ。

https://www.amazon.co.jp/s?k={ISBNコード}

さて、では書籍情報を取得するためのISBNコードの電子化はどうするか?
手で入力するのか?でも数字の入力って打ち間違いが多くなりやすい。

今まであまり気にしていなかったがそういえば本の後ろにバーコードがあるなぁと思っていたところ、この番号がISBNコードだった。バーコード読取機は持っていないが、スマホのバーコードリーダーアプリを使って読みとればISBNコード入力問題も解決しそうだ。

ただし、バーコードを読み取ってテキストエディタにコピーする、という作業を一冊ずつ繰り返すのは非常に面倒くさい。ある程度まとめて読み取った後、一括でエクスポートできる方が良い。ということでそんな用途のものを探したのだが存在しなさそうだった。だったら、いっそのこと、この用途に特化したバーコードリーダーアプリを作ることにした。

実際の作業者はAndroid端末になることが多そうだが、私はiOS端末しか持ってなかったのでいっそのことiOSとAndroidの両方を同一コードで作ればいいんじゃないかと考えて、Flutterでデモアプリを作ってみた。スマホアプリの開発をしたことがない割には、バーコードを読み取るサンプルアプリを作成して、iPhoneで動作させるところまでを簡単に出来たのは驚いた。Flutterすごいな。

ここで気付いたことがある。バーコードリーダーアプリなので当然カメラ機能が必要になる。しかしシミュレーターではカメラを使用するアプリを動作させられないようで、実機で確認しなければならないようだ。Android端末は持っていなかったが、ここまで来たらAndroid端末も一台手元に置いて弄ってみることにし、新し目且つ安いAndroid端末を探して注文した。

と、ここまで順調に来たのだが思わぬ事実が発覚してしまった。

所有している蔵書の中にはバーコードの部分に蔵書管理用のラベルが貼ってあったり、そもそもバーコードが存在していない古い本も結構な割合を占めている雰囲気だ。すなわち、バーコードリーダーだけ作成してもISBN入力簡易化の根本的な解決にならない。実際にISBNコードを入力する人に確認したところ、書籍の状況的にバーコード入力よりもExcelに手入力しちゃった方が楽です、的な返事。

でも、ISBNコードを手入力する場合、入力ミスがあったときに、どの本が間違えていたのかが分からない。入力ミス時のリカバリのために、ISBNコードと一緒に書籍名も控えてもらうようにするなら、そもそもISBNコードの入力作業は不要じゃないか、とすら思ってしまう(実際には将来的に運用全般をシステム化することまで考えるとISBNコードは必須と思うが)。

そこで、急遽、バーコードリーダーの完成を急ぐのではなく、手入力したバーコードの入力ミスを限りなくゼロにする仕組みを検討することにした。

ISBNコードの手入力は避けられなさそうなので、以下の機能を持つWindowsアプリケーションを作成することにした。

・ISBNのコード的なバリデーション(扱える文字種、チェックデジットの確認)
・入力されたISBNコードから上記APIを叩いて、書籍名、著者名などの書籍情報を取得
・Amazon商品検索ページへのリンクを作成(APIで情報取得できなかったとき用)
・複数のISBNコードと書籍情報を一括してexportする機能を作成

HerokuとかでWebアプリを作成しても良かったのだが、今後、蔵書が増える度にも使うことが想定される。長期的にHerokuのWebアプリケーションが動作することを担保するよりは、Windowsで動作するアプリケーションの方がライフサイクルが長そうだ。WindowsアプリケーションはElectronで作成することにした。ElectronはWebデザインの知識でアプリケーション作成が出来るのが楽だ。

今後は、バーコードが存在する本に関してはバーコードリーダーを使用できた方が圧倒的に楽なはずなのでElectronアプリ作成が落ち着いたら腰を据えてAndroidアプリのバーコードリーダーを開発していこうと思う。

まとめ

今回、可能な限りお金をかけずに、Excel操作が出来る人でも蔵書更新の運用ができるシステム構築の実現方法に悩んだ。検討当初は、ユーザー数が少ない内はHerokuやGCPの無料枠でなんとか簡単なWebアプリケーションを作成してごまかしながら運用することも考えていた。ただ、Webアプリケーションを作成してしまうとそのシステムをメンテナンスする人が限られてしまうのがネックになる。

そんな中Notionがいい仕事をしてくれたことに感謝している。Notionがなかったら多分何かしら妥協して微妙なもやもやが残ってしまったことだろう。
今の懸念は、Notionが使えなくなったときどうするかだが、それはそのときに考えようと思う。

また、ElectronやFlutterのように1つのコード(少し誤解ある書き方になっているので補足。FlutterはAndroid固有、iOS固有のコードを書く必要もある。全てが共通コードにになるわけではない)で複数の環境の開発ができるのが楽でありがたい。Flutterは、デスクトップアプリケーションの対応も着々と進行しているようだし、Flutterの今後に期待しておく。

この記事が気に入ったらサポートをしてみませんか?