血統の森+はてな

旧はてなダイアリーの自動インポートによるアーカイブです。

CSSベンダープレフィックスに関するメモ(CSS Snapshot 2013が来るかも)

と、@hail2u_さんが立て続けに取り上げているのと、今年のTPAC F2FのMinutesが上がってきたので、ここいらで整理しておこうかなと。

まず、CSS2.1仕様では、ベンダープレフィックスを避けるべきであると書かれています。(id:momdo:20131023:p1でもちらっと書きましたが。)

Authors should avoid vendor-specific extensions

4.1.2.1 Vendor-specific extensions - CSS 2.1

また、ワーキンググループノートとして、CSS スナップショット 2010にもベンダープレフィックスに関する記述があります。

プロプライエタリなプロパティや値の拡張が、将来の CSS で定義される機能と衝突しないように、CSS 2.1 仕様では 接頭辞構文 というものを用意している。
仕様が W3C プロセスの勧告候補に達する以前は、CSS 機能の実装すべてが試験的なものとされる。CSS WG は、これら機能 (W3C 草案に含まれるもの) の試験実装にはベンダー接頭辞を付加することを求める。これにより、草案に変更があったとき互換性が損なわれることがなくなる。

3.3. 試験的な実装 - CSS スナップショット 2010

仕様が勧告候補の段階に達したとき、実装者は仕様に正しく従って実装されたと提示できる勧告候補段階の機能すべてについて、接頭辞なしの構文を実装することが奨励される。 実装間の CSS の相互運用性を確保・管理するため、CSS WG は試験実装でない CSS レンダラが接頭辞なしで CSS の機能を実装する前に、実装レポート (必要であればそのレポートに利用するテストケース含む) を W3C に提供することを求めている。W3C に提出するテストケースは CSS WG によって検証・修正が行われる。

3.4. 試験的でない実装 - CSS スナップショット 2010

このスナップショットは2010年のものであり、CSS2.1仕様が勧告になるに書かれたもので、多少古いものです*1
さて、ベンダープレフィックスについては、先日開催されたTPAC F2Fで議論がなされました。CSS WG Blogにはまだ上がってきていないので、MLから引っ張ってくると、

 Prefixing Policy 
 ----------------
     - RESOLVED: SimonSapin will edit, with input from fantasai.
     - The group spent some time discussing what conclusions the previous
            conversations about prefixing had come to and what the status
            of snapshot was.
     - Plinss took an action to update shepherd so that it produces
            something closer to a live index.
[CSSWG] Minutes TPAC F2F 2013-11-10 Sun III: Masking Level 2, Filter Effects, Prefixing Policy from Dael Jackson on 2013-11-20

となっています。議論の仔細(と正確なところ)はMLに当たってもらうとして、私なりに要約すると、

  • CSS Snapshot 2010 は古いのでアップデートが必要(おそらくSnapshot 2013になる)。
  • ベンダープレフィックスのポリシーについては、以前議論したとおり(後述)。

以前議論した、というのは去年の8月のF2Fでの結論のことで、要約はCSS WG Blog – Minutes San Diego F2F August 2012: Experimental Features Policyにあります。以下、当てにならない翻訳。

セクションA:非ウェブ機能

Web対応でなく、かつ出荷しなければならない場合、非ウェブ機能をベンダープレフィックス付きで出荷し、Webに公開しない。 (ベンダープレフィックスは、将来のWeb機能との衝突を避ける。)

セクションB:標準化過程の機能

出荷
  • 実験的な機能は、非リリースビルドでのみ出荷する。CRレベルの機能は、現に指定されるものとしてリリースビルドで出荷する。
  • 3つのブラウザが実装し、ラフな相互運用性を持つ場合、プレCRを発行し、それが良いアイデアだと同意するものとする。
  • ブラウザがルールを破壊してとにかくリリースで出荷し、ラフな相互運用性を持ち、それが良いアイデアだと同意する場合、誰もがリリースできる。
プレフィックスを付けるかどうか
  • 現在の基準が満たされている場合、ベンダープレフィックスを付けずに出荷する。
  • 機能が安定しない(つまり、CR+実装テストを不完全にパスする)場合、web制作者が特定の実装への入力を微調整できるように、ベンダープレフィックスありとなしの両方のバージョンを出荷する。


とまあこういうことらしい(訳自体が怪しいので何ともですが)。私が意味をちゃんと取れている(かつブラウザーベンダーがこの方針を遵守する)ならば、セクションBの出荷はこういうことを言っているはず。

  • ベンダープレフィックス付きの不安的な(初期の草案段階あたりの)試験実装機能は、本当にテストにのみ使用される。たとえば、FirefoxならNightlyやAuroraのみ試験実装のベンダープレフィックス付きプロパティは有効にされ、安定版では無効にされるようになる。
  • 大まかな相互運用性を持つ実装が3つそろえば、その実装を追認するような仕様が発行される。
  • まあそんなこと言わずとも、相互運用性さえあれば、そんなのお構いなしにブラウザは実装すればいいよ(投げやり)。

といった感じでしょうか。あんまり自信ないですが。プレフィックスを付けるかどうかのポリシーも明確化され、

  • 安定している場合はベンダープレフィックスを付けない。
  • CRに到達したものの、まだ不安定な場合はベンダープレフィックスのあるものとないものの両方を付けること。これによりweb制作者が安定な機能のみを使うか、多少不安定なものでも使うかの二択ができるようにする。

という感じですかね。一応念のために言っておくと、お試し訳ですし、ワーキンググループノートですらありません(まあ、ワーキンググループの結論ではありますが)*2。ただまあ、今後の方針みたいなものは見えてくるんじゃないでしょうか、ということで。

*1:CSS2.1が勧告になったのは、2011年6月のことでした…もう2年と言うべきなのか、まだ2年と言うべきなのか

*2:翻訳の正確性は保証しませんw