MIMEタイプとは、任意のテキストファイルやバイト列のフォーマットを示すために使われるラベルのようなものである。主にWebでデータをやり取りする際に使われる。

概要

MIMEタイプは、元々は電子メールで使うために、IETF(Internet Engineering Task Force)のワーキンググループによって定義・標準化された。Multipurpose Internet Mail Extensionsという正式名称はその名残だ。直訳すると「多目的なEメール用の拡張子」となる。

拡張子とは、ファイル名のお尻につく.txtのような文字列を指す。MIMEタイプはファイルの拡張子ではないが、人やソフトウェアにファイル(あるいは任意のテキストブロック)の種類を伝えるという趣旨は同じである。

MIMEタイプの構造

MIMEタイプは、type/subtypeのように、タイプとサブタイプで構成される。これらは必ずセットでなければならず、片方だけでは意味をなさない。

plain
text/plain
text/css
text/html
text/javascript
application/json

タイプとサブタイプはスラッシュ(/)で区切られ、空白は入らない。

また、;=parameter=valueを付けて、任意の情報を追加することもできる。

plain
text/plain;charset=UTF-8

MIMEタイプは大文字小文字を区別しない。ただ、慣習的に小文字が用いられる。一方で、パラメータの値は大文字小文字を区別する。注意が必要だ。

タイプの種類

タイプは、個別タイプとマルチパートタイプに分けられる。

個別タイプは、単一のテキストファイルやメディアファイルを対象とする。マルチパートタイプは、複数のMIMEタイプを持つ要素で構成される単一のドキュメントを対象とする。

個別タイプの種類 概要
application 何らかの方法で実行されるバイナリデータを示す。
audio 音声あるいは音楽データを示す。
font フォント(タイプフェイス)データを示す。
example プレースホルダとして使うためのタイプ。
image 画像データを示す。
message 電子メールなどの電子メッセージを示す。
model 3Dオブジェクトのためのモデルデータを示す。
text テキストデータを示す。
video 映像データを示す。
マルチパートタイプの種類 概要
multipart 複数の異なるMIMEタイプから構成される単一のドキュメントを示す。

だいたい読んだままの意味だった。

サブタイプの種類

タイプもサブタイプも、基本的にはIANAにより管理される。

ただ、サブタイプはツリーという概念でまとめられており、この枠組みの中でベンダーや個人開発者が任意に追加することもできる。

ツリーの種類 概要
標準ツリー
(Standards Tree)
IANAが管理する、つまり標準化されたタイプのツリー。よく目にするMIMEタイプはほぼこれ。
ベンダツリー
(Vendor Tree)
ソフトウェアベンダーが扱えるツリー。vnd.という接頭辞がつく。
個人用ツリー
(Personal or Vanity Tree)
個人が任意に扱えるツリー。prs.という接頭辞がつく。
未登録 x. ツリー
(Unregistered x. Tree)
ローカル環境で使われるツリー。x.という接頭辞がついたサブタイプを持つ。ただしベンダツリーや個人用ツリーが用意されたため、現在使用は推奨されない。
追加登録ツリー
(Additional Registration Trees)
特定の業界や分野で標準的に使われるMIMEタイプを扱うツリー。

主な使われどころ

MIMEタイプは、主にWebサイトやメールでのデータ通信に使われる。前者はHTTP、後者はSMTP、IMAP、POP3などのプロトコルで、データの種類を受け手のプログラムに伝える役目を担う

また、<object><embed><video><audio>といったHTMLタグのtype属性に指定して、ブラウザにテキストブロックの種類を伝えたりもする。

主な使い方

MIMEタイプは、データを送信する側が、データの種類を受け手に伝えるために使う。具体的な組み込み方は、構築するサーバの種類や使用する言語、及びそのフレームワークによって異なる。

ただ、基本的には以下の流れを踏襲する。

  1. 扱うデータのMIMEタイプを決める。
  2. ケースバイケースに応じて、送信データにMIMEタイプを指定する。

終わり。MIMEタイプの一覧は、IANAのMIMEタイプレジストリで確認できる。

HTMLのコーディングもおおよそ同じで、適切なMIMEタグをtype属性を持つHTMLタグに指定する。

古くは、<script>タグにはtype="text/javascript"<style>タグにはtype="text/css"を指定するのが一般的だった。HTML5になった現在では省略されることの方が多い。

とはいえ、画像や動画などメディアを読み込むタグでは以前としてMIMEタイプの利用は必須である。

type="module"はMIMEタイプか?

<script>タグに、type="module"を指定することがある。これは、そのスクリプト中でコードをインポートしたり、エクスポートしたりするケースに使われる。

一見するとMIMEタイプのようだが、これはスクリプトタグの振る舞いを操作するためのもので、MIMEタイプとは異なる。

参考資料

RFC 6838 – Media Type Specifications and Registration Procedures

Media Types(IANA)

Common MIME types – HTTP | MDN