第3回 plist(プロパティリスト)とFoundation【前編】Undocumented Mac OS X(2/4 ページ)

» 2007年05月14日 09時03分 公開
[白山貴之,ITmedia]

plistの歴史

 そもそもplistは、NeXTSTEP*で使われていたNetInfo*や、デフォルトデータベース*といった機構のダンプ出力において、慣習的に使われていたデータの表現形式が基となっている。

 NeXTSTEPでは、文字列は「char *」、配列はC言語の配列と、C言語ベースのデータ構造が使われていた。OPENSTEP*に進化したときに、Foundationという、文字列や配列といった基本的なデータ構造をオブジェクト化したクラスライブラリが用意され、慣習的な表現形式の各要素とそれらのクラスが対応付けられた。この当時のplistはまだXMLではなく独自の書式である(リスト1)。この書式では、文字列、配列、ディクショナリ、そしてバイナリデータを表現できた。また、テキスト形式だけではなくバイナリ形式のplistも用意されていた。バイナリ形式にすることで可読性は落ちるが、アプリケーションの読み込みは速くなる。このため、内部的なデータに利用されることが多かったのだ。

{

    "キー1" = "値1";

    "キー2" = {

        "サブキー1" = "値2";

        };

    "キー3" = (

        "配列メンバー1",

        "配列メンバー2",

        "配列メンバー3"

    );

}


リスト1 NeXT形式(old-style ASCII)のplist

XML形式の採用

 NeXTソフトウェアがAppleに買収され、OPENSTEPをベースとしたMac OSの後継であるRhapsody*の開発に伴い、この古いplist書式に加えて当時流行だったXMLを利用したXML形式のplistが用意された(リスト2)。XML形式のplistは従来の記号に代わりXMLのタグで値を切り分けるため、サイズは増える代わりに数値や真偽値を表現できるようになった。このときバイナリ形式のplistはいったん廃止されている。

リスト2 リスト2 XML形式plistの例(リスト1を書き直したもの)

Mac OS X

 Rhapsodyのplistがそのまま受け継がれたのが、Mac OS Xのplistである。Mac OS Xでは古いNeXT形式のplistも使用できるが、新しいXML形式を使うことが推奨されている。

 また、Mac OS X 10.2 Jaguarから再びバイナリ形式のplistが用意された。これはNeXT時代のバイナリ形式とは構造が異なるが、目的としては同じく読み込みの高速化を狙ったものだ。XMLのパースは決して軽い処理ではないため、NeXTのことよりもバイナリ形式の重要性は増しているといえる(コラム1)

コラム1:文法チェックやフォーマット変換を行えるplist関連コマンド

 plistの文法チェックや変換を行うコマンドとしてはplutilが用意されており、文法チェックを行う場合は「-list」サブコマンドを指定する。

plutil -lint


 正常な場合は「OK」、そうでない場合は問題点がメッセージで指摘される(実行例A)。バイナリ形式plistをXMLに、あるいはXML形式plistをバイナリに直すには「-convert」サブコマンドを使用する(リストA)。「-o」オプションで出力ファイルを指定しない場合、plistのファイルそのものが変換後の形式に置き換えられてしまうため注意されたい。

plutil -lint list2.plist

list2.plist: OK

plutil -lint list2_wrong.plist

list2_wrong.plist:

XML parser error:

        Close tag on line 18 does not match open tag dict

Old-style plist parser error:

        Malformed data byte group at line 1; invalid hex


実行例A plutilコマンドの実行結果
  • バイナリ形式へ変換する場合

plutil -convert binary1 -o <出力ファイル名>

  • XML形式へ変換する場合

plutil -convert xml1 -o <出力ファイル名>


リストA 「-convert」サブコマンドの利用方法

plコマンド

 plist関連では、plutil以外にもplというコマンドが用意されている。これもXML形式plistをバイナリ形式に変換するものだが、変換後のバイナリは現在のMac OS Xでは利用できない、NeXTSTEP時代の古いバイナリ形式となる。plはそうした古いバイナリ形式をテキストに戻す後方互換性のために残されているコマンドであり、とくに使う必要はない。


このページで出てきた専門用語

NeXTSTEP

NeXTソフトウェアのリリースしていたOS。Mac OS Xの源流であるOPENSTEP for Machの基となった。

NetInfo

NISに代わる大規模ネットワークでの管理システムとしてNeXTに搭載されたディレクトリサービス。フラットな構造のNISに対し、NetInfoはデータベース自体も、そしてデータベース間の関係にも階層構造を持つ。現在のNetInfoは、Mac OS Xのマシンローカルのアカウント管理機構としてのみ使用されている。

デフォルトデータベース

各アプリケーションの設定を統一的に扱う機構。Windowsのレジストリと異なり、ユーザーごとに独立したデータベースに保管されるという特徴を持つ。

OPENSTEP

OPENSTEPは、NeXTソフトウェアがリリースしたNeXTSTEPの後継製品。BSD UNIXを含むMachカーネルを持つ完全なOSとしてのOPENSTEP for Mach、またSolaris、HP-UX、Windows NTなどの上で動作するOPENSTEP Enterpriseが存在した。

Rhapsody

NeXTソフトウェア買収後Appleが最初に開発を行った、Mac OS後継のプロジェクト名。結局、スティーブ・ジョブズが暫定CEOに就任、その後に発表されたMac OS XがMac OS後継となった。RhapsodyはMac OS X Server 1.xという名前で一部サーバ向けのOSとしてささやかにリリースされ、Mac OS XベースのMac OS X Server 10.0のリリースとともに終息した。実質的にOPENSTEP for MachをそのままMacintoshに移植したものであり、NeXTSTEPの血統を継ぐ最後のOSだった。


Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ