iBooks のメタデータの混乱を管理する

iBooks のメタデータの混乱を管理する

AppleがiBooks Storeを改名した場所ではない場所から、真新しいEPUBをダウンロードしました。OS X 10.9 Mavericksのデスクトップに表示されています。そのEPUBファイルをiBooksアイコンにドロップすると、本が開き、楽しく読んでいます。ある日、iBooksのカテゴリ表示を見ると、そのEPUBが「未分類」という、どんどん増えているカテゴリに属していることに気づきました。これは驚きです。なぜなら、同じEPUBをiTunes経由でMacからiPadに同期すると、「フィクション」カテゴリとして表示されるからです。一体何が起こっているのでしょうか?なぜMacでは未分類なのに、iPadでは「フィクション」になっているのでしょうか?


これはiBooksの奇妙なバグが原因です。これはメタデータ(電子書籍に埋め込まれた情報)と、iBooks Store以外から入手したEPUBのメタデータをiBooksがどのように処理するかに関係しています。

(ここからは少しマニアックな話になりますので、もし怖いと感じたら、この記事の最後まで飛ばして、このバグの回避方法を説明しているところを読んでください。)

EPUB とメタデータ— 数か月前、私は iTunes で書籍のメタデータを管理することについての記事を書きました。「iTunes で書籍を管理する: この小説にはいいビートがある」(2013 年 1 月 14 日)。その中で、iBooks が書籍をリストする方法を制御する 2 つのファイルについて説明しました。

EPUBは実際には、.zip他の多くのファイルを含む特別に構築されたアーカイブです。先ほど説明した2つのファイルのうちの1つ、.opfつまりファイルは、すべてのEPUBに含まれています。このファイルには、特に.opf、一連のメタデータステートメント、つまりEPUBを説明する特定のコードが含まれています。これらのうちの1つ(または複数ある場合もありますが、iBooksが認識するのは最初のものだけです)は、EPUBの主題を説明します。例えば、次のようなステートメントは、<dc:subject>Fiction</dc:subject>EPUBがフィクションであることを示します。理想的には、EPUBがiBooksにアップロードされると、
フィクションカテゴリに割り当てられます。

.opfしかし、iBooksはEPUBをカテゴリーに割り当てる際に、ファイル内の生のメタデータを使用しません。代わりに、AppleがiBooks(そして名前から想像できるようにiTunesでも)で使用するために設計した特別なファイルを使用します。このファイルは という名前ですiTunesMetadata.plist。このファイルiTunesMetadata.plistには、EPUBに関する多数のメタデータエントリが含まれています。そのうちの1つ、「ジャンル」というエントリが、iBooksがEPUBをカテゴリーに割り当てる際に使用します。

でも、一体どこから来るんだろう?と疑問に思うかもしれiTunesMetadata.plistませんね。iTunes StoreでEPUBを購入すると、iTunesMetadata.plist既にEPUBの中にこのファイルが含まれています。しかし、他のソースから入手したEPUBには、そのようなファイルは存在しません。Mavericks以前は、iTunesのブックライブラリにEPUBを追加すると、iTunesがこのファイルを作成していました。興味深いのは、この輝かしいMac版iBooksの時代においても、iTunesが今でもこの作業を行っていることです。

iBooks Store以外のソースからiBooksにEPUBを追加すると、iBooksはiTunesに呼び出しを送信し、EPUBの.opfファイルを調べ、メタデータを可能な限り収集し、見つかった情報に基づいてiTunesMetadata.plistEPUB用のファイルを作成し、そこにデータを入力します。そのため、EPUB<dc:subject>Fiction</dc:subject>のファイルに.opf「Fiction」という記述が含まれている場合、その記述の「Fiction」の部分が、iTunesMetadata.plistiTunesがEPUB用に作成するファイルでは「ジャンル」として扱われます。

素晴らしい!さっき言ったバグを除けば。つまり、これがそのバグです。どうやらiBooksは、iTunesがファイルを作成してiBooksに通知する前にiTunesMetadata.plist、新しく追加されたEPUBをカテゴリに割り当ててしまうようです。そして、EPUBにはiTunesMetadata.plist「ジャンル」エントリがないため、カテゴリに割り当てられた時点では「未分類」に分類されてしまいます。

しかし、iTunesが構築プロジェクトを完了するとiTunesMetadata.plist、MacのiBooksライブラリにあるEPUBにはファイルが作成されます。そのため、次回MacのiBooksライブラリをiPadと同期すると(iTunes経由で同期するため、EPUBをiBooksに追加した際にiTunesが起動していなくても、同期時にファイルを構築できます)、iPadに同期したEPUBにはファイルが含まれておりiTunesMetadata.plist、その本はiPad上で「フィクション」カテゴリとして表示されます。

そのため、EPUB は Mac では「未分類」ですが、iPad では「フィクション」になります。

回避策— Mavericks の iBooks 1.0 には iTunes にある「情報を見る」コマンドがないため、書籍の「ジャンル」を編集してこの問題を修正することはできません。ただし、Mac の iBooks で EPUB を適切なカテゴリに表示させる方法は次のとおりです。

まず、iTunesが起動していることを確認してください。次に、iBooksで新しいEPUBを開きます。すると、iBooksがEPUBのコピーを作成し、フォルダの奥深くに保存し~/Library、iTunesiTunesMetadata.plistにファイルを追加するよう指示します。

次に、iBooksライブラリウィンドウからEPUBをデスクトップにドラッグします。これにより、iBooksは作成したEPUBのコピーiTunesMetadata.plistをデスクトップに作成します。これで、書籍のコピーが3つ作成されます。オリジナル(ファイルなし)、フォルダ内のコピー~/Library(新しいiTunesMetadata.plistファイルを含む)、そしてデスクトップ上の新しいコピー(iTunesMetadata.plistファイルを含む)です。

さあ、切り替えましょう。iBooksでEPUBを選択し(「すべてのブック」ビューになっていることを確認してください)、編集 > 削除を選択します(またはDeleteキーを押します)。iBooksが、Macから本を削除してよいか確認するメッセージを表示します。よろしいので、「削除」をクリックします。

最後に、iBooksがデスクトップに作成したEPUBのコピーをiBooksにドラッグ&ドロップします。iBooksでEPUBのカテゴリーを確認すると、iTunesMetadata.plistファイル内の「ジャンル」エントリが反映されているはずです。

(BBEdit や Xcode のプロパティ リスト エディタなどのテキスト エディタを使用して、EPUBiTunesMetadata.plistファイル内の「ジャンル」ステートメントを直接編集できると思うかもしれません。その通りです。残念ながら、iBooks は EPUB をホーム ディレクトリのライブラリの奥深くに隠すため、エクスポートして再インポートするだけよりも難しくなります。EPUB は次の場所にあります: ~/Library/Containers/com.apple.BKAgentService/Data/Documents/iBooks/Books。ただし、iBooks は各 EPUB ファイルをフォルダに展開し、そのフォルダに基本的にランダムな文字の一意の文字列という名前を付けるため、どの本がどのフォルダに対応するかを判断するのは難しいでしょう。)

これは、馬鹿げているけれど非常に厄介なバグに対する、馬鹿げた回避策ですが、他に何ができるでしょうか?AppleがiBooksの「情報を見る」機能を復活させるのを待つしかないでしょうか?しばらく時間がかかるかもしれません…

Idfte
Contributing writer at Idfte. Passionate about sharing knowledge and keeping readers informed.