自分だけの電子書籍ライブラリサイトが無料で構築でき、家族や友人とも共有可能なマルチユーザー対応の電子書籍ライブラリサーバー「Booklore」が公開されています。

booklore-app/booklore: Booklore: A self-hosted, multi-user digital library with smart shelves, auto metadata, Kobo & KOReader sync, BookDrop imports, OPDS support, and a built-in reader for EPUB, PDF, and comics.

https://github.com/booklore-app/booklore

Welcome to Booklore | Booklore

https://booklore.org/



◆デモサイト

「Try Live Demo」をクリック。



デモ用のUSERNAMEとPASSWORDが表示されるのでメモして「Launch Demo」をクリック。



ログイン画面が表示されるので、メモしたUSERNAMEとPASSWORDを入力して「Sign In」をクリックすると…



デモサイトにログインできます。



◆インストール方法

今回はGoogle CloudのVMインスタンス上のUbuntuでDockerおよびCaddyが利用できる環境に構築します。bookloreフォルダを作成して移動します。


mkdir booklore && cd booklore


.envファイルを作成し以下の内容を記述します。「DB_PASSWORD」および「MYSQL_ROOT_PASSWORD」は任意の文字列に変更してください。


# BookLore Application Settings
APP_USER_ID=1000
APP_GROUP_ID=1000
TZ=Asia/Tokyo

# Database Connection (BookLore)
DATABASE_URL=jdbc:mariadb://mariadb:3306/booklore
DB_USER=booklore
DB_PASSWORD=ChangeMe_BookLoreApp_2025!

# Storage type: LOCAL (default) or NETWORK. Set to NETWORK if using NFS/SMB - this disables file reorganization features to prevent data corruption.
DISK_TYPE=LOCAL

# MariaDB Container Settings
DB_USER_ID=1000
DB_GROUP_ID=1000
MYSQL_ROOT_PASSWORD=ChangeMe_MariaDBRoot_2025!
MYSQL_DATABASE=booklore


docker-compose.ymlを作成します。


services:
booklore:
image: booklore/booklore:latest
# Alternative: Use GitHub Container Registry
# image: ghcr.io/booklore-app/booklore:latest
container_name: booklore
environment:
- USER_ID=
- GROUP_ID=
- TZ=
- DATABASE_URL=
- DATABASE_USERNAME=
- DATABASE_PASSWORD=
depends_on:
mariadb:
condition: service_healthy
ports:
- "6060:6060"
volumes:
- ./data:/app/data
- ./books:/books
- ./bookdrop:/bookdrop
healthcheck:
test: wget -q -O - http://localhost:6060/api/v1/healthcheck
interval: 60s
retries: 5
start_period: 60s
timeout: 10s
restart: unless-stopped

mariadb:
image: lscr.io/linuxserver/mariadb:11.4.5
container_name: mariadb
environment:
- PUID=
- PGID=
- TZ=
- MYSQL_ROOT_PASSWORD=
- MYSQL_DATABASE=
- MYSQL_USER=
- MYSQL_PASSWORD=
volumes:
- ./mariadb/config:/config
restart: unless-stopped
healthcheck:
test: [ "CMD", "mariadb-admin", "ping", "-h", "localhost" ]
interval: 5s
timeout: 5s
retries: 10


Bookloreを起動します。


docker-compose up -d


Bookloreのコンテナが起動しない場合、フォルダのパーミッションを修正することでエラーを解決できました。


docker compose down
sudo chown -R 1000:1000 ./data ./books ./bookdrop
docker compose up -d


次にHTTPSでの通信を行うためCaddyの設定ファイル「Caddyfile」を編集し「booklore.example.com」を用意したドメイン名に置き換えて保存します。HTTPSでの通信が必要ない場合は、このままブラウザで「http://【サーバーのIP】:6060」でアクセスできます。


booklore.example.com {
reverse_proxy 127.0.0.1:6060
}


Caddyを再起動します。


sudo systemctl reload caddy


ブラウザで用意したドメイン名にアクセスすると、Bookloreの管理者を作成するためのフォームが表示されるので「Username」にユーザー名、「Full Name」にフルネーム「Email Address」にメールアドレス「Password」および「Confirm Password」にパスワードを入力して「Create Admin Account」をクリック。



管理者アカウントが作成されるとログイン画面が表示されるので「Username」にユーザー名、「Password」にパスワードを入力して「Sign In」をクリック。



ログイン後、BookLoreのトップページが表示されました。



◆Bookloreの主な機能

機能を検証するため以下のGIGAZINEの電子書籍を登録しました。

・GIGAZINE10周年記念書籍「未来への暴言」



・アニメ監督の情熱と魂が詰まったアニメ制作に触れることができるインタビュー集「アニメ監督のお仕事とは?: アニメ業界インタビューまとめ」



・1万2000枚以上の写真を収録した自転車旅行記「チャリダーマン 自転車旅行男・世界を走る 上巻」



・1万2000枚以上の写真を収録した自転車旅行記「チャリダーマン 自転車旅行男・世界を走る 下巻」



・ご主人様にんにく臭いです!



・登録方法

はじめに電子書籍のファイルを保存する「ライブラリ」を作成するためサイドメニューにある「LIBRARIES」横の「+」ボタンをクリック。



「Library Name」にライブラリ名を入力し、「Library Icon」にある「Choose an Icon」をクリックすると表示されるアイコンの一覧で使用したいアイコンを選択してから「Continue to Directories」をクリック。



「Add Book Folder」をクリック。



作成するライブラリに属するファイルを保存するためのディレクトリを選択しチェックを入れて「Select Directories」をクリック。



「Create Library」をクリックするとライブラリが作成されます。



ファイルをアップロードするため上部メニューの「アップロード」アイコンをクリック。



アップロードダイアログが表示されるので「Library」で保存するライブラリを選択し、「Subpath」から保存するディレクトリまでのパスを選択します。



「Select Files」エリアにアップロードしたいファイルをドロップし「Upload」をクリックするとアップロードが始まります。



アップロード完了後、少し待つと自動的に認識され一覧にも表示されました。



・日本語検索

検索文字は2文字から有効で部分一致での検索が可能です。該当する書籍がある場合は、検索窓の下に表示されます。



・動的コレクション

動的コレクションは、特定の条件を満たす書籍を自動的に棚分けする機能です。「MAGIC SHELVES」の「+」ボタンをクリック。



「Magic Shelf Name」にコレクション名を入力して「Add Rule」をクリック。



「Select icon」をクリックしてアイコンを選択。



検索条件設定欄の左側から「Read Status」、「Equals」および「Unread」と条件を設定して「Save Filter」をクリック。



各書籍の「Read Status」が「UNREAD」(未読)のものが自動的に「未読」コレクションに表示されます。



・表紙、レビューを自動的に取得

電子書籍の表紙や概要、およびレビューなどのメタデータをAmazonやGoogle ブックスから自動で取得することができ、ダウンロードした電子書籍のメタデータに含まれていない情報を補完することができます。



・OPDSサーバー

OPDSサーバーを設定することで、Bookloreの電子書籍をKOReaderや他の電子書籍リーダーで閲覧することができます。「設定」アイコンをクリックして「OPDS」タブを選択して「OPDS Server Enabled」のトグルスイッチをオンにすると「OPDS Catalog URL」が表示されます。



OPDS用のユーザーを作成するため「Username」にユーザー名、「Password」にパスワードを入力して「Create」をクリック。



KOReaderでOPDSカタログを登録します。任意の名称、OPDSカタログURL、OPDS用ユーザーのIDとパスワードを入力して「保存」をクリック。



同期が完了するとBookloreに登録されている電子書籍がKOReaderで表示されました。



・Bookloreで電子書籍を読む

Bookloreはブラウザで電子書籍を読むことができ、ハイライトやブックマーク、ノートの追加などが可能です。書籍一覧から読みたい電子書籍にカーソルを合わせると「本」のアイコンが表示されるのでクリック。



閲覧モードになり電子書籍を読むことができます。



文章をドラッグするとメニューがポップアップ表示されるので、マーカーのアイコンをクリックするとハイライトが追加されました。



ブックマークを行うには、画面上部のメニューの「ブックマーク」アイコンをクリック。



保存したハイライトやブックマークの一覧を見るためには、閲覧画面上部のメニューアイコンをクリック。



左のサイドバーに一覧が表示されます。



文章をドラッグすると表示されるポップアップメニューの「ドキュメント」アイコンをクリックすると…



ノート記入用のダイアログが表示されるので「YOUR NOTE」にメモを入力して「Save Note」をクリックして保存。



ノートの一覧は閲覧画面上部の「ドキュメント」アイコンをクリック。



右側のサイドバーにノートの一覧が表示されます。



PDFは閲覧のみ可能でブックマークやハイライトなどの機能はありませんでした。



CBZ形式のコミックも閲覧できます。PDFと同様に閲覧のみ可能です。



・異なるデバイス間での同期

異なるデバイス間での読んだ位置の同期について、今回のレビューではAndroidのKOReaderで読んだ位置をBookloreに反映することは可能でしたが、Bookloreで読んだ位置をAndroidに反映させることができませんでした。ブックマークやハイライトの同期も現時点ではできない状態です。

AndroidのKOReaderからBookloreへ位置を同期するには、KOReaderのメニューから「Progress sync」をタップ。



KOReaderへログインが必要なので「Register/login」をタップし、「username」にユーザー名を「password」にパスワードを入力して「Register」をタップしアカウントの作成およびログインを行います。



BookloreにもKOReaderと同期するための設定を行うため、Bookloreの「設定」アイコンをクリックし設定画面から「Devices」をクリック「Setting Management」の「Edit」ボタンをクリックします。



「Enable KOReader Sync」のトグルスイッチをオン、「Sync reading progress with Booklore eBook Reader」をオン、「KOReader Username」にAndroidで作成したKOReaderのユーザー名「KOReader Password」にパスワードを入力してから「Save」をクリックし、「KOReader API Path」をメモします。



AndroidのKOReaderのメニューから「Custom sync server」をタップ。



Bookloreでメモした「KOReader API Path」を「Custom progress sync server address」に貼り付け、「Username」にユーザー名「Password」にパスワードを入力して「OK」をタップ。



「Push progress from this device now」をタップすることで現在位置が送信されます。



Bookloreで書籍を開くとKOReaderで開いていた位置が反映され続きを読むことができました。



・メール共有、ワンクリックでKindleやメールに本を送信

「設定」アイコンをクリックし「Email」タブをクリック「Create Provider」をクリック。



「Provider Name」に任意の名前、「Host」にSMTPサーバーのアドレス、「Port」にポート番号、「Username」にユーザー名、「Password」にパスワード、「From Address」に送信元アドレス、「Enable Authentication」にチェックを入れてから「Create Provider」をクリックして送信サーバーを登録。



受け取り先のメールアドレスを事前に登録する必要があるので「Create Recipient」をクリック。



「Recipient Name」に任意の名前、「Email Address」にメールアドレスを入力して「Create」をクリック。



ワンクリック送信を行うには書籍の右下にあるメニューから「Email Book」をクリックして「Custom Send」をクリック。



「Email Provider」から先ほど登録した送信サーバー名を選択、「Recipient」から登録しておいた送信先メールアドレスを選択し、「Send Book」をクリック。



受信したメールに電子書籍が添付されていました。



・マルチユーザー対応で権限分け

複数ユーザーを作成することで家族や友人と電子書籍を共有したり、権限を設定することで操作可能な範囲を制限することが可能です。ユーザーの追加方法は「設定」アイコンをクリックし「Users」タブをクリック「Create User」をクリック。



「Full Name」に任意の名前、「Username」にユーザー名、「Email」にメールアドレス、「Password」および「Confirm Password」にパスワードを入力し、さらに「Accessible Libraries」でアクセス可能なライブラリを選択。



操作の権限も細かく設定できるので許可する権限にチェックを入れて「Create User」をクリックします。



作成したユーザーでログインすると、閲覧できるライブラリのみ表示され許可されていない操作アイコンは非表示になっていました。



なお、他にもいつどの程度の時間読書したかなどの統計機能やシリーズものをまとめる機能など、読書に関して欲しい機能が揃っているサーバーとなっています。