Skip to content
Back to Blog
informational

PLISTとは?Appleのプロパティリスト形式を解説

2026-05-17 9 min read

要するに:アプリデータの構造化コンテナです

PLISTファイル(Property Listの略称)は、Appleのエコシステム全体(macOS、iOS、iPadOS、watchOS、tvOS)で設定、環境設定、シリアライズ化されたデータを保存するための、Appleが最もよく使うフォーマットです。そのルーツは1980年代後半のNeXTSTEPにまで遡り、アプリがユーザーの選択を記憶する方法、システムサービスが設定を読み込む方法、そしてXcodeプロジェクトが何をビルドすべきかを記述する方法の根幹をなしています。 皆さんのMacには、意識しているかどうかに関わらず、今この瞬間も何百ものPLISTファイルが存在しています。Terminalを開いて`ls ~/Library/Preferences/`を実行してみてください。`com.apple.finder.plist`、`com.apple.dock.plist`といったファイルがずらりと並んでいるはずです。これは、皆さんがこれまでに使ったほぼすべてのアプリケーションに一つずつ対応しています。これらのシンプルなファイルが、Finderにサイドバーの幅を伝え、Dockにアイコンの場所を教え、Safariには前回終了時に開いていたタブを思い出させているのです。 このフォーマットがサポートするデータ型は、文字列、整数、浮動小数点数、ブール値、日付、バイナリデータ(Data)、配列、辞書という、ごく限られた固定セットです。これらがすべてです。カスタム型も、継承も、スキーマもありません。これは見落としではなく、意図的な設計選択なのです。Appleは、OSが最小限のオーバーヘッドで読み書きでき、手動で編集してもすぐにアプリの状態を破壊しないほどシンプルなフォーマットを必要としていました。

XML、バイナリ、JSON:同じフォーマットでも3つの顔

PLISTフォーマットは一つですが、3つの異なるエンコーディングが存在します。これらを混同すると、よく混乱の原因になります。 まず一つ目は、人間が読めるバージョンの**XML PLIST**です。テキストエディタで開いてみれば、`http://www.apple.com/DTDs/PropertyList-1.0.dtd`を指すDOCTYPE宣言に続き、`<dict>`、`<key>`、`<string>`、`<integer>`、`<true/>`といったネストされたタグがずらりと並んでいるのがわかるでしょう。Xcodeはプロジェクトファイル(`project.pbxproj`はその派生形です)にこれを使用しており、設定をバックアップしたり検査したりする際に使うべきなのはこの形式です。明らかな欠点は冗長性です。20個のキーを持つシンプルな辞書でも、簡単に150行にも膨れ上がってしまいます。 パフォーマンスのため、macOSはファイルをディスクに書き込む際、ほとんどの場合**バイナリPLIST**(bplist)を使用します。アプリが環境設定を保存するとき、通常はマジックバイト`bplist00`で始まるファイルを書き込んでいます。この形式は、XML版よりもはるかにコンパクトで、解析速度も格段に速いです。150行あったXMLファイルが、バイナリ形式ではわずか400バイトにまで縮小することもあります。その代わり、バイナリPLISTは標準のテキストエディタでは読めません。文字化けしたようにしか見えないでしょう。 最後に、macOS 10.7以降でサポートされている新しいオプション、**JSON PLIST**があります。これは標準のJSON構文を使用しますが、やはりPLISTのコアデータ型に制約されます。これは少し変わった存在です。JSONは元々、整数と浮動小数点数を区別せず、専用の日付型も持たないため、いくつかの微妙な制限が生じます。Apple自身のツールがJSON PLISTを生成することは稀で、主にサードパーティのビルドツールやCIパイプラインが設定ファイルを生成する際に登場します。 幸いなことに、Appleに組み込まれているコマンドラインツール`plutil`を使えば、これら3つの形式間を簡単に変換できます。`plutil -convert xml1 com.apple.dock.plist -o dock_readable.plist`のようなコマンドを使えば、元のバイナリファイルを変更することなく、Dockの環境設定を人間が読める形式でコピーできます。

PLISTファイルはどこにある?何が制御されている?

PLISTファイルがどこにあるかを知ることは、問題のあるアプリのトラブルシューティングや、新しいマシンへの設定移行を行う上で、非常に重要です。それらはいくつかの予測可能な場所に存在します。 個人のアプリケーション設定は`~/Library/Preferences/`に保存されます。ここには、カスタムのDockレイアウト、Terminalの配色、Xcodeのキーバインディングなど、特定のユーザーアカウントに紐付けられた設定がすべて格納されています。ファイル名は`com.apple.Terminal.plist`や`com.googlecode.iterm2.plist`のように、逆引きDNS命名規則に従っています。対照的に、Mac上のすべてのユーザーに適用される設定は`/Library/Preferences/`にあります。これらはネットワーク設定やタイムゾーンなど、システム全体の動作を制御し、通常、変更には管理者権限が必要です。 PLISTは環境設定を保存するだけでなく、macOSの自動化システムも動かしています。`/Library/LaunchAgents/`、`/Library/LaunchDaemons/`、そしてユーザー固有の`~/Library/`内のファイルは、バックグラウンドサービスやスケジュールされたタスクを定義するものです。LaunchDaemonのPLISTは、`launchctl`サービスに対し、どの実行可能ファイルを起動するか、どの引数を渡すか、クラッシュ時に再起動するかどうか、そしてそのスケジュールを指示します。 おそらく最も重要なのは、すべての`.app`パッケージ内に隠されている`Info.plist`ファイルでしょう。Finderで任意のアプリを右クリックし、「パッケージの内容を表示」を選択して`Contents/Info.plist`に進むと、それを見ることができます。このファイルはアプリの公式な身分証明書であり、バンドル識別子、最小OSバージョン、必要なハードウェア機能、URLスキーム、そして(カメラやマイクへのアクセスなど)必要な権限を宣言しています。iOSでは、App StoreとOS自体が、アプリが特定のデバイスで実行可能かどうかを判断するために`Info.plist`を使用します。 重要な警告です。`~/Library/Preferences/`内のファイルを編集する予定がある場合は、必ずまず対応するアプリを終了させてください。アプリの実行中にファイルを読み取るのは問題ありませんが、変更を書き込むと、アプリが次回状態を保存するときにそれらを上書きしてしまう可能性が高いです。アプリを終了し、編集を加えてから、再起動してください。

PLISTファイルの読み取りと編集:実用的な選択肢

Appleは、洗練されたグラフィカルインターフェースから強力なコマンドラインユーティリティまで、PLISTファイルを読み書きするための完全なツールキットを提供しています。 ほとんどの開発者にとって、**Xcodeに組み込まれているPLISTエディタ**が最適な出発点となるでしょう。これは、PLISTファイルを構造化されたツリービューで開き、型を認識した編集機能を提供します。ブール値にはチェックボックス、日付値には日付ピッカー、そしてきれいに展開可能な配列や辞書が利用できます。生のXMLに触れることなく、キーの追加、削除、並べ替えが可能です。これは`Info.plist`やエンタイトルメントファイルを編集するための、標準的かつ推奨されるワークフローです。 スクリプトや自動化には、**`plutil`コマンドラインツール**が不可欠です。macOSに同梱されており、検証、変換、キーレベルの編集において非常に強力なツールです。`plutil -lint myfile.plist`は構文エラーを素早くチェックし、`plutil -replace NSHighResolutionCapable -bool YES MyApp.app/Contents/Info.plist`のようなコマンドを使えば、エディタを開かずに単一のキーを設定できます。シェルスクリプトやCI/CDパイプラインには必須のツールです。 ユーザーの環境設定を変更したい場合は、**`defaults`コマンド**が適切なツールです。`defaults read com.apple.finder ShowPathbar`で現在の設定を読み取ったり、`defaults write com.apple.finder ShowPathbar -bool TRUE`で変更したりできます。これこそ、多くのmacOSの「パワーユーザー」向けのカスタマイズが、シンプルな`defaults write`のワンライナーコマンドとして共有されている理由です。 時には、より強力な機能が必要になることもあります。PlistEdit Pro(2025年現在、Mac App Storeで約1,800円)のような**サードパーティ製エディタ**は、Xcodeにない機能、例えばサイドバイサイド比較、変換なしでの直接バイナリPLIST編集、バッチ操作などを追加します。もしPLISTと日々格闘しているなら、専用ツールは賢い投資となるでしょう。 では、シンプルな**テキストエディタ**はどうでしょうか?XML PLISTには完璧に機能しますが、バイナリPLISTを破壊してしまいます。VS CodeやBBEditでバイナリファイルを開く場合は、まず`plutil -convert xml1`でXMLに変換する必要があります。編集後、システムが使用できるように`plutil -convert binary1`で元に戻してください。

PLISTファイルの変換:CocoConvertでできること、できないこと

CocoConvertは、ウェブ上で人々が直面する最も一般的なPLIST変換シナリオ、すなわちXML PLISTからJSONへの変換、JSONからXML PLISTへの変換、そして開発者ツールを必要とせずにバイナリPLISTファイルを読み取り可能なXMLにデコードすることを処理するために作られています。 XMLからJSONへの変換では、CocoConvertはPLISTのデータ型をJSONの同等なものにマッピングします。文字列、整数、配列、辞書はきれいに変換されます。ブール値はJSONの`true`と`false`になります。日付は標準のISO 8601文字列(例:`2024-11-03T14:22:00Z`)にシリアライズされます。`<data>`要素からのバイナリデータはすべて出力でbase64エンコードされます。これにより内容は完全に保持されますが、JSON内のその特定のフィールドは人間が読める形式ではなくなります。 バイナリからXMLへの変換機能は特に便利です。もしサードパーティ製のツールを使ってiPhoneから環境設定のバックアップをエクスポートしたことがあるなら、CocoConvertはその`bplist`ファイルを解析し、読み取り可能なXML PLISTを生成できるため、Xcodeをマシンにインストールすることなくその内容を検査できます。 CocoConvertができないことについても明確にしておく必要があります。それは、PLISTファイルをバイナリ形式に戻すことはできないということです。バイナリPLISTの生成には、正確なバイトレベルのオフセットテーブルを構築する必要があり、これはAppleのネイティブライブラリにとっては簡単なタスクですが、ウェブサービスで正しく実装するのは非常に困難です。もし変更したバイナリPLISTをデバイスに書き戻す必要がある場合(例えば、編集したiPhoneの環境設定を復元するためなど)、Mac上で`plutil`を使用するか、PlistEdit Proのようなネイティブエディタを使用する必要があります。macOSはバイナリファイルが期待される場所でXMLファイルを読み取れることが多いですが、一部のアプリは厳格で、XMLバージョンを拒否または無視することがあります。 CocoConvertは構造を検証しますが、セマンティクスは検証しません。不正なバンドル識別子や無効なOSバージョンを持つPLISTでも、ファイルフォーマットの観点からは有効であるため、問題なく変換されます。これらはアプリケーションレベルの懸念事項であり、フォーマットコンバータでは診断できません。

よくあるPLISTの問題と診断方法

PLISTの破損は稀ですが、macOSのトラブルシューティングにおいて、非常にイライラさせられるシナリオの一つです。アプリが起動しない、再起動するたびに環境設定がリセットされる、システムサービスがサイレントに失敗するといった症状は、特定のファイルを直接指し示すことはめったにありません。 最も頻繁な原因は、**不適切な書き込みによる破損**です。アプリが設定を保存している最中にmacOSがクラッシュしたり、電源が失われたりすると、ディスク上のPLISTが途中で切れてしまったり、文字化けしたりすることがあります。最初の診断ステップは、`plutil -lint ~/Library/Preferences/com.example.app.plist`を実行することです。正常なファイルは`OK`を返し、破損したファイルは通常、役立つ行番号やバイトオフセットとともに解析エラーを出します。 次に多いのは**パーミッションの問題**です。ユーザーの`~/Library/Preferences/`ディレクトリにあるPLISTファイルが、何らかの理由で`root`によって所有されている場合、アプリは起動するたびにデフォルト設定にサイレントに戻ってしまいます。`ls -l ~/Library/Preferences/com.example.app.plist`で所有権を確認してください。所有者は`root`ではなく、皆さんのユーザー名である必要があります。`sudo chown $(whoami) ~/Library/Preferences/com.example.app.plist`で修正できます。 さらに微妙な問題として、**キャッシュされた環境設定**があります。macOSは速度向上のため、バックグラウンドデーモン`cfprefsd`を使用して環境設定値をキャッシュしています。これは、ディスク上のPLISTファイルを直接編集しても、実行中のアプリが古いキャッシュされたバージョンを読み取り続ける可能性があることを意味します。もし`defaults write`での変更が反映されない場合、ほぼ間違いなくこれが原因です。`killall cfprefsd`(自動的に再起動します)でキャッシュを強制的にフラッシュするか、単にログアウトして再度ログインしてください。 Xcodeのビルド失敗は、しばしば不正な`Info.plist`に起因します。ビルドは「データが正しい形式ではないため、読み取れませんでした」といった漠然としたエラーで失敗しますが、これはXcodeが「ファイルの解析に失敗した」と言っているだけのことです。他のことをする前に、XML内の`<<<<<<<`のようなマージ競合マーカーがないか確認するか、単にファイルに対して`plutil -lint`を実行してください。 自分で作成したものでないPLIST(デバイスのバックアップ、GitHubリポジトリ、同僚から受け取ったものなど)については、まず`plutil -lint`を実行してください。たった3秒で、多くの混乱を避けることができます。

より広範なApple開発ワークフローにおけるPLIST

単に環境設定を保存するだけでなく、PLISTファイルはAppleの開発ツールチェーンにおいて、重要なインフラとして機能しており、その重要性は何か問題が発生したときに初めて明らかになることが多いです。 アプリのコード署名は、エンタイトルメントPLISTにかかっています。これは、アプリがiCloud、プッシュ通知、App Groups、キーチェーン共有など、どの特別な機能を正確に使用することを許可されているかを宣言するファイルです。このファイルはビルド中にアプリのコード署名に直接埋め込まれます。エンタイトルメントPLISTがプロビジョニングプロファイルと一致しない場合、アプリはデバイスにインストールされません。Appleの`codesign`ツールは、このファイルを直接読み取って検証します。 Xcodeのビルドシステム自体もPLISTに大きく依存しています。`.xcodeproj/xcshareddata/xcschemes/`内にある`*.xcscheme`ファイルは、どのターゲットをビルドするか、起動時にどの引数を渡すか、どの環境変数を設定するかを記述するPLISTです。これらは単なる構造化されたXMLであるため、バージョン管理にコミットしても安全であり、ブランチ間の差分比較も容易です。 App Storeへの提出メタデータさえもPLISTによって管理されています。Xcode 15で導入され、2024年5月以降のほとんどのアプリ提出に必須となるプライバシーマニフェスト(`PrivacyInfo.xcprivacy`)もPLISTファイルです。これは、アプリがフィンガープリンティングに利用される可能性のあるどのAPIを使用しているか、そしてその理由を宣言するものです。このファイルに誤りがあると、ビルドエラーにはなりませんが、App Storeのレビューで却下され、デバッグがはるかに面倒になります。 Appleのエコシステムと連携するクロスプラットフォームツール(CIシステム、MDMソリューション、バックアップユーティリティなど)を構築する人にとって、PLISTフォーマットの深い理解は避けられません。フォーマット仕様はAppleの`CFPropertyList`リファレンスに文書化されていますが、バイナリ形式も徹底的にリバースエンジニアリングされています。Python、Ruby、Go、Rust向けに優れたオープンソースパーサーが存在します。Pythonの標準ライブラリにある`plistlib`モジュール(3.4以降)は、デバイスのバックアップやXcodeプロジェクトファイルを処理する必要がある本番スクリプトにとって特に信頼できます。