やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

規格の情報源(HTML,CSS,JS,WASM,JSON,schema.org,WebStory,EPub)

 Webサイトやアプリをつくるために必要な規格をまとめた。

概要

名前 概要
HTML インターネットの文書はすべてHTMLでできている
CSS HTMLの色やサイズなどの見た目を設定する
JS 上記以外でできない機能を実装する
WASM コードをアセンブリ化して高速実行する
wiki 規格 MDN
HTMLエイチ ティー エム エル Hyper Text Markup Languageハイパー テキスト マークアップ ランゲージ HTML HTML Living Standard, 和訳 HTML
CSSシー エス エス Cascading Style Sheetsカスケーディング スタイル シート CSS CSS CSS
JSジェイ エス JavaScriptジャバ スクリプト JS ECMA Script JS
WASMワスム WebAssemblyウェブ アセンブリ WASM WASM WASM

 MDNを読めばゼロから学習できそう。

サブ仕様

 ほかにも実装している最中で知っておくべき仕様についてまとめる。

軽量マークアップ言語

 軽量マークアップ言語は、おもにHTMLを簡単に書くための中間書式である。

拡張子 wiki 規格 デモ
Markdown .md Markdown CommonMarkdown, GFM DEMO
Textile .textile Textile Textile DEMO

 軽量マークアップ言語はたくさんあるが、Markdown一強である。

 Markdownはいわずと知れた有名なHTMLの軽量マークアップ言語。よくブログを書くときに使う。古くはWiki記法にはじまり、亜種がたくさんある。有名なものではGFMがある。CommonMarkdownとして共通規格化された。Markdownで楽してHTMLを書くのが一般的である。

 Textileは複雑なテーブルをつくることができる。Markdownではできなかった任意セルのヘッダ化、セル結合ができる。

 AsciiDocもあるが、これは英語圏に最適化されたフォーマットであるため、日本語では少し使いづらい。

 ReStructuredTextソースコードドキュメント用である。

電子書籍

拡張子 wiki 規格 デモ
EPub .epub EPub EPub, 和訳 DEMO

 EPub電子書籍をつくるためのファイル書式である。実体はXHTMLCSSXMLをZIP圧縮したもの。閲覧には専用アプリが必要。

 Re:VIEWEPubなどに変換できるらしいが、こちらによるとRe:VIEWはクソコードらしい。

 さまざまな形式に変換するツールとしてpandocがある。

構造化テキスト

 構造化テキストは、おもにHTMLのメタデータや、ツールの設定ファイルなどで利用する。

wiki/公式 規格
CSV CSV CSV, 和訳
TSV 同上 同上
LTSV - LTSV
INI INI -
TOML TOML TOML
XML XML XML
JSON JSON, intro JSON, PWA Manifest.json
JSON5 JSON5 JSON5
JSON-LD JSON-LD, 公式 JSON-LD
schema.org - schema.org, Google Structured Data
YAML YAML YAML

XMLサブセット

 じつはXMLは自由に拡張可能であり、多くのサブセットがある。

サブセット 概要
SVG ベクタ画像。
RSS フィード。WEBサイト更新を配信するための書式(古い)
Atom フィード。WEBサイト更新を配信するための書式(新しい)
OPML 文書のアウトライン。
MathML 数式を書く書式。
SMIL マルチメディアコンテンツを表現する。静止画、動画、音声、文字などの、位置、時間を配置し、再生できる。
MusicXML 楽譜。

XHTML

 XHTMLEPubで使われているXML形式のHTMLである。ところが、XHTMLはすでに廃止されている。EPubって今後どうなるんだろう。HTMLの歴史は以下。

仕様 勧告日 廃止日 有効日数
HTML 3.2 1997-01-14 2018-03-15 21年2カ月
HTML 4.01 1999-12-24 2018-03-27 18年3カ月
XHTML 1.0 Second Edition 2002-08-01 2018-03-27 15年7カ月
XHTML 1.1 Second Edition 2010-11-23 2018-03-27 7年4カ月
HTML5 2014-10-28 2018-03-27 3年4カ月
HTML 5.1 2nd Edition 2017-10-03 2021-01-28 3年3カ月
HTML 5.2 2017-12-14 2021-01-28 3年1カ月
HTML Living Standard 2021-0129

 W3Cの更新速度が遅いとかで、WHATWGHTML Living Standardを作ることになったらしい。なので、これから更新速度はどんどん速くなると思われる。ただしブラウザに実装されるまでの時間はそれなりにかかるだろう。

Web Story

 Web Story(旧AMP)は、スマホ向けのスライドみたいなもの。HTMLやJSライブラリを使って実装する。

テキスト・エンコード・仕様

 文字コード、文字セットとも呼ぶ。

書式 概要
ASCII 英数字と記号だけを取り扱っている。8bit/字。
Unicode 全世界の字を取り扱っている。このうちUTF-8が主流。1字あたり1〜4Byteの可変長。日本語は1字あたり3〜4Byte。

 なお、日本のWindowsではSHIFT-JISが使われるが一部文字化けしたりするクソ文字コードである。日本政府はMicrosoftと癒着しておりWindowsを使っているため、テキストファイルの文字コードSHIFT-JISである。たとえば令和2年度 集計結果(集計表) -CSV形式で配布されているCSVファイルとか。SHIFT-JISを解析できないLinuxテキストエディタだと文字化けする。いいかげん、世界共通規格であるUnicodeにしてほしい。ガラパゴスすぎる。

 文字コードUnicodeを使うべきである。HTML, CSS, JS, その他すべてのテキストはUnicodeで保存するのが世界標準だ。WebAPIでデータ送受信するときもサーバ側の文字コードは大抵Unicodeである。それはUnicodeがあらゆる世界の言語を含んでいるからだ。絵文字もある。どの世界でも正しく表示するためにはUnicodeを使うべき。文字コードUnicodeを使っておけば間違いない。

マルチメディア仕様

 ついでに画像、音声、動画のファイル形式についても示しておく。仕様はすべてバイナリデータの構造の話になる。ふつうの人はそんな詳細なレベルまで必要ないだろう。ざっくりとした特徴と用途、そしてファイルサイズやビューア普及率について把握しておけばいい。

画像

系統 構造 対象 特徴 書式
ラスタ ピクセルの集合 写真 拡大・縮小するとシャギー丸出しのギザギザなモザイクになる GIF,PNG,JPG,WebP,AVIF
ベクタ 数式の集合 アイコン 拡大・縮小がきれいにできる SVG

 ベクタ系はSVG一択でいいだろう。WEBで使われるのもSVG。ただしアイコンやイラストなどの用途に限られる。写真のようなピクセルの集合で表現する画像を描くことはできない。拡大・縮小してもキレイなのでサイズを気にせず書ける。アスペクト比だけは影響を受ける。

 ラスタ系はPNGが主流。できるだけ軽く、表示できる環境がたくさんあり、アルファチャンネルやアニメーションにも対応している。可逆圧縮なので、何度保存し直しても劣化しない。8bitと24bitがあり、8bitはドット絵、24bitは写真などのフルカラー用。

 写真についてはJPGが主流。デジカメで撮影したらJPGファイルになっていると思う。JPGは非可逆圧縮なので、保存し直すたびに劣化してしまう。編集はできないものと考えるべき。PNG24よりファイルサイズが小さくなる。アルファチャンネルやアニメーションはできない。

 GIFはおもにアニメーションで使う。8bitカラーなので同時発色数は256色である。そのため8bitのPNGとおなじくドット絵にもちいることが多い。または劣化するが軽量なアニメーションとしても使われる。透明色は1色だけである。PNGのアルファチャンネルのように半透明な表現はできない。

 ドット絵、写真、アニメの用途において、PNGはすべてカバーしている。写真ならJPGだが、それ以外はPNGでいい。

用途 フォーマット
ドット絵 GIF, PNG8
写真 JPG, PNG24
アニメ GIF Animation, APNG

 次世代型としてWebPAVIFがある。圧縮率が高いためファイルサイズが上記形式よりも小さくなる。ただし、まだサポート環境が少ないため表示されないことが多い。

 WebPGoogleが開発した書式である。非可逆圧縮モードではJPGにくらべて25〜34%、可逆圧縮モードではPNGにくらべて28%軽くなる。22%増加でアルファチャンネルを足せる。これの動画版にWebMがある。

 AVIFは最新の書式であり、JPGより95%、WebPより30%も軽くなる。HDR(ハイダイナミックレンジ)カラーに対応しており、色深度が広い。アルファチャンネルやアニメーションにも対応。

書式 圧縮方式 圧縮率 色深度 アルファチャンネル アニメーション
BMP, RAW 8,24
GIF 1/10 8 無(1色)
JPG 1/10 24
PNG 1/8 8,24,32 APNG
WebP 可/非 JPG-25% 24,32 無/有
AVIF 可/非 JPG-95%,PNG-30% 30/40,36/48 無/有

8bitカラー(IndexColor)

1pixel = 色深度 = 8bit
2K(1080p) = 1920x1080 = 2073600px

2073600px * 8bit = 16588800 bit = 2073600 B = 2025 KiB≒2MB

24bitカラー(FullColor)

1pixel = 色深度 = 24bit = (R,G,B) = (8bit, 8bit, 8bit)
2K(1080p) = 1920x1080 = 2073600px

2073600px * 24bit = 49766400 bit = 6220800 B = 6075 KiB≒6MB

24bitカラー+アルファチャンネル

1pixel = 色深度 = 32bit = (R,G,B,A) = (8bit, 8bit, 8bit, 8bit)
2K(1080p) = 1920x1080 = 2073600px

2073600px * 32bit = 66355200 bit = 8294400 B = 8100 KiB≒8MB

HDR 10bit

1pixel = 色深度 = 30bit = (R,G,B) = (10bit, 10bit, 10bit)
2K(1080p) = 1920x1080 = 2073600px

2073600px * 30bit = 62208000 bit = 7776000 B = 7593.75 KiB≒7.6MB

HDR 10bit + アルファチャンネル

1pixel = 色深度 = 40bit = (R,G,B,A) = (10bit, 10bit, 10bit, 10bit)
2K(1080p) = 1920x1080 = 2073600px
2073600px * 40bit = 82944000 bit = 10368000 B = 10368 KiB≒10MB

HDR 12bit

1pixel = 色深度 = 30bit = (R,G,B) = (10bit, 10bit, 10bit)
2K(1080p) = 1920x1080 = 2073600px

2073600px * 30bit = 62208000 bit = 7776000 B = 7593.75 KiB≒7.6MB

HDR 12bit + アルファチャンネル

1pixel = 色深度 = 48bit = (R,G,B,A) = (12bit, 12bit, 12bit, 12bit)
2K(1080p) = 1920x1080 = 2073600px
2073600px * 40bit = 99532800 bit = 12441600 B = 12150 KiB≒12MB

音声

書式 圧縮 特許 サイズ 概要
WAV 176.4KB/秒 非圧縮リニアPCMサンプリングデータ。
MP3 非可逆 1/5 広く普及した圧縮形式。人間の可聴域外データを捨ててサイズ縮小する。
OGG 非可逆 1/5 MP3の特許不要版。
FLAC 可逆 1/2 WAVの半分くらいに圧縮できる。可逆なので劣化しない。
44100 Hz(samples/秒)
16 bit(bit/sample)
2 ch(ステレオ)
1 秒
44100☓16☓2☓1=1411200 bit=176400 Byte=176.4 KB

動画

書式 概要
AVI 非圧縮。もはやありえないほど古い。
MP4 H.264 かつての主力。
VP9 WebM形式のコーデック。後継はAV1
AV1 これからの主力

所感

 あまりにも知っておくべきことが多すぎて死にそうになる。

 まだコードを一行も書けていない。概念の存在とその概要を知っただけ。これから、それを使って思い通りのブツを作ってゆくことになる。果てしなく気の遠くなるような作業。もういやだ。早く動くコードを書きたい。というわけで、次はサクっと動かす方法とコードについてまとめる。