【Mac】defaultsコマンドについて少し掘り下げてみる

defaultsコマンドといえば、Macの隠し設定をいじることができる、なんとなくハッカーっぽいツールです。

例えば、Finderで隠しファイルを表示したいなら、ターミナルを開き、以下の通りに打ち込みます。


defaults write com.apple.finder AppleShowAllFiles -boolean true [ ]

killall Finder [ ]


逆に、隠しファイルを非表示にするには、以下を入力します。


defaults write com.apple.finder AppleShowAllFiles -boolean false [ ]

killall Finder [ ]


スクリーンショット 2016-05-20 22.59.20-e

defaultsコマンドを少し掘り下げる

先ほどコマンドの、1行目の意味を考えてみましょう。

defaults write com.apple.finder AppleShowAllFiles -boolean false

このコマンドは以下の様に分解できます。

defaults write com.apple.finder AppleShowAllFiles -boolean false

これは以下の意味に置き換えることができます。

defaults write ドメイン キー 設定値

見ての通りですが、ドメイン + キーに、書き込みたい設定値を適用する、という意味です。

今回は、

  • ドメイン com.apple.finder
  • キー AppleShowAllFiles
  • 設定値 -boolean false(真偽値・偽)

となるわけなので、「Finderの設定項目 『AppleShowAllFiles』 にfalseと設定する」という意味になります。

defaultsコマンドのmanページを読む

上記の情報をどうやって手に入れるかというと、manページというマニュアルに書かれています。

defaultsコマンドのmanページを見るには、ターミナルに以下のコマンドを打ち込みます。

man defaults

スクリーンショット 2016-05-20 21.22.57

このページでは、以下のキー操作が必要になります。

  • [ J ]: 下に1行進む
  • [ K ]: 上に1行進む
  • [ D ]: 下に半ページ分スクロールする
  • [ U ]: 上に半ページ分スクロールする
  • [ Q ]: manページを終了する

[ D ]はDown、[ U ]はUp、[ Q ]はQuitと考えると覚えやすいです。

下の方にスクロールしていくと、writeについての記述があります。

スクリーンショット 2016-05-20 21.30.57

write [domain] [key] ['value']

  Writes value as the value for key in domain.
  (ドメインに属するキーに、値を書き込む)

英語の知識がないと読むのが辛いですが、意外と分かりやすく書かれています。

ドメイン一覧を表示する

上の説明によると、ドメインとキーが分かれば、設定項目がわかるということになりますよね。

ではまずドメイン一覧を表示してみましょう。やり方は先ほどのmanページに書かれています。

スクリーンショット 2016-05-20 21.52.56

domains

  Prints the names of all domains in the user's defaults system.
  (ユーザのデフォルト環境に存在する、ドメイン一覧を表示します)

では早速入力してみます。

$ defaults domains

com.adobe.AdobeRdrCEFHelper, com.adobe.Reader, com.amazon.SendToKindle, com.aone.keka, com.apple.ATS, com.apple.ActivityMonitor, com.apple.AddressBook, com.apple.AppleMultitouchMouse, com.apple.AppleMultitouchTrackpad, com.apple.Automator, com.apple.BezelServices, com.apple.BluetoothFileExchange, com.apple.CalendarAgent, com.apple.CalendarAgent.CalNCService, com.apple.CallHistorySyncHelper,

(以下略)

スクリーンショット 2016-05-20 21.56.14-e

これでは見づらいので、少し加工して見やすくします。

$ defaults domains | tr ',' '\n' | less

--(ページが切り替わる)--

 com.adobe.AdobeRdrCEFHelper
 com.adobe.Reader
 com.amazon.SendToKindle
 com.aone.keka
 com.apple.ATS
 com.apple.ActivityMonitor
 com.apple.AddressBook
 com.apple.AppleMultitouchMouse
 com.apple.AppleMultitouchTrackpad
 com.apple.Automator

: (← ユーザのキー入力待ち)

スクリーンショット 2016-05-20 22.56.16

スクリーンショット 2016-05-20 22.54.29

キー操作は先程書いた通りです。[ Q ]を押すと終了します。

trlessはmanページを見てもらうとして、ドメインは概ね、各ソフトウェアに対応していることがわかります。

キーの一覧を表示する

では最後に、Finderの持つキー(設定項目)の一覧を表示してみます。

キーの表示方法は、以下のとおりです。

$ man defaults

  --(中略)--

  read [domain]

    Prints all of the user's defaults for domain to standard output.
    (指定したドメイン上の、ユーザの既定値を全て表示します)

  --(中略)--

$ defaults read com.apple.Finder

{
    AppleShowAllFiles = TRUE;
    ComputerViewSettings =     {
        CustomViewStyleVersion = 1;
        WindowState =         {
            ContainerShowSidebar = 1;
            PreviewPaneVisibility = 0;
            ShowPathbar = 1;
            ShowSidebar = 1;
            ShowStatusBar = 1;
            ShowTabView = 0;
            ShowToolbar = 1;
            SidebarWidth = 129;
            WindowBounds = "{{497, 288}, {770, 436}}";
        };
    };
    CopyProgressWindowLocation = "{864, 509}";
    DesktopViewSettings =     {
        IconViewSettings =         {
            arrangeBy = none;
            backgroundColorBlue = 1;
            backgroundColorGreen = 1;
            backgroundColorRed = 1;
            backgroundType = 0;
            gridOffsetX = 0;
            gridOffsetY = 0;
            gridSpacing = 54;
            iconSize = 64;
            labelOnBottom = 1;
            showIconPreview = 1;

  (後略)

一番先頭に、最初に説明した隠しファイルを表示する項目があり、それがTRUE(真)に設定されているのがわかります。

段々とdefaultsコマンドについて分かってきて、楽しくなってきましたね。(え、ならない?そうですか…)

以上の過程から、Macにおけるdefaultsコマンドは、Windowsのレジストリに相当する機能だということが分かりますね。

今回の掘り下げはこのくらいにしておきましょう。

まとめ: manページを読むことが最初の一歩

今回は早足でしたが、こうしてmanページを一つ一つ読み解いていくと、必要なことは全て書かれていることがわかってもらえたと思います。

今回は触れませんでしたが、manページでは、検索([ / ]キー)を使うと更に便利です。

また、UNIXはパイプ|)やリダイレクト>)という概念を使い、表示方法や結果を柔軟にカスタマイズすることができます。

途中で少し触れましたが、

$ defaults domains | tr ',' '\n' | less

 com.adobe.AdobeRdrCEFHelper
 com.adobe.Reader
 com.amazon.SendToKindle
 com.aone.keka
 com.apple.ATS
 ...

のように、表示結果を簡単に加工できるのも、UNIXが愛される理由の一つですね。