オレオレ言語の MIME タイプ2007年11月23日 09時15分

OreScript時代の幕開け - yukobaの日記」を筆頭に、JavaScript によるプログラミング言語の実装が流行っているようです。オレオレ言語はその名のとおり各人が好きに作るものですが、それらの言語を識別する MIME メディアタイプ (以下 MIME タイプ) に関してはちょっと違います。他人のつけた MIME タイプと競合してうまく動かないといったことのないよう、意識して設計しなくてはいけません。

MIME タイプの仕様

MIME に関連する規格は多数ありますが、MIME タイプに関して重要なのは RFC 2046 Multipurpose Internet Mail Extensions (MIME) Part Two: Media TypesRFC 4288 Media Type Specifications and Registration Procedures です。それによれば、MIME タイプはトップレベルタイプとサブタイプからなり、トップレベルタイプは text、image、application などあらかじめ定められた中から選択します。両者はスラッシュで区切られ (トップレベルタイプ/サブタイプ)IANA に登録され管理されています。トップレベルタイプ、サブタイプともに大文字小文字を区別せず、最大 127 文字まで使用できます。

ここで、オレオレ言語のトップレベルタイプとして text が指定されがちなのですが、本来 text とは特別なソフトウェアや前提知識なしでも読めるリソースに対して用いられるものであり、プログラミング言語にはふさわしくありません。ソースコードは基本的に機械が解釈するものなので、application タイプを使ったほうがいいでしょう。

サブタイプに関しては、ツリーと呼ばれるさらに細かい区分があります。ツリーはドットで区切られ、サブタイプ中にドットが含まれない場合は通常、標準ツリーに属するものとみなされます。標準ツリーのサブタイプの登録には標準規格の発行と IESG による承認が必要であり、オレオレ言語には荷が重いでしょう。

ほかにもツリーには、vnd. から始まるベンダツリーと prs. から始まる私的ツリーがあります。いずれも IANA に直接登録を申請することができますが、事前に ietf-types メーリングリストでレビューを受けることが推奨されています。

さらに、サブタイプが x. または x- で始まっていた場合は、実験的なツリーに属するものとみなされます。これらのサブタイプは登録なしで使える (むしろ登録してはいけないことになっている) ので、現状オレオレ言語に最も適しているといえるでしょう。

IE の MIME タイプの取り扱い

IE が script 要素を処理するとき、まずは type 属性を見ます。type 属性の値が text/script-name だった場合、IE は Windows レジストリの HKEY_CLASSES_ROOT\script-name を探し、そこに Active Script エンジン (ActiveX スクリプティングインターフェースを実装するスクリプトエンジン) が登録されていれば、そのエンジンを用いてソースコードを実行します。application/script-name だった場合は何も実行しません。

ですから、IE 以外のブラウザでは JavaScript でオレオレ言語を実装し、IE に対しては Active Script を利用して、より高速なスクリプトエンジンを提供しようとした場合、MIME タイプのトップレベルタイプを text にしたほうが都合がいいということもあります。

そのような場合でも、MIME タイプを登録するのなら、RFC 4329 Scripting Media Types に倣ってトップレベルタイプが text のものと application のもの 2 つを登録し、text のほうを非推奨としたほうがいいでしょう。

まとめ

  • オレオレ言語の MIME タイプは application/x-script-name という形がお勧め。
  • IANA に登録するなら、私的ツリーかベンダツリーが簡単。
  • Active Script エンジンを提供するなら、text タイプの使用もやむをえない。ただし、IANA に登録するなら application タイプも忘れずに。

個人的には、サブタイプに作者名を含めれば衝突を回避するのに十分ではないかと思っています。実例を挙げると、「ブラウザで S 式をつかいたい>< - 女子高生ぷろぐらまーなお☆のブログ」の application/x-naoscheme や、reStructuredText に用いられる text/prs.fallenstein.rst などです。より堅固性を求めてドメイン名を使うのなら、application/x.org.example.script-name といった感じになるでしょうか (この例だと何だかウィンドウシステムっぽく見えなくもないですが)。