環境設定システム


環境設定【preference】とは、ユーザに彼らの作業環境をカスタマイズできるようにする、アプリケーションもしくはシステムの選択肢【options】です。

ほとんどのアプリケーションは、いくつかの形式のユーザ環境設定を読み取ります。たとえば、書類単位のアプリケーションは、デフォルトのフォント、自動保存の選択肢、ページ設定の情報についての環境設定を記録することができます。

けれども、環境設定はアプリケーションに限定されているわけではありません。あなたは、あなたの定義したいかなるフレームワークやライブラリからでも、ユーザ環境設定を含めて、環境設定情報を読み書きすることができます。

Mac OS X の環境設定システムは、セッションをまたいだユーザ設定の保存と復旧についての組み込み対応を搭載しています。

Carbon と Cocoa アプリケーションのどちらも、環境設定情報を読み書きするために Core Foundation の Preference Services を使用することができます。

また、Cocoa アプリケーションは、ユーザ環境設定を読むために NSUserDefaults クラスも使用できます。

重要:ユーザ環境設定について仮定できることとしては、これらは【アプリケーションの動作に】致命的なものではない、という点です。もしこれらが失われたら、アプリケーションは環境設定のデフォルトセットを作成しなおすことができるべきです。 あなたはアプリケーションの初期設定データを、環境設定として記録する必要はありません。 【環境設定のデフォルトセットに相当する】初期設定データ必須であり、アプリケーションパッケージの内部のプロパティリストに記録するべきです。

環境設定システムは、後であなたが環境設定の値を取得するために使用するキーを、環境設定の値と結び付けます。

ユーザ環境設定は、ユーザのログインID、アプリケーションID、そしてホスト(コンピュータ)名の組み合わせを元にした対象範囲【scope】を持っています。この仕組みは、あなたにさまざまなレベルで適用できる環境設定を作成することを可能にします。

たとえば、あなたは以下のエンティティのいずれかに適用できる、環境設定の値を保存することができます…

  • 現在のホスト上のあなたのアプリケーションの現在のユーザ
  • ローカルネットワークに接続した、特定のホスト上のあなたのアプリケーションのすべてのユーザ
  • ローカルネットワークに接続した、すべてのホスト上のあなたのアプリケーションの現在のユーザ(ユーザ環境設定のための通常の区分)
  • ローカルネットワークに接続した、すべてのホスト上のすべてのアプリケーションのすべてのユーザ

アプリケーションは、ユーザからとらえた情報を表す、これらの環境設定のみを記録すべきです。各ユーザごとにデフォルト環境設定の同じセットを記録することは、あなたのアプリケーションの環境設定を保守するためには効率のよくないやり方です。

環境設定は、環境設定情報において読むためにはパース【構文解析】される必要のある、プロパティリスト ファイルに記録されます。

環境設定を管理するための、より効率的な方法は、デフォルト環境設定のセットを内部的に記録し、さらにユーザがカスタマイズした環境設定を、デフォルトセットの上に適用することです。

環境設定はどのように記録されるか

環境設定システムは、環境設定データを適切なファイルシステムドメインの、Library/Preferences フォルダ内に配置されたファイルに記録します。

たとえば、もし環境設定が単一のユーザに適用されるのであれば、ファイルはユーザのホームディレクトリ内の、Library/Preferences フォルダに書き込まれます。もし環境設定がネットワーク上のすべてのユーザに適用されるのであれば、/Network/Library/Preferencesに行きます。

Library/Preferences の中の各ファイルの名前は、アプリケーションのバンドル識別子と、それに続く拡張子 .plist から構成されます。

たとえば、テキストエディット アプリケーションのバンドル識別子は com.apple.TextEdit なので、その環境設定ファイル名は com.apple.TextEdit.plist となります。

名前の衝突がないことを保障するために、バンドル識別子が Java パッケージ名と同じ形式―あなたの会社のユニークなドメイン名と、それに続くアプリケーションやライブラリ名―を取ることを、アップルは強く推奨します。

たとえば、Finder は com.apple.finder という識別子を使用し、Sherlock は com.apple.Sherlock を用います。

この仕組みは、名前が衝突する可能性を最小限にして、なおかつあなたの企業ドメインより下の、識別子の名前空間を管理する自由をあなたに残しています。

詳細は、プロパティリストのキー「CFBundleIdentifier」(24ページ)を参照してください。

もしアプリケーションが、適切なファイルシステムドメインの Library/Preference 以外の場所に環境設定を書き込もうと試みれば、問題が発生することは確実です。

一つには、環境設定 API 群はこの違いに対して設計されていないということがあります。

しかしより重要なのは、予想外の場所に記録された環境設定は、環境設定検索リストから除外されてしまうこと、そしてそのために他のアプリケーション、フレームワーク、システムサービスによって通知されることがないだろうという点です。

Mac OS X バージョン 10.3 およびそれ以前においては、環境設定は XML プロパティリスト 形式で保存されていました。Mac OS X バージョン 10.4 以降では、環境設定はバイナリ plist 形式で保存されます。

あなたは、ある形式からもう一方の形式へ、 plutil(1) 【コマンドライン】ツールを用いてファイルを変換することができます(たとえば、あなたが plist を XML 形式で調査することができるように)が、あなたはファイル形式に依存すべきではありません。

あなたは環境設定ファイルを手動で編集することを控えるべきです。正しくない情報の入力や、形式の乱れたデータは、後であなたのアプリケーションがそのファイルを読もうとしたときに問題を引き起こします。

あなたのアプリケーション内の環境設定ドメインから情報を引き出すための正しいやり方は、環境設定 API 群を通すことです。

環境設定のドメイン

あなたのアプリケーションが既存の環境設定の値を探すとき、環境設定システムは検索の範囲【scope】を限定するために、現在の環境設定のドメインを使用します。

同様に、あなたのアプリケーションが新規の環境設定を書き出すときも、その値は現在のドメインへの範囲が与えられます。

環境設定のドメインは、情報の三つの部分によって区別されます。ユーザID、アプリケーション識別子、そしてホスト名です。

ほとんどの場合、あなたは現在のユーザとアプリケーションのための環境設定を指定することになるでしょう。ですが、あなたはアプリケーションレベルの環境設定を記録するという決定を下すことも可能です。

これを行うためには、あなたが使用したいドメインを正確に指定するための、Core Foundation Preferences Utilities の関数群を使用することになります。

これらのルーチンをどのように用いるかの情報については、Preferences Programming Topics for Core Foundation を参照してください。

表 1 は環境設定のドメインのすべてを示しています。環境設定を取得するためのルーチンは、要求されたキーが見つかるまで、ここに示した順番で環境設定ドメインを通して検索します。従って、もし環境設定がユーザ固有、およびアプリケーション固有のドメインで見つからなければ、ルーチンはより広域なドメインで情報を検索します。

表 1 検索順に並べた環境設定のドメイン

検索順 ユーザの対象範囲 アプリケーションの対象範囲 ホストの対象範囲
1 現在のユーザ 現在のアプリケーション 現在のホスト
2 現在のユーザ 現在のアプリケーション あらゆるホスト
3 現在のユーザ あらゆるアプリケーション 現在のホスト
4 現在のユーザ あらゆるアプリケーション あらゆるホスト
5 あらゆるユーザ 現在のアプリケーション 現在のホスト
6 あらゆるユーザ 現在のアプリケーション あらゆるホスト
7 あらゆるユーザ あらゆるアプリケーション 現在のホスト
8 あらゆるユーザ あらゆるアプリケーション あらゆるホスト

default ユーティリティ

Mac OS X の環境設定システムは、アプリケーションドメインやその他のドメインから、(ユーザデフォルトとしても知られている)環境設定を読み、書き、削除するための、 defaults という名前のコマンドラインユーティリティを搭載しています。

defaults ユーティリティは、アプリケーションのデバッグ作業のために、計り知れないほどの助けとなります。

環境設定の多くは、アプリケーションの環境設定ダイアログ(または【キーボードショートカット等の】同義操作)を通じてアクセスされることができますが、ウインドウの位置といった環境設定は常に有効になっています。こうした環境設定については、あなたは defaults ユーティリティを用いることで、これらを見ることができます。

ユーティリティを実行するには、ターミナル アプリケーションを起動し、BSD シェルにおいて、defaults に加えて好きなコマンドオプションを入力します。

構文と引数の簡略な説明を見るには、defaults コマンドを単体で実行します。より完全な説明を見るには、defaults の man page を読むか、コマンドを usage 引数と共に実行します。

$ defaults usage

対象とするアプリケーションが実行中の間は、defaults ツールを用いて値を変更するのは避けたほうがよいでしょう。もしそのような変更を行った場合、アプリケーションがその変更を知ることは難しく、よりありえそうな事態は、あなたが指定した値を新しい値で上書きすることでしょう。