Bookstacks — ISBNバーコードで本を管理するiPhoneアプリの紹介
なぜ作ったか
本棚にある物理本の管理を手軽にできるアプリが欲しかった。書店で購入前に「この本持っていたか」と確認したり、「この本はもう読み終わったか」といった情報を管理できればと思っていた。
そこで、「バーコードをスキャンするだけで登録できる」という体験に特化して書籍管理アプリを開発した。
ISBNバーコードを使ってメタデータを取得し、重複チェックを自動で行ったり、ラベルで本を分類するといった機能を備えている。本の感想を記録する機能もある。
App Storeで公開しているので、興味があればぜひ試してみてほしい。
ユースケース
- 重複確認 — 書店でバーコードをスキャンし、購入前にすでに持っているかどうかを確認する
- 積読管理 — 未読の本に「積読」ラベルを付けて、次に読む本をリストから選ぶ
- 読書記録 — 読み終えた本に「読了」ラベルを付けて、本棚を整理する
- 欲しい本リスト — 購入候補を「買いたい」ラベルでまとめる
主な機能

バーコードで書籍登録
ISBNバーコードをスキャンすると、タイトル・著者・カテゴリ・表紙画像をopenBD(利用許諾済みの書誌情報API)から自動取得する。ISBN-13(978/979プレフィックス)とISBN-10の両形式に対応している。同じISBNの本がすでに登録済みの場合は重複を検出して登録をブロックする。

ラベルで整理
「読了」「読んでいる」「積読」「あとで読む」「買いたい」の5つのラベルがプリセットされている。自由な名前でカスタムラベルを追加できる。ラベルチップをタップすると即座に絞り込まれる。

本棚ビュー(グリッド・リスト)
デフォルトでは表紙画像付きの3列グリッドで書籍を表示する。トグルボタンでリストビューに切り替えられる。

設定
設定画面ではラベル管理・バージョン情報・プライバシーポリシー・書誌情報提供元を確認できる。テーマはシステム設定に自動的に連動する。

技術スタック
| 層 | 技術 |
|---|---|
| UI | Flutter (iOS) |
| 状態管理 / DI | Riverpod + riverpod_generator |
| 永続化 | Hive |
| バーコードスキャン | mobile_scanner |
| 書籍メタデータ | openBD (http) |
| 画像キャッシュ | cached_network_image |
| テスト | flutter_test / mocktail |
アーキテクチャはDomain・Application・Infrastructure・Presentationの4層構成で、RiverpodがDIと状態管理を担う。Hiveがすべてのデータをローカルに保存するため、一度キャッシュされた書籍データはオフラインでも参照できる。
ISBNスキャンと書籍登録の仕組み
スキャンから永続化までの登録フローは4ステップで成り立っている。
-
スキャン — バーコードを読み取る。ISBN-13(978/979プレフィックス、13桁)とISBN-10(10桁)のみを受け付け、それ以外の形式は無視する。
-
メタデータ取得 — openBDを呼び出す。レスポンスはJSON配列で、最初の要素が書籍オブジェクトか
null(未収録)のどちらかになる。タイトル・著者・カテゴリ・表紙画像URLを取り出す。 -
重複チェック — 確認画面で同じISBNの本がすでに登録済みかどうかを検出する。登録済みの場合は登録ボタンを無効化してユーザーへ通知する。
-
永続化 — バリデーション済みの書籍エンティティをユースケース経由でHiveに書き込む。書き込み後にリストを再取得し、本棚グリッドを再描画する。
まとめ
Bookstacksは、本棚の管理をできるだけ手間なく行いたいと思って作ったアプリである。バーコードをスキャンするだけで書籍を登録できる点は、自分で使っていて気に入っている。
良ければダウンロードしてみてほしい。
- App Store: Bookstacks