Windows 秘話

ファイル名に含まれるもの

Raymond Chen

ファイルの拡張子が、既定で非表示になっていることを不思議に思っている方は多いと思います。このような疑問を口にする人は、ファイル拡張子が表示されないことが癌の原因になるとでも言わんばかりに、非難めいた口調で話します。
今月のコラムでは、ファイルの拡張子が非表示になっていることについて、いくつかの異なる角度から考えてみたいと思います。

拡張子は、ファイルの種類をエンコードする単なるメタデータです。ですが、このメタデータの多くは、さまざまなファイルの転送モードで原型を失います。たとえば、.ZIP ファイルでは、ファイルの作成日時、名前、および内容が保持されますが、ファイルをメールに直接添付して送付すると、ファイル名と内容しか保持されないという困った事態が発生します。ファイル名にはデュアル ストレージ ロケーションとしての負荷がかかり、ユーザーが付けた名前とファイルの種類に関する情報が多重化されます。

好評を博していた Mac の最初のファイル システムでは、ユーザーが付ける名前とファイルの種類 (ファイル タイプ) に関する情報が明示的に分離されていました。Mac のファイル システムでは、「ファイル名」は単にユーザーが付けた名前のことで、ファイルの種類に関する情報はメタデータに格納されていました。そのため、Mac では、ファイル アイコンの下には、ユーザーが付けた名前だけが表示されていました。一般ユーザーには何の意味も持たない、見苦しい拡張子がないことは、Mac が Windows より優れている理由の 1 つとして挙げられています。

ファイル拡張子の意味は、一般ユーザーにはわかりづらいものです。「.HTML は Web ページという意味の拡張子なんですね。でも、なぜ、もっとわかりやすい .Web page という名前の拡張子にしないのですか。なぜファイルの実体と共通する文字を持たない不可解な 4 文字の略語を発明する必要があったのですか」という質問を受けた場合は、次のように説明する必要があります。

「それは、HTML が HyperText Markup Language (ハイパー テキスト マークアップ言語) の略で、Web ページの作成に使用するコンピュータのコードを記述するために、コンピューターの専門家が思い付いた名前だからです」という具合にです。

これは、車を操作するレバーなどに、その操作内容ではなく、操作する部品に内部で使用されている番号が表示されているのと似ています。たとえば、フロント ガラスのウォッシャー液を出すボタンには、SB5173-B92 と表示されています。自動車整備士に聞けば「それは自動車メーカーが、サイド ミラーの製造を外注していて、サイド ミラーを製造している会社では、自動車メーカーと異なる番号の付け方を採用しているからですよ」と説明してくれるかもしれません。

「ですが、サイド ミラーは、電気で動く部品で、スイッチを押すとモーターでサイド ミラーが動きますよね」

「一度覚えたらごく単純なものですが、車を知的に使いたければ、しっかり学習する必要があります。ご説明しましょう…」というやり取りが交わされることでしょう。

これは一般ユーザーがファイル拡張子から受ける印象と似ています。ファイル拡張子は、意味を持たない不可解な文字と数字で構成されていますが、きちんと理解しないと、すべてのものが機能しなくなります。

Mac では、とにかくファイル拡張子を廃止しました。ドキュメントに名前を付けると (これがファイル名になります)、そのドキュメントの作成に使用したアプリケーションによって、ファイルの種類に関する情報が別の場所に格納されます。さいわい、コンピューターがファイルの種類に関する情報を追跡するのに使用する訳のわからないコードについて心配する必要はなく、ユーザー側で必要な作業はドキュメントに名前を付けることだけでした。

その一方で、アプリケーションを作成し、ビットマップ ファイルのアイコンと同じアイコンを割り当てて、「アンナ クルニコワ」という名前を付けることができてしまいます。Mac では、アイコンの下にファイルの種類に関する情報が表示されないため、コンピューターに詳しくないユーザーは、アンナ クルニコワの画像を開くつもりが、実際にはトロイの木馬を実行するという罠にかかってしまう可能性があります。ドキュメントではなく、アプリケーションを実行しようとしていることを把握するには、[種類] 列で、それが MacPaint 画像ではなくアプリケーションとして認識されていることを確認する必要がありました。

どういうわけか、この機能は、Mac の優位性を証明するものとしてもてはやされる一方で、Windows ではその劣位性を示すものと見なされました。このような議論には、どう反論しても無駄なので、抵抗するつもりはありませんが…。

プログラムで操作するファイル名は、ユーザーが付けた名前とファイルの種類に関する情報という 2 つの異なる情報を組み合わせたものです。エクスプローラーでは、ユーザーが割り当てた名前がアイコンの横に表示され、ファイルの種類に関する情報が [種類] 列に表示されます。

ファイル拡張子を表示することによって、File.jpg.exe などの悪質な名前のファイルが作成される問題が発生したという見方もあります。このプログラムで使用するファイル名を、ユーザーが付けた名前 (File.jpg) とアプリケーションの種類に関する情報 (.exe) に分けると、親切なコンピューターの専門家から、ファイル名はプログラムで使用するファイル名で解釈するように教えられたユーザーは、File.jpg をユーザーが付けた名前ではなく、「.jpg」の部分が拡張子だと解釈し、これがプログラムで使用するファイル名だと誤解することになります。拡張子を表示する手段がなければ、このような解釈が必要になることはないため、このような誤解を生むことはなく、セキュリティの問題が起こることもなかったでしょう。

*Raymond Chen は自分の Web サイト「The Old New Thing」と、および同じタイトルの書籍 (Addison-Wesley、2007 年) で、Windows の歴史と Win32 プログラミングについて扱っています。