Mac業界の最新動向はもちろん、読者の皆様にいち早くお伝えしたい重要な情報、
日々の取材活動や編集作業を通して感じた雑感などを読みやすいスタイルで提供します。

Mac Fan メールマガジン

掲載日:

知っ得! iTunesのスゴイ仕組み

知っ得! iTunesのスゴイ仕組み

iTunesを支えるコア技術

iTunesのデータは通常、自分のホームにある[ミュージック]フォルダの中に[iTunes]フォルダを作成し、その中で管理を行っています。ソフトを起動して表示されるウインドウ内の情報はすべて「iTunes Library.itl」というデータベースファイルから読み出されています

楽曲ごとの名前やアルバムのタイトル、アーティスト名、再生時間、トラックナンバーといった固有の情報は「ID3」規格によって定義されており、それぞれのファイルにメタデータとして埋め込まれています。iTunesはファイルの読み込み時にこの情報を参照してデータベースに追記します。

しかし、音楽CDからリッピングして読み込む場合にはこの情報が含まれていません。そこでiTunesではトラックデータをインターネットで提供するデータベース「CDDB」で検索を行い、マッチするものを変換したファイルのメタデータ領域とiTunesのデータベースに書き込んでいます。

特徴的なのは、「iTunes Library.itl」には音楽やビデオといったメディアそのものは含まれておらず、データベースにはそれぞれどこに保存されているのかを示す「ファイルパス」だけが記録され、実際に再生するときだけファイルにアクセスしています。

また、iTunes上でメタデータの変更を行った場合にはライブラリだけでなく、オリジナルファイルの中にあるID3メタデータにも同時に書き込みを行っています(再生回数やiTunesへの追加日といったID3タグに定義にないメタデータなどはライブラリ内のみに保存されています)。

これによってデータベースのサイズは最小限に抑え、検索に必要な処理負荷も少なくすることで高速な操作体験が実現されています。この手法は仮想ライブラリ(Virtual Library)と呼ばれ、iTunesだけでなくiMovieや写真、ガレージバンドといった私たちが普段よく使うソフトにも採用されています

ライブラリの中身はデータベース

iTunesライブラリに含まれる情報の一部は、環境設定の中にある[iTunesライブラリXMLをほかのアプリケーションと共有]オプションを有効にすると簡単に見られます。ここにはタイトルやアーティスト名、アルバム、再生時間、ジャンルやファイルの種類などリストで表示されるあらゆる情報がデータベース化されて保存されていることがわかるでしょう。

分離されたメディアファイルたち

では、再生の際に必要となるメディアファイルの実体はどこにあるのでしょうか。先述のとおり「iTunes Library.itl」にはパスだけが記録されるので、ファイルの所在は「どこでもよい」という柔軟なファイル管理設計になっています。とはいえ、それではファイルが散逸してしまうため、初期設定では[iTunes]フォルダの中に[iTunes Media]フォルダが作成され、読み込まれたメディアの種類や目的に応じて自動的に仕分けされて保存されるようになっています。

さらにファインダでこの中を覗いてみると、[Music][Movies][Podcast]などiTunesの画面上で切り替えるカテゴリごとに詳細に分けられており、さらに音楽などでは「アーティスト」「アルバム」といった区分けで細分化されて、人の目で見ても簡単に区別ができるように整理されていることがわかります。また、アップルミュージックからダウンロードした楽曲も[Apple Music]フォルダに収納されます。

しかし、ここで気をつけたいのが「ファイルパスの変更はiTunes上からの操作しか反映しない」ということです。[iTunes Media]フォルダ内のデータをそのままファインダ上で名前を変更したり、違う場所に移動してしまうとiTunes上で再生できないトラブルが発生してしまいます。新しいMacにiTunesを移行した際に音楽が再生できなくなる症状が発生するのも多くはこれが原因で、ライブラリ内に記述された位置と同じ場所にファイルが存在する必要があります。

こういった人為的なミスを防ぐため、写真やiMovieといったほかのアップル製ソフトにおいて、ライブラリは「パッケージ形式」が採用されています。これは実体はフォルダですが、ファインダから操作する場合は1つのファイルとして振る舞うようになっており、ダブルクリックした場合には対応するソフトが起動するだけで中のファイル群に直接アクセスできないようになっています。

では、なぜiTunesがこのパッケージ形式を採用しないのでしょうか。その理由の1つはおそらく[iTunesに自動的に追加]フォルダの存在があります。iTunesは外部からファイルを読み込む場合、ライブラリにはコピーを追加するように設計されています。このため追加直後は必ず同一の内容を持つデータが重複し、不要な場合はユーザ自身で削除する必要があります。

しかし、ここにファイルを置いた場合にはiTunesがチェックを行い、その種類に応じて[iTunes Media]内の適切なフォルダへと(コピーではなく)「移動」しながらライブラリへの追加も行う「読み込み専用」という特殊な役割を持ちます。このフォルダにアクセスするケースを想定しているため、iTunesはパッケージ形式を採用できない事情があると考えられます。

iTunes環境設定からカスタマイズ

[iTunes Media]フォルダの場所、整理のルール、追加時にコピーするといったメディア管理のルールはiTunes環境設定の[詳細]タブで決められます。この設定は「iTunes Library.itl」に記録され、一般的な初期設定情報を持つ「com.apple.iTunes.plist」とは別に保存されているのも大きなポイントでしょう。

ファイルは自動で整理される

[iTunes Media]フォルダはカテゴリごとに区切られ、同一のアーティストやシリーズであればさらに細分化して整理・保存されています。このためiTunesはディレクトリを参照してライブラリを構築していると考えられがちですが、実際はライブラリの情報を元にフォルダが作られ、このスタイルで整頓されています。

高速化を支えるキャッシュ群

ソフトの動作を高速にするには、データベースの最適化と軽量化は欠かせません。ですが、同時にリッチなユーザ体験を提供するには、さまざまな付加データを提供する必要もあります。

そこでiTunesではプレイリスト情報や検索のためのメタ情報といった常時操作に必要なデータは「iTunes Library.itl」に保存し、それ以外に補助的に必要となるデータ群はその役割ごとに分割して都度利用する仕組みを採用しました

この設計思想を念頭に置いて[iTunes]フォルダを覗いてみると、「iTunes Library.itl」以外にもライブラリが活用していると思われるファイルが見つかります。たとえば「iTunes Library Extras.itdb」は、名称から考えても明らかにライブラリを補助する意図のあるものです。これはSQLiteで作られたデータベースになっており、内部にはCDDBから取得したデータなどを保存しておく役割を果たしています。

同様の傾向で名前が付けられて「iTunes Library Genius.itdb」ですが、これは文字どおりiTunesがジーニアス(Genius)を使ってシャッフル再生やプレイリストを構築するためのアルゴリズムに利用するモデル(学習データ)が蓄積され、定期的に更新されながら使われています。

もっともサイズが大きくなる補助データは[Album Artwork]でしょう。このiTunes上で表示されるアルバムアートワークは楽曲データの中に含まれている場合はそちらが使われますが、見つからない場合にはiTunesストア上の情報とマッチングさせて画像ファイルをこのフォルダに保存して使用しています。

これら3つのファイルが「iTunes Library.itl」と異なるのは、削除された場合には次回iTunesが起動された際に再作成することができるキャッシュ(一時保存)領域であり、あくまで操作時の補助的な役割にすぎません。このためタイムマシンを使った際には、「iTunes Library.itl」だけがバックアップの対象となっています。

また、長い間iTunesを使っていると「Previous iTunes Libraries」フォルダが作成されていることがあります。これはiTunesのバージョンが上がるタイミングで、フォーマットもアップデートされ「iTunes Library.itl」の大幅な書き換えが発生した場合に作られるもので、古いバージョンのライブラリがこの中にファイル名に日付が含まれた形式に直されてアーカイブ保存されています。

アートワーク画像は独自形式

iTunes Storeから提供を受けダウンロードされたアートワークは、[Album Artwork]フォルダ内に「.itc」という拡張子のデータで保存されます。この実体はPNGもしくはJPEGデータで、管理専用の付加情報が加えられてiTunes専用の画像データになっています。

過去のライブラリも利用価値アリ

[Previous iTunes Libraries]に収められているデータベースはライブラリ破損時にはスナップショット(バックアップ)として利用できるだけでなく、古いバージョンのiTunesと互換性があります。トラブルの際に助けとなる可能性もあるので、無闇に捨てずに取っておく価値は十分にあります。

ライブラリの理解は役に立つ

このようにiTunesは、「iTunes Library.itl」をコアにしながら、[iTunes Media]フォルダ内から必要なメディアデータを呼び出しながら再生コントロールを行なっています。一見複雑なように見えるファイル群も、構造を理解してしまえば「消してはいけないもの」と「再構築が容易なキャッシュ」を容易に見分けられます。これはデータ移行時のみならず、外部ストレージを利用した大規模なライブラリ構築などさまざまな局面で役立つ知識となるでしょう。