新iPadのケースを物色中なのですが、これだ、というものに出会えていません。アクセサリ類はいちど装着してしまえば中古品、ためつすがめつが難しいですから慎重になりますよ、特にケースは。だって、これケース、なんて言った日にゃあ……

さて、今回は「拡張子」について。最近では、拡張子が必要なかった時代のMac OSを知らない人も多いようで、いちど体系的な解説をしたいと考えていたところ。拡張子の存在を逆手にとり、Emacsの「Dired」で活用する方法もあわせて紹介してみよう。

拡張子は不滅です

現在のOS Xでは、ファイルに拡張子を付けることが一般的。なくてもファイルとして通用するが、Windowsなど他のOSとファイルをやり取りするときには欠かせず(拡張子なしのファイルを適切に扱える人は少ない)、いまや大半のアプリケーションが拡張子を前提としてファイルを扱う。

旧Mac OSを知る向きはご存知だろうが、かつてのMac OS(およびMacユーザ)は拡張子を潔しとしなかった。Mac OSのファイルには、種別を示す「(ファイル)タイプ」と、作成元のアプリケーションを特定できる「クリエータ」という一種のメタデータが付されていたため、拡張子は特に必要とされなかったからだ。旧Mac OSユーザにとって拡張子とは、Windowsユーザが作成したファイルに付いている余分なもの、Windowsユーザにファイルを渡すときにつける謎の呪文、という認識だったと記憶している。

しかし現在、拡張子は半ば必須の存在だ。拡張子がないファイルでも、Finderの情報ウインドウにある「このアプリケーションで開く」設定すれば(usroリソース)、アプリケーションと関連付けることは可能だが、Finderを使いリネームして拡張子を取り除こうとすれば「拡張子を隠す」が自動的に有効になり(拡張子は削除されず非表示になるだけ)、「拡張子を隠す」を無効化して削除を強行しようとするとFinderに警告を受ける。

Finderで拡張子の削除を強行すると、このような警告ダイアログが現れる

Snow Leopard以降、その状況にも変化が訪れている。ファイルにタイプとクリエータが設定されていても、それを判定する「Launch Services」が情報を無視するようになったからだ。旧Mac OSの流儀に従い、ファイルにクリエータを設定したところで、そのファイルをダブルクリックしてもクリエータに対応したアプリケーションは起動されない。

Lionの現在でもファイルはタイプ/クリエータを情報として持てるが、アプリケーションとの関連付けには影響しない

現在のOS Xは、UTI(Uniform Type Identifer)かMIMEタイプ、usroリソース、あるいは拡張子を使いファイルとアプリケーションを関連付ける仕様となっている。Appleがタイプ/クリエータの廃止という決断を下した以上、歴史が巻き戻されることはない。我々ユーザは、UTIや拡張子とうまく付きあっていかなければならないのだ。

あの「afplay」をDiredで使う

拡張子が半ば必須の存在というのなら、それを生かしたほうが現実的というもの。しかし、1つのファイルに拡張子は1つきり、拡張子を変えないかぎりダブルクリックで開くアプリケーションは変更できない……ことはない。いくつかある方法のうち筆者がお勧めしたいのは、Emacsで「Dired」(および拡張版のDired-x)を使う方法だ。

Diredはひらたく言えばファイラーだが、拡張子とアプリケーションの対応関係を自由に再定義できるところがいい。Finderの情報ウインドウでアプリケーションとの関連付けを変更すると、ファイルにusroリソースとして残ってしまうが、Diredではそれがない。

Emacsの初期化ファイル(リスト1)を例に説明してみよう。

リスト1:~/.emacs.d/init.elに追加する内容

1: ;;Dired-x
2: (setq dired-load-hook '(lambda () (load "dired-x"))) 
3: (setq dired-guess-shell-alist-user
4:    '(("\\.\\(ppt\\|PPT\\|pptx\\|PPTX\\)\\'" "open -a Keynote")
5:      ("\\.\\(xls\\|XLS\\|xlsx\\|XLSX\\)\\'" "qlmanage -p")
6:      ("\\.\\(jpg\\|JPG\\|png\\|PNG\\|pdf\\|PDF\\)\\'" "qlmanage -p")
7:      ("\\.\\(m4a\\|mp3\\|wav\\)\\'" "afplay -q 1 * &")))

2行目ではDiredをロードし、3行目以降では変数「dired-guess-shell-alist-user」に拡張子とコマンドを並べて関連付けしているのだが、4行目ではPowerPointの拡張子を持つファイルをDiredで開いたとき、「open -a Keynote」コマンドを実行するよう定義している。これは、Launch Servicesのフロントエンドであるopenコマンドを使い、ファイルをKeynoteで開くという処理を意味している。

5行目と6行目は、同じ「qlmanage -p」を呼び出している。これは、定義した拡張子のファイルをQuick Lookでプレビューする、という意味だ。Quick LookもやはりLaunch Serviceに依存した実装であるため、対応するアプリケーションがインストールされていれば「よしなに」処理される。アプリケーションを起動するほどではないファイルは、この方法がベストだろう。

最後の7行目は、個人的に重宝している「afplay」との合わせ技だ。afplayはCore AudioやAudioToolboxといったOS XのオーディオAPI群を利用した再生専用コマンドで、補正やミキシングなどの処理を伴わないシンプルさがコアなオーディオファンに評価されている。しかし、Terminalから実行するのはさすがに手間がかかるので、Diredで気楽に再生しよう、という寸法だ。4~6行目とは異なり、コマンドライン末尾に「&」を付けてバックラインで実行するため、音楽を聴きながらEmacsで作業できるところがポイントになっている。

開きたいファイルを選択して「!」または「X」を入力すると、~/.emacs.d/init.elで拡張子に関連付けたコマンドラインが現れる。続けて「enter」を押せば実行される

Diredから「afplay」で音楽を再生しようとしているところ。ただ再生するだけで、停止や巻き戻し/早送りなどの機能はないが、クリアな音をEmacsで楽しめる