千路里庵 千路里庵 | 武蔵野猫式
CHILORI DEV LAB

千路里庵ライブラリ構想

Notionを管理DBにした、小さな図書館システムを作る。漫画、本、ゲーム、資料の個人管理から始めて、小さな会社でも使える軽量な蔵書・貸出管理へ育てる。

開発実験へ戻る

概要

千路里庵の次の開発案として、Notionを管理DBにした「小さな図書館システム」を作る。

最初は自分用の漫画・本・ゲーム・資料の管理から始める。将来的には、小さな会社、個人事務所、店舗、サークル、部室などで使える軽量な蔵書・資料管理システムに発展させる。

大規模な図書館システムを作るのではなく、Notionを管理画面として使い、千路里庵側のWebフロントから一覧表示・ISBN登録・貸出返却をできるようにする。

基本方針

作りたいもの

個人用途

漫画、本、ゲーム、資料を管理する。何を持っているか、どこまで買ったか、紙か電子か、どこに置いたか、読み返したいか、処分候補か、公開してよいものかを整理する。

小規模組織用途

小さな会社やチームで、社内本・技術書・参考資料・マニュアルなどを管理する。どこにあるか、貸出中か、誰が借りているか、返却予定日はいつかを見える化する。

システム構成

Notion

管理画面として使う。蔵書DB、利用者DB、貸出履歴DB、申請DBを持たせる。

千路里庵フロント

利用者が見る画面。最初は蔵書一覧とISBN登録画面だけでよい。将来的に本の詳細ページ、利用者申請フォーム、貸出ボタン、返却ボタン、検索、タグ絞り込み、貸出状況表示を追加する。

APIサーバー

Raspberry Pi 5上で動かす。Notion API、openBD API、貸出処理、重複チェックなどを担当する。

バーコードリーダー

最初は安いUSB/Bluetoothバーコードリーダーを使う。キーボード入力扱いで、ISBN入力欄にフォーカスした状態でスキャンする。

Raspberry Pi Zero Wにカメラを付けて自作バーコードリーダー化する案もあるが、無印Zero Wだと画像処理が重く、読み取りの安定性にも不安がある。そのため、まずは市販バーコードリーダーで実用フローを固める。

開発段階

v0.1: ISBN登録と一覧表示

  1. Notionに蔵書DBを作る。
  2. 千路里庵側にライブラリ一覧ページを作る。
  3. Notion APIから「公開可」の蔵書データだけ取得して表示する。
  4. ISBN入力画面を作る。
  5. ISBNからopenBDで書誌情報を取得する。
  6. 取得したタイトル・著者・出版社・発売日・表紙URLなどを確認画面に表示する。
  7. 登録ボタンでNotionの蔵書DBに登録する。
  8. ISBN重複チェックを行う。

v0.2: 利用者管理

本格ログインは作らず、まずは申請ベースにする。Notionに利用者DBを作り、千路里庵側の申請フォームから登録する。管理者がNotion上で承認済みにし、利用者コードを付与する。

v0.3: 貸出・返却処理

本の詳細ページに「借りる」「返す」を追加する。貸出時はメールアドレス+利用者コードで本人確認し、蔵書DBの貸出状態を更新し、貸出履歴DBに記録する。

v0.4以降

予約、返却期限、延滞表示、貸出不可資料、複数冊所蔵、管理番号ラベル印刷、検索、タグ絞り込み、漫画の所持巻管理、電子書籍と紙書籍の区別、処分候補リスト、社内資料管理、ラズパイ端末化、自作バーコードスキャナ化を検討する。

Notion DB設計案

蔵書DB / Books

タイトル、ISBN、種別、著者、出版社、発売日、表紙URL、所蔵状態、媒体、置き場所、貸出可否、貸出状態、現在の利用者、貸出日、返却予定日、公開可否、表示用コメント、管理メモを持たせる。

利用者DB / Users

氏名、メール、所属、ステータス、利用者コード、承認日、メモを持たせる。

貸出履歴DB / Loan History

履歴名、蔵書、利用者、処理種別、処理日、返却予定日、実返却日、状態、メモを持たせる。

申請DB / Requests

申請名、申請種別、申請者名、メール、対象蔵書、申請日時、ステータス、管理メモを持たせる。

API設計案

画面設計案

/library

蔵書一覧ページ。タイトル、種別、著者、貸出状態、表示用コメントを表示する。検索・絞り込みは後回しでよい。

/library/register

ISBN登録画面。バーコードリーダー利用を想定し、ISBN入力欄を大きく置く。入力欄にフォーカスした状態でバーコードを読み、Enterで検索実行。openBDの検索結果を表示し、内容確認後にNotionへ登録する。

/library/:id

蔵書詳細ページ。貸出状態、置き場所、コメントを表示する。将来的に「借りる」「返す」を追加する。

/library/user-request

利用者申請フォーム。氏名、メール、所属などを入力してNotionへ登録する。

ISBN登録仕様

ISBNは13桁を基本とする。バーコードリーダーから入力された文字列に余計な改行や空白がある場合は除去する。978または979で始まる13桁のみISBNとして扱う。ISBN-10対応は後回しでよい。

重複チェックは必須。同じISBNが既にNotionに存在する場合は、新規登録せず既存データを返す。

将来的に同一ISBNを複数冊持つ場合は、「書誌DB」と「所蔵DB」を分ける。v0.1では1冊=Notion 1ページでよい。

Raspberry Pi 5への配置方針

Raspberry Pi 5上に配置する。既にトレードシステムが動いているため、混ぜない。Docker Composeで別プロジェクトとして管理する。

トレードシステム: 既存のポートを維持 千路里庵ライブラリWeb: 3010 千路里庵ライブラリAPI: 3011

外部公開するかは後で判断する。最初はLAN内、またはCloudflare Tunnel経由で確認できればよい。

セキュリティ方針

Notion APIトークンは絶対にブラウザへ渡さない。APIサーバー側の .env に保存する。.env はGitHubにコミットしない。.env.example だけを置く。

ISBN登録画面は、当面は自分だけが使う前提でよい。公開ページと管理ページを分ける。

貸出・返却APIを実装する場合は、最低限、メールアドレス+利用者コード確認を行う。

ディレクトリ案

chilori-library/ README.md docker-compose.yml .env.example apps/ web/ package.json src/ app/ components/ lib/ api/ package.json src/ index.ts routes/ books.ts scan.ts users.ts loans.ts services/ notion.ts openbd.ts isbn.ts types/ docs/ notion-schema.md api-spec.md setup-raspberry-pi.md