2016年6月17日金曜日

解体されゆくSVG

最近目につくようになったSVG2ですが, 一体何者なのでしょうか? 今一度考えてみました.




(単なる)SVG1.1SEの改訂版ではないSVG2


名前だけ見るとあたかも前バージョンたるSVG1.1SEからのメジャーアップデート仕様に見えます. が, その実情は全く異なります.



HTML仕様となったSVG

(2010年位)
HTML5黎明期, WEB表現力の向上を念頭に高度なグラフィックを扱うための新たな仕組みが求められていました. そこで白羽の矢が立ったのがSVGでした. HTMLと兄弟関係にあるXMLをベースにしたSVGであれば既存の仕組みを損なうこと無く, 無理せずにHTML機能の向上が可能と期待されたからです.

この試みはSVGにも多くの恩恵をもたらしました. 半放置気味だった仕様は最新のもの(SVG1.1からSVG1.1SE)に置き換えられ, それまで動作させるために専用のプラグインが必要だったものが, WEBブラウザだけで表示できるようになる等の進歩が見られたのです.

HTMLと統合されたSVG

(2012年位)
しかし, 良い面だけではありません. SVGはもともとHTMLとは別に進化してきた経緯があり, 細かい部分でHTMLと概念を異としています. そのため, 新たな概念(transform, mask, clippath, filter等)をHTMLをもたらした反面, 今日のWEB運用に置いてはあまり意味のないものも含まれていました. また実運用にさらされた仕様ではなかったため, HTMLと比較し多くの欠点が浮き彫りとなってきました. そのような経緯からSVGの新たな仕様SVG2.0(登場時の名称. いわゆるSVG2)の登場が切望されたのです.

HTMLに吸収されるSVG

(2014年位)
SVG仕様の見直しは難航を極めました. 日々進化するHTML5との整合性を維持しつつ, 独自の仕様を改良しHTMLとの統合を図る…もとより様々な機能がHTMLに輸出済みであり, かつ独自進化した内容を再度SVGに取り込むと言った作業ははっきり言って無謀とも言えるもので, いつまで経ってもSVG2の全体像が見えてきません.

そこでSVGはその立ち位置をガラリと変えることになります. SVGはSVGであることを辞めたのです. WEB環境において何らかのグラフィックを描く点において, HTMLもSVGも関係ありません. 従ってHTMLとSVGを一緒くたにした大きな仕様の元でSVGを再定義するのであれば, HTMLとの仕様の摺り合わせなどは発生しません. かくして, SVGの機能はその役割毎に細分され, HTMLやCSSにおける他の仕様と統合されることになりました.

この時点でSVG2の名称にバージョン的な意味がほぼ消えました. これはHTMLにおけるHTML5が漸進的な意図が込められているのと同じで, SVG2はWEB環境で動作する(生の)SVGの意味合いが濃くなったのです.

HTMLに溶け込むSVG

(2016年現在)
この動向は現在でも続いています. SVGの便利な仕組み(path, animation…)が続々と発掘されHTML・CSSに統合されており, SVG固有の機能はまさに出涸らしの状況にあります. また, HTMLが持っている改善指向はSVGにも取り入れられ, 非互換性の問題を顧みない大胆な仕様の変更が多々採用されています.

このように, HTMLに溶け込んだことでWEB環境で本格的に進化を始めたものがSVG2ということになります.

今後のSVGを語る上での注意点


従って今後はSVGを語る場合, 次の3系統のどの文脈で話しているのかが重要となります.
  • SVG1.1系(SVG1.0,SVG1.1SEを含む)
    現状ではサポートしている環境が多いものの, 今後仕様が取り残されWEBブラウザ上で動作しなくなる可能性があります.
     
  • SVG1.2系(SVG tiny 1.2を含む)
    一度はHTMLの代替まで見込んだものの, 机上の空論仕様でHTMLに勝てなかった悲運のバージョン. 一部はSVG2で返り咲いたものも.
    ※inkscapeで便利に使えたりするので, 一応無駄ではない.
     
  • SVG2系
    今後のメイン仕様ですが, 利便性を優先し下位互換を一切考慮していないその姿勢は危うさすら感じます.

主な非互換性は次のとおりです. いずれも機能の削除と言った点で致命的な内容ではあります.
(追加機能は使わなければいいだけなのですが…)
  • SMILを切った 
    アニメーションは今後CSS/APIから行うことになります.
    苦労してマスターしたのに…と言った徒労感はありますが, 精度の低い仕様をグダグダ使い続けるのもアレなので, 英断とは思います.
    →Web Animations仕様に統合された後再定義らしい.
    Blinkでもサポート廃止が覆るなど今なお一定の需要はあるっぽい.
     
  • SVGDOMが改定される 
    APIの改編に伴い既存のスクリプトが利用できなくなります.
    実はこれが最大の問題で, 代替機構が固まっていないのにも関わらずChromeがいち早くAPI削除に舵を切ったことで, あちこちで悲鳴が出ています. polyfillあるからいいよね…で済ませるのはちと無責任では?
     
  • xlinkへの参照が除去され, xlink:href属性の代わりにhref属性を使う
    依存関係が除去されるのは歓迎したいところですが, SVGファイルの相互運用の観点からは嬉しくないところ. 
    但し, 非推奨であるだけで当面はそのまま使えるためさほどダメージは無い筈
     
この他にも削除された仕様はいろいろあります
  • SVG font
    但しこれはWEBブラウザ環境には似つかわしくないだけで, フォントサイズのXML表現として今後も利用価値があります.
     
  •  altGlyph系要素の廃止
    存在意図が読み取れないor意義がなくなった.もともと使う機会は殆ど無いとおもわれるのでさほど影響はなし(と思う)


SVG2を構成する仕様群


SVG2では仕様が細分化され, それぞれが異なる仕様書で定義されることになりました. これが余りにも参照性が悪いので, 泣きたくなります. なのでリンクとしてまとめておきます.


--SVG2--

--legacySVG--


--CSS等--


--HTML--


0 件のコメント:

コメントを投稿