FlashとSVGとAdobeについて徒然なるままに書いてみる。
iPhoneでFlashが再生できない点について、非難のようなものがある。この解決方法について思考してみる。ただし、HTML5やSVG, ひいてはJavascirptについてはよくよく調べている訳ではないので誤認識があるかもしれない。
AdobeがSVG出力をサポートするべきなのか
AdobeがFlashアニメーションのオーサリング結果の出力をSVG+Javascript(もしくはCanvas)で行えるようにすれば良い。
Flashはベクターグラフィック(ベクトル画像)を再生できる軽量なプラグインだ。日本において数年前にFlashブームのようなものがあり、その終末には「のま猫」事件のようなものがある。当時としてベクターグラフィックを快適に見せることができるプラグインは珍しく、どれほど拡大しても綺麗であることに驚いた。さらにアニメーションが他のどのプラグインと比べても滑らかに動作した。今ではFlashは重い、と評されているが、基本的なベクターグラフィックの表現であれば、それほど重いものではないと感覚的に感じている。
現時点において、Flashのようなベクター表現を実現する手法としてSVGが存在している。wikipediaによると、IE以外の主要なブラウザはSVGによる表現が可能であるようだ。さらにタイムライン(時系列変化)のアニメーションを実現できる規格について調べて見ると、Web上のマルチメディア表現を実現するためのXMLであるSMILにおいて、SMIL Animationというものがあることが分かった。
SVG has been designed to allow future versions of SMIL [SMIL1] to use animated or static SVG content as media components.
http://www.w3.org/TR/SVG11/animate.html#Introduction
このSMILについて実装されているものは存在しているのかどうかwikipediaを辿ると、有名所ではRealPlayerやCDMA 1Xあたりしか実装が存在しないらしい。
現時点においては、おそらくはjavascriptによってSMIL形式を再生するような実装が存在するのだろう。Javascriptによって直接SVGのDOMを変更することは可能である。しかしながら、それではFlashをJavascriptでパースして再生するGordonと何が違うのか?という点がある。Flashのファイル形式であるSWFは、現時点において規格は公開されている。ActionScriptも無償の開発環境が提供されている。それならばFlashでいいという話になってしまう。
しかし逆に考えればAdobeがFlash形式にこだわる理由は何であろうか。
現時点においてAdobeがFlashに対して優位性が存在するとすれば、Flashの再生環境であるFlash playerのソースコードを所持しており、またその開発指針を自身の判断で定めることが出来ること、自身のFlash Playerに最適化する出力ができるオーサリングソフトを出せる点にあると考えている。このオーサリングの部分に徹することはできないのか。
以前にAdobeは、AcrobatとAcrobatReaderを分割することによって、読み込みソフトは無償のものを提供し、オーサリングソフトで有償のものを提供するというモデルを見せた。オーサリングソフトに徹するという考えであれば、Flash CSは、SVGでアニメーション出来るものを出してもいいと考えられる。しかし、Adobe側の発言を見ると、iPhoneプラットフォームはFlashに対応するべしというメッセージが伝わってくる。このメッセージの裏には何があるのか邪推したくなる。
DRMストリーミング環境としてのFlashPlayer搭載を望んでいるのか。それよりも、現時点においてAdobe Flash CSの利用者を擁護してのことなのだろうか。現時点でAdobe Flash CSはSVG環境のアニメーションを実現できない。ということは、既存の製品ではiPhoneプラットフォームに対して何もできないことを示している。その状況を察してか、CS5ではクロスコンパイルを行うことが出来る機能を追加した。この機能をappleはどう扱うのかについての状況はよく分からない。どちらにせよWebブラウザ上で表示することは無い。将来的にSVGアニメーション出力できるようになれば、状況は変わってくるのだと考えられる。
もし、SVGアニメーション出力できるようになったとして、懸念もある。それは標準ありきの実装となるので、実装ごとの挙動の違いが出てくるという点だ。以前にHTMLやCSS、Javascriptの挙動の違いでIEなどに苦しめられた開発者は多いはずだ。標準化ありきの実装では、解釈の違いが生まれる。SVGやJavascriptの実装ごとの違いがどうなっているのか分からないが、Gecko系とwebkit系、Tridentの全てで確認をする必要が出てくることになる。これはオーサリングソフトの責任なのか、アニメーション作成者の責任なのか分からない。現時点においては、Flash Playerというプラグインがプラットフォーム(ブラウザ・OS)の違いを埋めている。面倒なことになるだろう。
例えば、無線LANの規格であるIEEE802.11では、様々なメーカーが入り乱れて実装を行っているが、どの機器も問題なく通信することが出来る。これはWi-Fiアライアンスという団体が、各実装のテストを行い、相互接続できることを確認している。最近ではWi-Fi=無線LANという認識である人が多いが、それは相互接続できる保証を買っているということであり、無線LAN規格そのものを示す言葉ではない。Wi-Fiアライアンスには相互接続を試験するためのリファレンスとなる無線LAN実装があるはずである。
このリファレンスがSVGアニメーションの世界に策定されるべきで、リファレンスに従って、それぞれの実装が行われることによって、挙動の違いが生まれず苦労は減ることになる。ではリファレンスを誰が作るのか、という話になるのだが、思考を巡っていくと、やはりFlash Playerにたどり着く。
Gordon実装のように、SWFファイル形式を読み込んで、各ブラウザに合わせた形でSVG+Javascriptに表現しなおす。その表現はFlash Playerと同等にあるようにする。この方式はサーバで変換しようが、Gordonのようにクライアントで変換しようが自由だが、そういった形でなければ、既存のFlash作者たちは救われないだろうと考えられる。
この方式の解決方法でも、現時点で上手くアニメーションできるのかどうかについては知らない。ブラウザのレンダリングとJavascriptが相当に高速に動くのであれば、可能性のある話だとは思っている。
こうした思考の結果もあり、巷で「Flashは重いのでより軽いHTML5実装を望む」という意見は、疑問に思っている。HTML5でも重いサイトは作れる。拡張を入れまくったjqueryやprototypeが読み込まれ表示されるまでにどれくらい時間がかかるのか。むしろ、仮にHTML5全盛の時代になったら、激しいCSSエフェクトと激しいJavascriptアニメーションが我々を迎え入れてくれるだろう。このとき、HTMLの利点は、その気になればCSSを切れる、Javascriptを実行しない、という選択肢が取れることであろうか。これもFlashと同じく、作成者の配慮がなければ、まとも動くサイトではなくなるだろう。
Flashって必要かしら
ベクターでインタラクティブな表現じゃないFlashなら、動画に変換してしまえばいいじゃない。どんなサイズでもベクターなら対応できる、という特徴は動画を複数用意すれば解決出来る問題。
企業ページのナビゲーション程度ならそれこそFlashいらない。
スループット測定はFlashかJava実装が多いけれども、Javascriptでどうにか出来る。たぶん。
Webカメラは別にアプリ用意すればできる。
AnalyticsがFlash使っているのはGoogleらしくない。
動画サイトはoggとmp4用意すれば、とりあえず大丈夫。oggは必要ないかも。
ブラウザゲーのFlash実装は全てCanvasとJavascriptで組み直すかスタンドアロンアプリ作るかで対応すべし。
その他
iPhoneでPDFが見られるのはスルーなのか。組版もしっかりやるべきではなかろうか。いや、epubなのか?
あと誰かiPhoneでJavaを動かせろと文句を言ってあげて下さい。JavaとJavascriptは別ものなので。
Flash MX時代のFlashは今、再生するとムチャクチャ軽い。CS3,CS4で開発してる連中は何しとるんじゃと思うくらい軽い。バージョンアップで重くなった?Adobeに移って重くなった?重さにActionScriptは関係していないはず。意味分からん。エフェクトが重いのかもしれない。拾い物のSWFの差があるだけかもしれないけれど。
PS3のFlash Player 10対応まだー