calibre コンテンツサーバー

calibre の コンテンツサーバ を使うと、お好きなスマートフォンやタブレット上のブラウザで直接 calibre ライブラリにアクセスして本を読むことができるようになります。その結果、スマホ上に専用の読書/書籍管理アプリをインストールする必要がなくなります。ただブラウザを使用するだけでよいのです。サーバは本をダウンロードして、インターネットに接続されていないときでも本を読めるよう、読んでいる本をオフラインキャッシュに格納します。

サーバを開始するには、接続/共有 ボタンをクリックして コンテンツサーバを開始 を選択します。コンピュータのファイアウォールやウィルス対策プログラムから calibre.exe へのアクセスを許可してよいかと尋ねるメッセージが表示されることがあります。許可 または OK をクリックしてください。そしてブラウザ (できれば Chrome または Firefox) を開き、次のアドレスを入力します:

http://127.0.0.1:8080

こうするとブラウザ上に calibre ライブラリを表示するページが開かれるので、どれかひとつをクリックして本の中を閲覧します。本の上でクリックすると、その本の書誌情報をすべてと、本を読む本をダウンロード ボタンを表示します。読書を始めるには 本を読む ボタンをクリックしてください。

注釈

上で使用したアドレス http://127.0.0.1:8080 は calibre を実行しているコンピュータ上でのみ機能します。別のコンピュータ/スマートフォン/タブレットなどからサーバにアクセスするためには、次の章で説明するように、もう少し作業を行う必要があります。

別のデバイスからコンテンツサーバにアクセス

一般的に必要となるリモートデバイスのアクセスには 2 つのタイプがあります。より単純な種類である 1 番目は、ホームネットワーク内からのものです。calibre をホームネットワーク上で実行していて、別のデバイスを同じホームネットワーク上に接続している場合、そのデバイスから calibre へは簡単にアクセスできるはずです。

ホームネットワーク上のデバイスからサーバにアクセス

上で説明したように calibre のサーバを開始した後、もう一度 接続/共有 ボタンをクリックします。コンテンツサーバを開始 の代わりに、コンテンツサーバを終了 が表示されるはずです。この項目の右側には IP アドレスとポート番号が記されています。これはピリオドで区切った一連の数字のように見えます。たとえば次のようになります:

Stop Content server [192.168.1.5, port 8080]

この数字はデバイスからサーバにアクセスするのに使用するアドレスを示しています。上の例に従うと、アドレスは次のようになります:

http://192.168.1.5:8080

アドレスの最初の部分は常に http:// です。次の部分は IP アドレスで、カンマの前にある数字です。最後に IP アドレスにコロン (:) をつけた後ろにポート番号をがあります。運がよければ必要なものはこれですべてで、calibre ライブラリをデバイス上で確認できるでしょう。そうでない場合には、先を読み進めてください。

ホームネットワーク接続のトラブルシュート

デバイスからサーバにアクセスできない場合は、次の手順を試してください:

  1. サーバと同じコンピュータ上でブラウザからアドレス http://127.0.0.1:8080 を開き、サーバが実行されているかを確認

  2. ファイアウォール/ウィルス対策がコンピュータ上のポート 8080 および calibre プラグラムへのアクセスを許可しているかを確認。問題の原因となっているファイアウォール/ウィルス対策を排除する最も簡単な方法は、一時的に両方とも無効にしてから接続を試すことです。コンピュータの安全のため、ファイアウォールを無効にするときにはインターネットから切断しておきましょう。

  3. デバイスとコンピュータが同じネットワーク上にあることを確認。つまり両方とも同じ無線ルータに接続されていることを意味します。特に、携帯電話会社または ISP の提供する無線接続はどちらも利用してはいけません。

  4. 標準的でないネットワーク設定を使用している場合、接続/共有 に正しくない IP アドレスが表示されることがあります。そのような場合には、正しい IP アドレスを自分で探し出さなくてはなりません。残念なことに、ネットワーク設定には無限の多様性があることを考えると、そのための手順を示すことができません。

  5. ユーザ名とパスワードを設定してある場合、最初にそれを使わず試して、問題が発生しないか確認してください。一部の e-ink デバイスでは、ブラウザが認証を扱えません。このようなとき、ユーザ名とパスワードを URL に含めると回避できることがあります。例えば http://username:password@192.168.1.2:8080 のように指定します。

  6. 行き詰まってしまったら、いつでも `calibre user forums`_で助けを求めることができます。

インターネット上のどこかからサーバにアクセス

警告

これを行う前に、サーバでユーザ名/パスワード保護を有効にする必要があります。そうしないと世界中の誰でも本にアクセスできてしまいます。環境設定 → 共有 → ネット共有 へ行き、コンテンツサーバへのアクセスにユーザ名とパスワードを要求 オプションを有効にしてください。

インターネットアクセスの設定に関する具体的な詳細はネットワーク設定やコンピュータのタイプによって異なりますが、基本的な概要は次のとおりです。

  1. サーバを実行しようとしているコンピュータの外部 IP アドレスを調べます。それには、そのコンピュータ上のブラウザで What is my IP address にアクセスします。

  2. コンピュータがルータの内側にあるなら、ルータ上でポートフォワードを有効にしてポート 8080 (または calibre コンテンツサーバを実行するポートとして選択したもの) をコンピュータにフォワードします。

  3. コンピュータ上でファイアウォール/ウィルス対策プログラムの通過を許可するよう、よく確認してください。

  4. これで、インターネット接続したデバイスが、最初のステップで調べた IP アドレスを使ってサーバに接続できるようになるはずです。たとえば調べた IP アドレスが 123.123.123.123 で、calibre サーバに使用するポートが 8080 のとき、デバイスで使用するアドレスは http://123.123.123.123:8080 となります。

  5. 必要に応じて no-ip などのサービスを利用して、最初のステップで調べた IP アドレスを使用する代わりに、覚えやすいアドレスを設定するとよいでしょう。

注釈

最大限のセキュリティを確保するには、コンテンツサーバ上で HTTPS を有効にする必要があります。それには、サーバの上級者用の設定で HTTPS 証明書へのパスを指定してサーバで直接行うか、既存の HTTPS 設定を利用して下に説明するようにリバースプロキシを設定することができます。

サーバのインタフェース

サーバインタフェースはメインの calibre インタフェースを簡略化したもので、タッチスクリーンでの利用に最適化されています。ホーム画面には現在読んでいる本が表示され、また閲覧する calibre ライブラリを選択できるようになっています。calibre のサーバはひとつだけでなく、前と同じようにすべてのライブラリへのアクセスが可能です。

本のリスト

サーバの本のリストは、単純に表紙をグリッド表示します。表紙をタップすれば本の詳しい書誌情報を表示したり、本を読んだりできます。さらに詳細なリストが必要な場合には、右上に置かれた縦に点が 3 個並んだものをクリックすればデフォルトのビューを変更できます。

本の並べ替えや検索は、calibre ユーザにはお馴染みのはずです。それには右上のアイコンをクリックするとアクセスできます。どちらもメインの calibre プログラムと同様に動作します。検索ページでは著者/タグなどをクリックして検索クエリを構築することもできます。メインプログラムでタグブラウザを利用するのとまったく一緒です。

メインプログラムの非常に愛されている機能である 仮想ライブラリ はサーバインタフェース上にも存在します。右上にある縦の 3 つの点をクリックして仮想ライブラリを選択してください。

書籍リーダ

calibre ライブラリの本はどれでもその上でタップして 本を読む ボタンをクリックするだけで読めます。書籍リーダの操作はとても簡単です。タップとスワイプの両方でページをめくれます。上下にスワイプすると章から章へスキップします。上から 1/4 のあたりをタップすると詳細なコントロールとビューアの設定が表示されます。

コンテンツサーバを実行しておくと、複数のデバイスで同じ本を開くことができ、最後に読んだ場所は記憶されます。記憶されていない場合には上部をタップして 同期 を選択し、強制的に同期させることができます。

ブラウザのサポート

新しい calibre サーバでは HTML 5 や CSS 3 の高度な機能をたくさん利用しています。このため、利用するには最新のブラウザが必要です。これは Android Chrome, iOS Safari およびデスクトップ版の Chrome と Firefox でテストされています。

このサーバは、すでに標準化済みの機能または標準化されつつある機能を慎重に使用しています。したがってもしお気に入りのブラウザでうまく表示できなかったとしても、ブラウザが追いつけば表示できるようになるでしょう。

非常に古いブラウザや制限のあるブラウザを使用しているか、JavaScript を実行したくない場合には、サーバのアドレスに /mobile` を追加して モバイル 端末用のビューを利用することができます。

注釈

iOS では、Apple は単一のブラウザエンジンのみを許可しているため、Firefox, Chrome, Safari はいずれも中身は同じブラウザです。新しいサーバインタフェースには、iOS 10.3.2 以降が必要です。Android では、サーバはバージョン 58 以降の Chrome でテストされています。

オフラインサポートの有効化

ブラウザメーカは SSL の使用を強制する目的で、HTTP での接続ではブラウザの高度な機能を使えなくしてきました。そうして犠牲となったもののひとつが、オフラインサポートです。そのためオフラインサポートを機能させるには、サーバ上で HTTPS を有効にしなくてはならない場合があります。さらに Android の Firefox では about:config と入力して browser.tabs.useCache を検索し、true に切り替える必要があります。

ユーザアカウントの管理をコマンドラインでのみ行う

calibre プログラムでは 環境設定 のセクションで、サーバのユーザアカウントを管理できます。しかし、スタンドアロンサーバを実行していて、メインの calibre プログラムを同じコンピュータ/ユーザアカウントで実行でいない場合には、ユーザをコマンドラインだけを使って管理することも可能です。

スタンドアロンの calibre-server プログラムのオプションに --manage-users を使ってユーザアカウントを管理できます。ユーザデータベースをフォルダ /srv/calibre の下格納したい場合、次のように作成して実行します:

calibre-server --userdb /srv/calibre/users.sqlite --manage-users

プロンプトの指示に従ってユーザアカウントを作成したり、権限を設定したりしてください。それが終わったら、サーバを次のように実行します:

calibre-server --userdb /srv/calibre/users.sqlite --enable-auth

これで、前の手順で作成されたユーザアカウントを使用します。

calibre コンテンツサーバを他のサーバと統合

ここでは、calibre コンテンツサーバを他のサーバに統合する方法を紹介します。これを行う最もよくある理由は SSL を利用したい、あるいはより大きなサイトの一部として calibre のライブラリを提供したい場合です。基本的な手法は、calibre サーバを実行し、メインサーバから calibre サーバへのリバースプロキシを設定することです。

リバースプロキシは、通常のサーバが着信要求を受け取ったときに、それを calibre に渡します。そして calibre サーバからの黄湯を読取り、クライアントに転送します。これは calibre をメインサーバと緊密に統合することなく、calibre サーバを単純に実行すればよいことを意味します。

仮想ホスト全体の利用

最も簡単な設定は、仮想ホスト全体を calibre サーバ専用にすることです。この場合、calibre サーバを次のように実行します:

calibre-server

次に、メインサーバで仮想ホストの設定をします。たとえば ngix では次のようにします:

http {
    client_max_body_size 64M;  # needed to upload large books
}

server {
    listen [::]:80;
    server_name myserver.example.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
    }
}

または Apache では次のようにします:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

<VirtualHost *:80>
    ServerName myserver.example.com
    AllowEncodedSlashes On
    ProxyPreserveHost On
    ProxyPass "/"  "http://localhost:8080/"
</VirtualHost>

URL プレフィックスを使用

仮想ホスト全体を calibre 専用にしたくない場合には、URL プレフィックスを使うことができます。calibre のサーバを次のように開始します:

calibre-server --url-prefix /calibre --port 8080

ここでの重要なパラメータは --url-prefix /calibre です。これは /calibre で始まるすべての URL をコンテンツサーバに提供します。これの動作を確認するには、ブラウザで http://localhost:8080/calibre を開いてください。通常のコンテンツサーバの Web サイトが表示されますが、ただし /calibre の下で実行されます。

ngix で必要な設定は次のとおりです:

http {
    client_max_body_size 64M;  # needed to upload large books
}

proxy_set_header X-Forwarded-For $remote_addr;
location /calibre/ {
    proxy_buffering off;
    proxy_pass http://127.0.0.1:8080$request_uri;
}
location /calibre {
    # we need a trailing slash for the Application Cache to work
    rewrite /calibre /calibre/ permanent;
}

Apache では、まず Apache でプロキシモジュールを有効にするために、httpd.conf に次の設定を追加します:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

プロキシモジュールを有効にする具体的な手順は Apache のインストールによって異なります。プロキシモジュールを有効にしたら、httpd.conf (またはすでに仮想ホストを使用している場合には、その仮想ホストの conf ファイル) に次のルールを追加します:

AllowEncodedSlashes On
RewriteEngine on
RewriteRule ^/calibre/(.*) http://127.0.0.1:8080/calibre/$1 [proxy]
RedirectMatch permanent ^/calibre$ /calibre/

これで、メインサーバの URL の /calibre の下で calibre のコンテンツサーバにアクセスできるようになります。上記の設定により /calibre の下のすべての要求はポート 8080 で実行している calibre サーバに渡されます。そして --url-prefix のおかげで calibre はそれを透過的に処理します。

注釈

リバースプロキシを使用する場合には、--listen-on 127.0.0.1 を使用して calibre コンテンツサーバにローカルホストでのみ要求を受け付けるよう指示する必要があります。そうすれば、サーバは同じコンピュータ、すなわちリバースプロキシから来た接続要求のみを受け付けるようになります。

注釈

メインサーバに SSL を設定している場合、ダイジェスト認証ではなく基本認証を使用するよう calibre に指示する必要があります。その方が早いからです。それには calibre-server--auth-mode=basic オプションを渡してやります。

最新の Linux システムで calibre サーバ用のサービスを作成

最新の Linux ベースのシステム (systemd) ではブート時に calibre を実行するためのサービスを簡単に作成できます。/etc/systemd/system/calibre-server.service を作成して次の内容を入力しておくだけです:

[Unit]
Description=calibre Content server
After=network.target

[Service]
Type=simple
User=mylinuxuser
Group=mylinuxgroup
ExecStart=/opt/calibre/calibre-server "/path/to/calibre library folder"

[Install]
WantedBy=multi-user.target

mylinuxusermylinuxgroup の部分はサーバ上で使用したいユーザとグループに置き換えてください。このユーザとグループは calibre ライブラリフォルダの中にあるファイルの所有者でなくてはなりません。ただしサーバを root で実行するのはお勧めできません。calibre ライブラリフォルダへのパスもシステムに合わせて変更してください。必要なら複数のライブラリを追加することができます。calibre-server のヘルプを参照してください。

そして次を実行してサーバを起動します:

sudo systemctl start calibre-server

状態を次のようにして確認してください:

sudo systemctl status calibre-server

ブート時に開始させるには、次を実行します:

sudo systemctl enable calibre-server

注釈

calibre サーバは実行中の X サーバ を必要としませんが、一部コンポーネントが X ライブラリにリンクしているため X ライブラリをインストールしておく必要があります。

注釈

calibre サーバは systemd socket アクティベーションをサポートしているため、必要に応じて利用できます。