Bookstacks — ISBNバーコードで本を管理するiPhoneアプリの紹介

Flutter と Riverpod で開発した本棚管理アプリ「Bookstacks」の紹介。ISBNバーコードをスキャンするだけで書籍を登録し、カスタムラベルで整理できる。

Read in: en
Bookstacks — ISBNバーコードで本を管理するiPhoneアプリの紹介

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ステップで成り立っている。

  1. スキャン — バーコードを読み取る。ISBN-13(978/979プレフィックス、13桁)とISBN-10(10桁)のみを受け付け、それ以外の形式は無視する。

  2. メタデータ取得openBDを呼び出す。レスポンスはJSON配列で、最初の要素が書籍オブジェクトかnull(未収録)のどちらかになる。タイトル・著者・カテゴリ・表紙画像URLを取り出す。

  3. 重複チェック — 確認画面で同じISBNの本がすでに登録済みかどうかを検出する。登録済みの場合は登録ボタンを無効化してユーザーへ通知する。

  4. 永続化 — バリデーション済みの書籍エンティティをユースケース経由でHiveに書き込む。書き込み後にリストを再取得し、本棚グリッドを再描画する。

まとめ

Bookstacksは、本棚の管理をできるだけ手間なく行いたいと思って作ったアプリである。バーコードをスキャンするだけで書籍を登録できる点は、自分で使っていて気に入っている。

良ければダウンロードしてみてほしい。

Tags: Flutter iOS Riverpod Dart
Share: 𝕏 Post Facebook Hatena
✏️ View source / Discuss on GitHub
☕ サポート

このブログを応援していただける方は、以下からサポートをお願いします。いただいたサポートはブログ運営・技術研鑽に活用します。


関連記事