🔖

defaultsの歴史

2021/12/26に公開

macOSの設定を編集できるコマンド defaults の歴史について、調べたことをまとめました。
私も勉強中ですので、間違っている点や疑問があればぜひ教えて下さい。

年表

イベント
1985 Steve JobsがAppleを退職し、NeXT Computerを創業
1989 NeXTSTEP 1.0のリリース
1990-12-25 世界初のブラウザ world-wide-web が NeXT Computerで開発される
1993-05-21 GNUstepの前身の一つである、Collection Library for GNU Objective-Cのα版が公開される
1994 NeXT Computer と Sun Systemsが共同でOPENSTEPの仕様を公開する
1995 OPENSTEP仕様の公開を受け、同様の取り組みをしていた開発者が合流してGNUstepプロジェクトが発足する
1996 AppleがNeXT Computerを買収。Steve JobsもAppleに戻る
1997-08-31 後のOS X(macOS)である RhapsodyのDeveloper Releaseがリリースされる
2001-03-22 OS Xが販売開始される
2002 GNUstepがリリースされる

OS・フレームワークとコマンドの対応表

defaultsとは

そもそもdefaultsコマンドって何?という方は、以下のコマンドを実行してみて下さい。

defaults read com.apple.dock orientation
> bottom # bottom, right or left

Dock(アプリのアイコンが並んているバー)の位置が表示されないでしょうか?
このように、defaultsコマンドではmacOS上のアプリケーションのユーザー設定を表示・編集することができます(ユーザーだけでなく、マシン固有の設定も編集できます)

これらの設定の本体は通常 ~/Library/Preferences/com.apple.dock.plist にバイナリ形式で格納されており、defaultsはそれを編集するためのユーティリティというわけです。

NeXTSTEP時代

プログラミング以外の方法でUserDefaultsを編集するために、当時3種類のコマンドラインツールが提供されていました。NeXTのコンピュータ・OS・ソフトウェアを扱っていた雑誌 "NeXT WORLD"の寄稿から引用します。

In addition to the programmer's interface, NeXTstep provides three command line programs dread, dwrite, and dremove that give you access to the defaults system. To see all of your defaults, type:

-- <cite>Using NeXTstep's Defaults System by Ray Ryan</cite>

ちなみに、Internet Archiveから当時の誌面を読むことができます。

NeXTWORLD Vol. 2 No. 2 Summer 1992 : Free Download, Borrow, and Streaming : Internet Archive

OPENSTEP時代

Rhapsodyの開発者向けドキュメントによれば、当時からdefaultsコマンドは存在したようです。

Name: defaults
Description: Reads, writes, searches, and deletes user defaults. The defaults system records user preferences that persist when the application isn’t running. When users specify defaults in an application’s Preferences panel, NSUserDefaults methods are used to write the defaults.
Location: /usr/bin

-- <cite>DISCOVERING OPENSTEP: A Developer Tutorial</cite>

ちなみに Big Sur現在でもパスは変わっていません。

% which defaults
/usr/bin/defaults

GNUstepのドキュメントによれば、やはりNeXTSTEP時代のdread, dwrite, dremove の3つのコマンドの機能を併せ持つとのことです。

The 'defaults' command appeared in OpenStep and combined the capabilities of the earlier NeXTstep commands 'dread', 'dwrite', and 'dremove'.

-- <cite>defaults(1) — gnustep-base-runtime — Debian stretch — Debian Manpages</cite>

GNUstep

GNUstepはオープンソースなので、defaultsについてもソースを読むのが早いと思います。
GNUstep自体の歴史はGNUstep Historyがとても詳しかったです。

現在

Appleの開発者向けドキュメントに記載があります。

また、defaults以外にもPlistBuddyplutilといったユーティリティが追加されています。

ls /usr/libexec/PlistBuddy
ls /usr/bin/plutil

TIPS

設定可能な項目は、Dockのように一部のプロパティを公開しているアプリを除けば見つけられないものがほとんどでした。
人によって様々な探し方がありますが、以下が参考になると思います。

参考文献

GitHubで編集を提案

Discussion