keynote書類の内部構造を見る
Documents in the Cloudが扱う文書には、「Document Storage」と「Key-Value Storage」(KVS)という2種類の型があることは前述したとおりだが、ローカルにキャッシュされているとなると、KVSがどのような形で存在するかを目視できるということになる。ここでは、プレゼンテーションソフト「Keynote」を例に、その構造を見てみたい。
まず、Finderでローカルのキャッシュ領域(~/Library/Mobile Documents/com~apple~Keynote/Documents)を見ると、一見では通常どおりのKeynote書類が一覧される。しかし、Finderの情報ウインドウで確認すると、独立したファイルとして書き出したKeynote書類(*.key)とはファイルサイズが異なることがわかる。
これは、キャッシュ領域上に表示されたiOSで作成したKeynote書類をよく見るとわかる。通常のファイルではなく、拡張子「.key-tef」のバンドル構造を持つ特殊な書類で、内部にはプレビュー画像のほかに「index.db」というファイルを確認できる。これは、軽量・高速で知られるSQLite 3のデータベースフォーマットだ。sqlite3コマンドでindex.dbの内容を見ると、「cullingState」や「dataStates」といったテーブルを確認できることからしても、このデータベースにKeynote書類の実体(KVSの集合)が格納されていることがわかる。
なお、OS X版Keynoteでこの書類に対し上書き保存を行うと、バンドル内部はXMLを用いる従来のフォーマットに変換されてしまう。これは、OS X版Keynoteのエンジン部分が完全なKVS対応ではなく、インポート機能が追加されただけ(iCloudへは従来型書類をアップロードしiOS版Keynoteではそれをコンバート)と推測できる。そうであれば、OS X版Keynoteで作成した書類をiOS版Keynoteで開くとき、多少の時間がかかることも理解できる。
Keynote書類のしくみはあくまで一例だが、PagesとNumbersの文書も同様の構造を持つことから、今後Documents in the Cloudに対応するアプリケーションの文書にも類推適用できると考えられる。そうなると、見た目は(単一構造の)ファイルだが実体はフォルダ(バンドル)、という書類は今後増加していくのだろう。