プロパティリスト

プロパティリスト(property list)は、macOSのCocoaフレームワークや、NeXTSTEP、GNUstepといった環境で利用される、オブジェクトのシリアライズ(データ構造を変換し、保存・転送可能な形式にすること)を行うためのファイル形式です。拡張子`.plist`を持つことから、plistファイルとも呼ばれます。

プロパティリストの概要



プロパティリストは、`NSPropertyListSerialization`クラスによって解析されます。この形式が扱えるデータは、FoundationやCore Foundationのオブジェクトに限られます。プロパティリストの最上位は、配列(`NSArray`)または連想配列(`NSDictionary`)である必要があります。

主な用途としては、ユーザー設定の保存が挙げられます。これは、Windowsにおけるレジストリに似た役割を果たします。また、アプリケーションのバンドル情報(アプリの構成要素や設定情報など)を格納するためにも利用されます。以前のMac OSでは、リソースフォークという仕組みが同様の目的に使われていました。

表現形式



プロパティリストが表現するデータ自体は抽象的な概念であり、永続化のためのファイルフォーマットは固定されていません。NeXTSTEP時代には特定のフォーマットが使用されていましたが、その後GNUstepやmacOSで異なるフォーマットが採用されるようになりました。

NeXTSTEPのプロパティリスト


NeXTSTEPでは、プロパティリストは可読性を重視したフォーマットとして設計されました。人間が直接編集することも想定され、プログラミング言語のような構文を持つASCIIテキスト形式で記述されました。

  • - 文字列(`NSString`)は、`"This is a plist string"`のように表現されます。
  • - バイナリデータ(`NSData`)は、`< 54637374 696D67 >`のように16進数で表現されます。
  • - 配列は、`("one", "two", "three")`のように表現されます。
  • - 連想配列は、

{
"key" = "value";
...
}

のように表現されます。

ただし、この初期のプロパティリストには制約があり、`NSValue`(数値、真偽値など)のオブジェクトを直接表現できませんでした。

GNUstepのプロパティリスト


GNUstepはNeXTSTEPのフォーマットをベースにしつつ、いくつかの拡張を加えました。

  • - `NSValue`がサポートされ、`<INNN>`(NNNは数値)のように表現されるようになりました。
  • - `NSDate`(時刻)もサポートされ、`<DYYYY-MM-DD HH:MM:SS timezone>`のように表現されます。

GNUstepは、後述するmacOSのフォーマットも読み書きできます。

GNUstepに付属のツール`plget`を使うと、プロパティリスト内の階層化されたキーに対応する値を取得できます。例えば、

bash
$ cat com.example.app.plist | plget key
$ cat com.example.app.plist | plget key | plget key


のように利用します。

macOSのプロパティリスト


macOSはNeXTSTEPのフォーマットも扱うことができますが、Appleは新たに2つのフォーマットを開発しました。

Mac OS X 10.0では、NeXTSTEPのフォーマットは非推奨となり、Appleが定義したDTDを持つ新しいXMLフォーマットが導入されました。しかし、XML形式はファイルサイズが大きくなる傾向があったため、Mac OS X 10.2でバイナリフォーマットが新たに導入されました。Mac OS X 10.4以降では、バイナリフォーマットがデフォルトとなっています。

macOSでは、`plutil`というユーティリティを利用することで、プロパティリストの文法チェックや、異なるフォーマット間の変換が可能です。

macOSのXMLフォーマットでは、以下のようなタグが使用され、それぞれFoundationのクラスに対応します。ルート要素は``です。GNUstepのフォーマットとは多少の違いがあります。

`dict`要素の中身は、

xml

key
value



のように記述されます。

まとめ



プロパティリストは、macOSやその関連環境で広く利用されているデータ保存形式です。異なるフォーマットが存在しますが、それぞれに特徴があり、用途に応じて使い分けられます。ユーザー設定の保存からアプリケーションの設定情報まで、幅広い用途で活用されており、macOS環境において重要な役割を担っています。

参考情報



もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。