先日のMac OS X Hintsブログで、AppleがiTunes 8から削除したいくつかの機能をターミナルを使って操作する方法を説明しました。例えば、iTunes Storeのリンク矢印のオン/オフ切り替え機能などです。これらの「隠れた」設定を操作するターミナルコマンドは比較的シンプルですが、どこにもドキュメントがないため、「一体どうやって見つけるんですか?」とよく聞かれます。その答えは、オズの魔法使い(「カーテンの向こうの男には注意を払うな」)と同じように、魔法のように見えるものも、やり方さえ分かれば実はとても簡単なものになるということです。
アプリケーション内の隠れた設定を探すには、いくつか前提条件があります。理想的には、別のシステムが必要です。FireWireドライブやパーティションにインストールされたOS Xのバージョンでも、全く別のMacでも、それはあなた次第です。これは必ずしも必須ではありませんが、実験するには間違いなく最も安全な方法です。なお、私は設定をいじることでアプリケーションに永久的な障害を起こしたことはありません。最悪の場合、設定ファイルを削除せざるを得ませんでした。
また、「すべて検索」機能(指定した検索文字列に一致するすべてのテキストを1つのウィンドウに表示できる機能)に対応したテキストエディタも必要です。SmultronやTextWranglerといったフリーウェアエディタだけでなく、数多くの有料エディタにもこの機能が搭載されています。ターミナルも必要ですが、それほど複雑な使い方は不要です。最後に、隠された設定を探し出す冒険心も必要です。
この冒険に出発する際は、潜在的に危険である(ただし、「テスト」段階のみ)ことを念頭に置き、自己責任で進めるようにしてください。プロセスについては私がガイドしますが、マシンやアプリケーションに発生する可能性のあるすべての責任は完全にユーザー自身にあります。
すべての前提条件を満たし、それに伴うリスクを理解しているという前提で、特定のプログラムの隠し設定を見つけてテストする方法を説明します。ここではiTunes 8を例に挙げますが、基本的な方法はほぼすべてのOS Xプログラムに適用できるため、他のプログラムでも簡単に使用できます。(以下の手順は長くなりますが、それは主に各ステップを詳しく説明しようとしているためです。実際には見た目ほど難しくはありません。)
データを取得する

隠し設定についてまず理解すべきことは、それが機能するにはプログラムの実際のコード内に記述されている必要があるということです。そこで、隠し設定を探すために、特定のプログラムのコード内にある実際のテキストをすべて探し出し、そのテキストを掘り下げて手がかりを探していきます。しかし、iTunesアプリケーション(アプリケーションバンドルではなく、実際のプログラムファイル。下記参照)をTextWranglerで開こうとすると、右の画面のように意味不明な文字列しか表示されません。これは、プログラムがバイナリデータとして保存されており、バイナリデータはテキストエディタで開くと適切に処理されないためです。
ただし、という名前の Unix コマンドがあり、stringsこれを使用すると、バイナリ ファイルから実際のテキストをすべて取得できます。そのため、隠し設定を探す最初のステップは、プログラムのテキスト文字列をファイルにダンプすることです。そのためには、実際のプログラム コードを見つける必要があります。ターミナルを開き、と入力してcd /Applications/iTunes.app/Contents/MacOS、Return キーを押します。これで、作業ディレクトリが iTunes 8 バイナリの場所に設定されます。このパスはほとんどすべての OS X プログラムに当てはまります。つまり、バイナリは、アプリケーション バンドル内の Contents フォルダ内の MacOS フォルダにあります。ここに何があるかを確認するには、と入力してls、Return キーを押します。ほとんどの場合、1 つのファイル (この場合は名前付き) のみが表示されiTunes、このファイルがプログラムの実際のバイナリ コードです。
ここで、stringsバイナリ内のテキストを検索し、デスクトップ上のファイルにダンプします。以下のコマンドを入力し、Returnキーを押します。
文字列 - iTunes >~/Desktop/itunes_strings.txt
このコマンドには一つだけ奇妙な点があります。直後のハイフンは、stringsコマンドがプログラムのすべてのバイトからテキスト文字列を検索するようにするために必要です。これを省略すると、出力ファイルに有用な情報が得られません。ハイフンの後には、iTunes実行したいプログラムの名前( )を入力します。その後、大なり記号で始まるセクションは、ターミナルにこのコマンドの出力をデスクトップ上のstrings指定されたファイルに送るように指示します。itunes_strings.txt
マシンの速度とプログラムのサイズによっては、ターミナルにコマンドプロンプトが表示されるまで数秒かかる場合があります。コマンドプロンプトが表示されたら、コマンドの実行が完了し、ファイルが次のステップで使用できる状態になったことを意味します。
データを掘り下げる
ここから先のタスクの難易度は、あなたが探しているターゲットについてどれだけ知っているかによって決まります。探している隠れた設定についてより詳しく知っているほど、より効果的です。最も難しい例として、あなたが真新しいプログラムを見ていて、開発者がGUIには組み込んでいない設定をコード内に隠しているのではないかと疑っているとしましょう。もしそうなら、あなたは途方もない課題に直面することになります。何を探しているのか正確に分かっていないため、すべてを調べなければならないからです。
お好みのテキストエディタで、stringsコマンドを使って作成したテキストファイルを開き、(うーん)とにかくスクロールして、面白そうな単語やフレーズを探してみてください。具体的にはどんな単語やフレーズでしょうか?残念ながら、この質問に答えるのはほぼ不可能です。プログラムによって大きく異なるからです。とはいえ、一般的には、ハイフンでつながれたフレーズとInterWordCappedStringsに注目してください。もし(名前だけを見て)面白そうなものを見つけたら、コピーして新しいドキュメントに貼り付け、さらに詳しく調べてみましょう。
ファイル全体を確認したら、問題のプログラムを実行し、メモした単語に関連する設定項目がないか確認してください。例えば、あるアプリのテキストを閲覧中に「EnableTranslucentWindow」という文字列を見つけたとします。半透明のウィンドウに関連する設定項目が見つからない場合は、隠れた設定項目を見つけた可能性があります。発見した項目をテストする方法については、「テスト」セクションをご覧ください。
こういう掘り下げ作業は、面倒で大して報われないことが多いので、一番苦手です。しかし、本当に何も知らない隠れた設定を見つけるには、これが唯一の方法です。例えば、Mac OS X のヒントリーダーがno-glassFinder のテキスト文字列の中にある文字列を見つけました。この文字列は、この記事で説明されているように、Leopard の画面下部にある 2D ドックを解除するための鍵であることが判明しました。(上級者向け:このプログラムの以前のバージョンをお持ちの場合は、 を使ってdiff2つのバージョンのテキスト文字列を比較できます。これにより、作業負荷がかなり軽減されます。)
最も簡単な例として、最近のiTunes 8の例を挙げてみましょう。このケースでは、iTunes 7に存在していた設定項目がありました。iTunes 8のテキスト文字列を詳しく調べる際に、これらの失われた設定項目からキーワードを使うことで、検索を大幅に容易にすることができます。例えば、私が個人的に苦手としているiTunes Storeの矢印リンクについて考えてみましょう。iTunes 7では、「iTunes Storeへのリンクを表示」という設定項目でリンクのオン/オフを切り替えていました。そこで、TextWranglerを使って作成したiTunesテキストファイルを開き、検索ダイアログ(Command-F)を開いて、隠れた設定項目に含まれていると思われる単語を検索しました。
最初は「検索」ボックスにリンクを入力しました。「検索」をクリックする代わりに(すべての一致項目をページングするには「再検索」を何度も使用する必要があります)、代わりに「すべて検索」をクリックしました(他のエディターではボタンのラベルが異なる可能性があります)。「すべて検索」は、検索語に一致するすべての項目を1つのウィンドウに表示するため、リストをざっと見て興味深いものを探すのがはるかに簡単になります。リストを半分ほどスクロールしたところで、目に留まるものを見つけました。

単語を読んだだけでも、show-store-arrow-linksまさに探していたものだと感じました。さらに素晴らしいのは、ウィンドウの下半分に表示される表示です。選択された一致がファイル全体の文脈の中で表示されます。一致のすぐ周囲には、他にも便利そうな用語がいくつか表示されており、それぞれがiTunes 8で消えてしまった設定に対応しています。最初のスピンで大当たりを当てるのは、いつだって嬉しいものです!
では、次は何をするのでしょうか?これらの単語に何か意味があるのか、それとも以前のバージョンからそのまま残っていてiTunes 8では何の役割も果たさないのか、どうすればわかるのでしょうか?もちろん、テストは行います!
非表示の設定をテストする
隠し設定の可能性があると特定したら、それが本当に疑わしい設定なのかをどうやって確認すればいいのでしょうか?まずは、アプリケーションでその設定の値を設定し、プログラムを実行して、変更しようとしていた機能が変更されているかどうかを確認します。defaults writeターミナルのコマンドを使って、隠し設定に値を設定します。ここでの重要なポイントは、設定にどのような値を設定する必要があるかを正確に把握することです。少し単純化すると、設定には基本的に3種類の値があります。
- ブール型:これは「はい/いいえ」の設定に対応するため、最も一般的な型です。iTunes 7では、iTunes Storeへのリンク矢印は環境設定で「はい/いいえ」のオプション、つまりオン(はい)またはオフ(いいえ)のいずれかでした。したがって、 は
show-store-arrow-linksおそらくブール値を期待しています。 - 数値:この設定では、整数(4)または浮動小数点数(4.2322)のいずれかの数値を指定します。例えば、マウスのシステム環境設定パネルでマウスのトラッキング速度を設定する際に使用されます。
- 文字列: 設定ではリテラルのテキスト文字列が必要です。たとえば、Finder のラベル設定はテキスト文字列です。
設定を行うには、次の一般的な形式のdefaults writeコマンド構文の特定のバリエーションを使用します。
デフォルト 書き込み ドメイン_of_app 設定名 値の種類 値
domain_of_appは、ユーザーのライブラリ -> 環境設定フォルダを調べ、アプリケーションに関連付けられた環境設定ファイルを見つけることで見つけることができます。iTunesの場合、環境設定ファイルはcom.apple.iTunes.plistです。ドメインを取得するには、末尾の「.plist」を削除するだけです。つまり、iTunesのドメインはcom.apple.iTunesになります(大文字と小文字の区別も重要です)。 はテストname_of_preferenceしたい文字列で、value_typeは-boolブール値、-intは-float数値、-stringは文字列です。最後に、valueは変数に割り当てる値です。ブール値の場合、値は または のいずれかTRUEである必要がありますFALSE。
ふぅ。説明するより使う方がずっと難しいですね。実際、非表示の設定の大半はブール値に関するものであることが分かりました。これは iTunes 8 のすべての設定に当てはまります。
値を割り当てる前の最後のステップは、プログラムが現在、問題の機能に対してどのような値を使用しているかを確認することです。iTunes Storeリンクの場合、デフォルトで有効になっています。つまり、ブール値として、iTunes StoreリンクはTRUEです。したがって、この機能を制御する隠し設定を見つけたかどうかを確認するには、値をFALSEに設定して無効にする必要があります。そこで、最終的に作成したコマンドは次のとおりです。
デフォルトでは、com.apple.iTunes に show-store-arrow-links -bool FALSE を書き込みます。
入力後、Returnキーを押してiTunesを起動し、ライブラリ内のアイテムをクリックしました。ストアの矢印リンクが表示されなかったため、この機能を制御する設定を見つけたと分かりました。しかし、もし失敗していたら、リンクの矢印がまだ表示されていたらどうでしょうか?その場合、コマンドが間違っていたことが分かるので、iTunesの設定に先ほど追加したエントリをクリーンアップする必要があります。iTunesを終了し、ターミナルで次のコマンドを入力します。
デフォルト com.apple.iTunes の削除 ストアの矢印リンクを表示
これで、iTunesの設定に先ほど追加したエントリが削除されます。実際には問題が発生することはないはずですが、試してみてうまくいかなかったものは削除しておくのが最善です。その後、iTunesのテキストファイルに戻り、別の候補を探します。しかし、うまくいったので、これで終わりにしました。次に、見つけた他の単語のほとんどを同様の方法で試したところ、最近のブログ記事で説明した通りにすべてうまくいきました。
結論
プログラムのバイナリコードから隠れた設定を探すのは、おそらく誰もがやりたがるものではないでしょう。しかし、お気に入りのプログラムでお気に入りの機能が削除された経験があるなら、その機能は実際にはまだ存在していて、GUIから削除されただけであることに気づくかもしれません(iTunes 8のように)。もしそうなら、このテクニックを使えば、隠れているのにまだ残っている機能を探し出すことができます。