ストレージ
- ローカルディスク
- 任意のS3:AWS、Cloudflare R2、Backblaze B2、MinIO、Yandex Object Storageなど
- Cloudflare R2とGoogle Driveはウィザードで接続でき、キーを手作業で扱う必要はありません
- R2の前段にCloudflare CDNを配置可能(任意)
- Google Driveのフォルダを書籍としてインポート
サーバー1.0リリース · アプリはストア公開準備中
Berthは、自分のVPSやNAS、Dockerで動かすオープンソースのオーディオブックサーバーです。Web管理画面から書籍をアップロードし、ローカルディスク、任意のS3互換ストレージ、Google Driveに保存して、Android・iOS向けのBerthアプリで聴けます。再生位置は失われません。
リポジトリにスターを付けるかWatchすると、アプリがストアに公開されたときに通知を受け取れます。
課題
多くのセルフホスト型サーバーは、フォルダをスキャンしてライブラリを再構築します。余計なファイルが1つあるだけでシリーズが統合されてしまったり、ファイルをNASに移すと再生状況が消えたりすることがあります。
ロック画面やBluetoothから一時停止したり、同期が終わる前にアプリを開いたりすると、再生位置がリセットされることがあります。オーディオブックアプリで最もよくある不満です。
ダウンロードが止まったまま再生できる書籍にならなかったり、トラックが間違った順番で再生されたりします。
Berthは、こうした問題が起こりようのない設計になっています。データベースが唯一の情報源であり、スマートフォンは自身の再生位置を保持します。
仕組み
Berthは3つの要素で構成されています。サーバーはライブラリをデータベースで管理し、音声は選んだストレージに置かれ、アプリがそれを再生して止めた位置を記憶します。
Web管理画面を内蔵した1つのサーバーです。VPS、NAS、Dockerにインストールし、短いWebウィザードでセットアップを完了します。
ファイルやフォルダごとWeb管理画面にドラッグします。チャプター付きのm4bやmp3のフォルダに対応しています。保存前にメタデータを編集できます。フォルダ構成は問いません。
管理画面でリスナーを作成し、QRコードを表示します。スマートフォンで読み取るかコードを入力すると、ライブラリが表示されます。リスナーにパスワードは不要です。
Berthサーバー
Web管理画面 · データベース
Berthアプリ
Android · iOS
あなたのストレージ
ローカル · S3 · R2 · Google Drive
CDN
任意
S3互換ストレージでは、音声は有効期限の短い署名付きリンクを使ってストレージやCDNから直接ストリーミングされるため、サーバーがボトルネックになりません。ローカルディスクとGoogle Driveはサーバー経由でストリーミングされます。
機能
比較
4つとも自分のサーバーからオーディオブックを配信できます。違いは、ライブラリの作り方、ファイルを置ける場所、スマートフォンの接続方法にあります。
| 項目 | Berth | Audiobookshelf | Plex | Jellyfin |
|---|---|---|---|---|
| 対象 | オーディオブック | オーディオブックとポッドキャスト | 汎用メディアサーバー | 汎用メディアサーバー |
| ライブラリの情報源 | データベース。書籍はWeb管理画面からアップロード | メディアフォルダをスキャン | メディアフォルダをスキャン | メディアフォルダをスキャン |
| ファイルの保存場所 | ローカルディスク、任意のS3、Google Drive | ローカルまたはマウントしたファイルシステム | ローカルまたはマウントしたファイルシステム | ローカルまたはマウントしたファイルシステム |
| 音声の配信 | 署名付きリンクでストレージやCDNから、またはサーバー経由 | サーバー経由 | サーバー経由 | サーバー経由 |
| リスナーのログイン | QRコード、パスワード不要 | ユーザー名とパスワード | Plexアカウント | ユーザー名とパスワード、またはQuick Connect |
| モバイルアプリ | 独自のAndroid・iOSアプリ(ストア未公開) | 公式Androidアプリ、iOSアプリはTestFlightでベータ版 | Plexアプリとサードパーティ製オーディオブックプレーヤー | サードパーティ製オーディオブックプレーヤー |
| サーバーのライセンス | Apache-2.0 | GPL-3.0 | プロプライエタリ | GPL-2.0 |
| 成熟度 | サーバー1.0(2026年10月)、アプリは開発中 | 成熟、大きなコミュニティ | 成熟、商用 | 成熟、大きなコミュニティ |
2026年10月時点の公開ドキュメントとイシュートラッカーに基づいています。Audiobookshelf、Plex、Jellyfinは成熟し、広く使われているプロジェクトです。Berthは2026年10月に最初のサーバーリリースを迎えたばかりで、アプリはまだストアに公開されていません。
FAQ
Berthは、専用のモバイルアプリを備えたセルフホスト型オーディオブックサーバーです。自分のハードウェアでサーバーを動かし、Web管理画面から書籍をアップロードし、ファイルの保存場所を選びます。ご家族はAndroidやiOSで聴けます。
サーバーはインストールできます。バージョン1.0は、LinuxサーバーやNAS、Raspberry Pi(amd64とarm64)上のDockerで動作します。モバイルアプリはまだストアに公開されていません。公開時に通知を受け取るには、GitHubリポジトリにスターを付けるかWatchしてください。
BerthサーバーはApache-2.0ライセンスのオープンソースで、GitHubに公開リポジトリがあります。APIはOpenAPIで記述されているため、サードパーティ製クライアントも作成できます。公式モバイルアプリは別のクローズドソースのプロジェクトです。
Berthはフォルダのスキャンからライブラリを再構築するのではなく、データベースでライブラリを管理します。そのため、ファイル構成や余計なファイル、ストレージの移動によって書籍や再生状況が壊れることはありません。また、音声をローカルディスクだけでなく、S3互換ストレージやGoogle Driveにも保存できます。Audiobookshelfは成熟しており、ポッドキャストにも対応し、大きなコミュニティがあります。Berthは新しく、オーディオブックに特化しています。
ローカルディスク、任意のS3互換ストレージ(AWS S3、Cloudflare R2、Backblaze B2、MinIO、Yandex Object Storage、Wasabi、Hetznerなど)、Google Driveに対応しています。Cloudflare R2とGoogle Driveはガイド付きのウィザードで接続できます。
はい。BerthはGoogle Driveに最小限のdrive.file権限で接続するため、自分で作成したファイルしか見えません。Driveの音声は、あなたのBerthサーバー経由でストリーミング・ダウンロードされます。
はい。アプリはすべての書籍の再生位置を数秒ごとにスマートフォンに保存し、サーバーと同期します。サーバー側の再生位置は、より新しい場合にのみローカルの位置を置き換えます。ダウンロードした書籍はオフラインで再生できます。
はい。どちらも最初のバージョンに含まれています。車から「続きを再生」、ライブラリ、ダウンロードを閲覧し、再生を操作できます。
管理者がWebパネルにQRコードを表示し、スマートフォンでそれを読み取るか短いコード(BRTH-7K2Qなど)を入力すれば接続できます。リスナーにパスワードは不要で、管理者はどのデバイスの接続も解除できます。
最初のバージョンは、チャプターが埋め込まれたm4bのオーディオブックと、mp3ファイルのフォルダに対応しています。チャプターとトラックの順番はデータベースに保存され、ファイル名から推測されることはありません。
最初のバージョンではできません。書籍は、Web管理画面からのアップロードか、Google Driveフォルダのインポートで追加します。Audiobookshelfからのインポート機能は、最初のリリース以降に検討しています。
ステータス
サーバー1.0はリリース済みで、アプリは仕上げの段階です。ストアでの公開日はまだ決まっていません。最新情報はリポジトリをフォローしてください。
インストール
Berthは、LinuxサーバーやNAS、Raspberry Pi上のDockerで動作します。以下のコマンドでポート8080で起動します。アップデート、バックアップ、HTTPSについては、GitHubのREADMEで説明しています。
$ mkdir berth && cd berth
$ curl -fsSLO https://raw.githubusercontent.com/joveptesg/berth/main/docker-compose.yml
$ docker compose up -d
$ docker compose logs berth
# 次にサーバーのアドレスを開き、ログに表示されたセットアップコードを入力します