本のサブグループの管理、たとえば「ジャンル」

一部のユーザは、ライブラリの本をサブフォルダに似ているサブグループに整理したいと考えています。一番よくある理由はジャンルに階層を設けたいというものですが、他にもいろいろあります。あるユーザは教科書を科目とコース番号で整理する方法を求めました。別のユーザはテーマと受取人で贈り物を追跡したいと考えました。このチュートリアルではジャンルを例として説明します。

先に進む前に、これはハードディスク上のフォルダについての話ではないことに注意してください。サブグループはファイルのフォルダではありません。本はどこにもコピーされることはありません。calibre ライブラリのファイル構成には影響がありません。代わりに、calibre ライブラリの中で本のサブグループを整理して表示する方法を紹介します。

ジャンルのようなサブグループに対してよくある要求事項には、次のものがあります:

  • サブグループ (ここでは例としてジャンル) にはカテゴリではなく本を含める必要があります。これがサブグループがカテゴリと異なる点です。

  • 本は複数のサブグループ (ジャンル) に分類できます。これがサブグループが物理的なファイルフォルダと異なる点です。

  • サブグループ (ジャンル) は階層を形成しなくてはなりません。サブグループにはサブグループを含めることができます。

タグを使えば最初の二つはかなえられます。ジャンルごとにタグをつければタグブラウザ (または検索) でそのジャンルの本を見つけられます。これが 1 点目。同じタグを何冊でも本につけることは可能です。これが 2 点目。問題は、タグでは 3 番目の要求事項を満たせないということです。階層を提供していないのです。

sgtree calibre の階層機能が 3 番目を提供します。ジャンルをツリー構造で見ることができて、そのジャンルまたはサブジャンルにある本を簡単に検索できます。たとえばジャンルの構造が次のようになっているとしましょう:

Genre
    . History
    .. Japanese
    .. Military
    .. Roman
    . Mysteries
    .. English
    .. Vampire
    . Science Fiction
    .. Alternate History
    .. Military
    .. Space Opera
    . Thrillers
    .. Crime
    .. Horror
    etc.

階層機能を使えば、これらのジャンルを画像が示すようにタグブラウザでツリー状に表示できます。この例では一番外側の階層 (ジャンル) は、ジャンルを含むカスタム列です。サブジャンルを含むジャンルは、隣に小さな三角が表示されます。三角をクリックすると項目が開かれてサブジャンルを表示し、ご覧のように "History" と "Science Fiction" が表示されます。

ジャンル名の上でクリックするとそのジャンルおよびその子ジャンルに含まれる本をすべて検索します。たとえば Sicence Fiction の上でクリックすると、その 3 つの子ジャンルである Alternate History, Military, および Space Opera が表示されます。Alternate History の上でクリックすると、そのジャンルに含まれる本だけを検索し、Military と Space Opera は無視します。もちろん本には複数のジャンルを割り当てることが可能です。もしもある本が Space Opera かつ Military genres であるなら、どちらのジャンルをクリックしてもその本は表示されます。検索については下でさらに詳しく説明します。

この画像からわかるもうひとつのことは、Military ジャンルは 2 つあるということです。ひとつは History の下に、もうひとつは Science Fiction にあります。ジャンルは階層構造になっていますから、これらは 2 つの別々のジャンルです。ある本が片方の中にあったり、もう一方の中にあったり、両方にあったり (と言ってもこの場合では、ありえそうもありませんが) します。たとえば Winston Churchill の "The Second World War" は "History.Military" に分類されるでしょう。David Weber の Honor Harrington シリーズは "Science Fiction.Military" に分類されるでしょうし、さらに言えば "Science Fiction.Space Opera" にも分類されるでしょう。

ジャンルが存在する場合、つまり少なくとも 1 冊の本がそのジャンルに含まれている場合には、ライブラリビューから本をドラッグ&ドロップすることで簡単に他の本にそのジャンルを適用できます。詳しくは下に説明します。

セットアップ

ここまでくれば、「設定はどうすればいいの?」と疑問に思うことでしょう。それには 3 つのステップがあります: 1) カスタム列を作成、2) calibre にその新しい列を階層として扱うよう指示、そして 3) ジャンルを追加。

設定 -> 表示列の追加 を使用し、通常の方法でカスタム列を作成します。たとえば "#genre" を検索名、"Genre" を列見出しとします。列タイプは "タグのようにカンマ区切りでタグブラウザに表示されるテキスト" です。

_images/sg_cc.jpg

次に、calibre を再起動した後、calibre にその列を階層として扱うよう指示します。環境設定  →  外観  →  タグブラウザ へ行き、検索名 "#genre" を "階層化するカテゴリ" に入力します。適用 を押せば設定完了です。

_images/sg_pref.png

この時点で列にジャンルはありません。まだ最後のステップが残っています。本にジャンルを適用する方法です。ジャンルは、そこに最低 1 冊の本がないと calibre 上には存在しません。最初にジャンルを適用する方法を学ぶために、本の書誌の中でジャンルがどのように見えるかといった詳細について説明する必要があります。

「モノ」の階層は、ピリオドで区切られたフレーズで構成された項目を作成することで構築されます。ジャンルの例で続けると、このような項目は "History.Military", "Mysteries.Vampire", "Science Fiction.Space Opera" などになります。したがって新しいジャンルを作成するには、そのジャンルに入れたい本を選び、書誌を編集し、作成した列に新しいジャンルを入力します。この例で言えば、新しいジャンル "Comics" とその下にサブジャンル "Superheroes" を本に割り当てたいとき、その (コミック) 本の "書誌を編集" し、カスタム書誌タブを選択して、以下に示されるように (その他のカスタム列は無視してください) "Comics.Superheroes" と入力します。

_images/sg_genre.jpg

上記の操作を行ったあと、タグブラウザにはこのように表示されます:

_images/sg_tb.jpg

これ以降、この新しいジャンルを本 (おそらくコミック本) に適用するにはその本をジャンルにドラッグ&ドロップするか、"書誌を編集" を使って上記とまったく同じ方法で本に追加することができます。

注釈

階層表示はタグブラウザが項目を名前順に表示するよう設定されている場合にのみ機能します。これがデフォルトで、タグブラウザ下部にある 設定 ボタンで確認できます。

検索

_images/sg_search.jpg

ジャンルを検索する最も簡単な方法はタグブラウザを使用して、見たいジャンルの上でクリックすることです。子を持つジャンルの上でクリックすると、そのジャンルおよびすべての子ジャンルの本を表示します。しかし、ここで疑問に思うかもしれません。ジャンルに子があるからといって、それ自体がジャンルではないという意味ではありません。たとえばある本のジャンルが "History" であるが "History.Military" といった場合です。どうすれば "History" の本だけを検索できるのでしょうか?

タグブラウザの検索メカニズムは、あるアイテムに子があるかどうかを認識しています。子がある場合、アイテム上でクリックすると通常は 3 つのサイクルが 5 つのサイクルで変わります。1 番目は普通の緑のプラスで、これはその本のジャンルのみ (つまり History) の本を表示します。2 番目は 2 個のプラス (上に表示) で、そのジャンルとすべてのサブジャンル (つまり History および History.Military) の本を表示します。3 番目は普通の赤のマイナスで、そのジャンルのみを除外した本を表示します。4 番目は 2 個のマイナスで、そのジャンルとサブジャンルを除外した本を表示します。5 番目で最初に戻り、マークが消え、検索なしを意味します。

制限

あるジャンルを検索してそれから保存済み検索を作成する場合、そのジャンルの本の仮想ライブラリを作成するのに "制限" ボックスを利用できます。これはそのジャンル内で他の検索を行い場合や、そのジャンルの本の書誌を管理/更新したい場合に役立ちます。この例で言うと、'History.Japanese' と名前をつけた保存済み検索を作成するにはタグブラウザで Japanese ジャンルの上でクリックして検索を検索フィールドに表示させ、保存済み検索のフィールドに 'History.Japanese' と入力して、"検索を保存" ボタン (右側にある、白いプラスのついた緑色のボックス) を押します。

_images/sg_restrict.jpg

保存済み検索を作成したあと、それを制限として利用できます。

_images/sg_restrict2.jpg

有用なテンプレート関数

ジャンルの情報を、ディスクに保存したり、デバイスに送信したりといったテンプレートで使用したいこともあるかもしれません。ここで「どうすれば一番外側のジャンル名を取得できる?」と疑問に思うことでしょう。これを簡単にするために、calibre のテンプレート関数 subitems が提供されています。

たとえば、"History/The Gathering Storm - Churchill, Winston" のように一番外側のジャンルの階層をジャンルフォルダを作成するのために save-to-disk テンプレートに追加したいとします。これを行うには、階層の最初のレベルを抽出し、フォルダを作成する必要があることを示すためにスラッシュをつけて先頭に追加します。下のテンプレートがこれを行います:

{#genre:subitems(0,1)||/}{title} - {authors}

テンプレートと subitems() 関数について詳しくは テンプレート言語 を参照してください。