お知らせ: たぶん古い記事です。
🐦「こんにちは。記事メンテナンスサービスです。」
🐦「この記事は大雑把に 970 日以上は経過しているようです。内容の賞味期限にご注意ください。」
さてビット・バイトの配列といろいろな情報はいろんな規格、「フォーマット」でつながります。
Rev2
すこし加筆と修正しました。
フォーマットの例
細かい名称は気にしないでいいです。あまり正確な表現ではないです。一部は符号化です。
- 数:小さな整数 INT8、巨大整数 INT64、浮動小数点数 FP32 や FP16。他 BCD など。
- 文字(「文字列 "string"」あるいは「テキスト "text"」):ASCII や Unicode
- 音:WAV や MP3 や AAC や MPEG4 Audio など。
- 絵:TIFF や JPEG や GIF や WebP や RAW など。
- 動画:MPEG4 Video や H.264 や HEVC や VP9 や WebM など。
プログラム / ソフトウェアにも「フォーマット」が色々あります。
- プログラム(バイナリ;CPUが実行するもの):EXE (Windows)、ELF (Linux)など。
- プログラム(ソース:人が書くもの):単にテキストファイル。拡張子が違うだけのものが大半。
これらの規格の名称は様々で「フォーマット」だけでなく「エンコード」と呼ぶこともあります。
Attention!
なので「エンコード」という言葉はとっても曖昧です。
前章の符号化や暗号化も含み、さらに「ファイルの形」も指すことがあります。
ただ大雑把にファイルエンコードというときは大体「文字コード」か「映像」です。
フォーマットを誰が決めて、どう使うか
フォーマットの規格自体は「なんらかの信号を 0 と 1 の羅列でどう表現するか」で、 業界によって多様な団体が様々なフォーマットを規定します。
- フォーマット自体は「ヒトとヒトの間での決まりごと」です。
- ソフトウェア開発者などが「すでにあるフォーマットの規定に従って」機械作りをします。
- ちゃんと規定に従った処理をするように作らないといけません。
ファイル拡張子 ≒ フォーマットのただの目印
使う側にとっては、フォーマットは「ファイル名についているドットなんたら」です。
業界用語でいうところの「ファイル拡張子」です。
ただし、ファイル拡張子は「ただの目印」です。
- フォーマットと拡張子は一致しないこともあります。
- 例) (誤って) ".jpg" とついた GIF ファイルでもブラウザーはちゃんと表示できたり。
- 古典的なインターネット上でのドッキリ画像ですね。
- そもそもないこともあります (例 "README" ファイルなど)。
- ウイルス作成者は例えば JPEG 画像の拡張子 ".jpg" を ウイルスのファイル名に使うかも。
- 拡張子を偽装することは古典的な技なので今は大した脅威ではないです。
- ただ高度な場合は JPEG フォーマットの間隙にコードを分散させていたりします。
最近では必要に応じて勝手についたりするのであまり意識することはないでしょう。
Note
対照的なのが「プログラミング言語」のファイルです。
ファイル拡張子まで規定していて逸脱しているとエラーになる言語もあります。
前述通り「原則ただのテキストファイル」なのでそういう区別が重要になります。
MIME
ファイルや後述するストリーミングでのデータのフォーマットを表すには ファイル拡張子だけでなく他の方法もあります。
MIME がその一例で、短い文字でより詳細な情報を提供します。
束ねてみたら?
そして複数のフォーマットを束ねて「コンテナ」と呼ぶこともあります。
- 例えば動画と音のフォーマットをいくつか束ねてコンテナにすれば、 多国語音声対応動画ファイルなんてものが作れます。
- ブルーレイディスクなどに保存された映画で音声や字幕が選べるのはこのためです。
なぜ「コンテナ」という概念が追加で必要になるのかは次章から概説します。
大雑把にいって「ストリーミング」か「仮想化」のためです。
Attention!
令和のこのご時世、ギョーカイ用語のコンテナは複数の意味を持ちます。
ただ大雑把にいって次の 2 つのどっちかと思えばよいです。
「映像関連のギョーカイ」では「ストリーミングのための束ねるルール」です。
「システム開発ギョーカイ」では「仮想化されたシステムの単位」です。
クラウドでソリューションがなんたらとか、 デプロイがどーたらとか、そういう営業用語としてのコンテナは後者です。
そういう意味でいうと「コンテナ」≒「仮想化システムの単位」が無難かもしれません。
まとめ
- 大雑把に数や文字や音や画像やソフトウェアを、 どのように 0 と 1 だけで表現したり区別したりするかという概念が「フォーマット」です。
- 「エンコード」という表現は曖昧です。フォーマットを意味することもあります。
- 「ファイル拡張子」は「フォーマットの目印」です。
- 「コンテナ」はフォーマットを束ねて更に便利にしたり、仮想化に利用したり。