FLASHer その2 Advent Calendar 2016の22日目です。
何かその1よりも自由に書いて良いよ、という電波を勝手に受信しましたので、サンデープログラマとしてFlashと共に過ごした日々について、自由に書いてみたいと思います。
#遺品供養
Webフロントエンド技術の牽引役として走り続けてきた FlashPlayer は、モバイル端末の台頭によりその役割を終えようとしています。自分がこれまでに作ったFlashコンテンツの一部を時系列で振り返りつつ、故人の足跡をたどりたいと思います。
なお、嘘は書かないように注意を払ってはいますが、表現には元Flasherの主観バイアスがかなり掛かっていますので、読む場合はご注意ください。
あと、今回の言及範囲はあくまでWebフロントエンド技術としてのFlashPlayerに限ったものです。Animateに変わろうとも、Webフロントエンド技術以外のFlash魂はまだまだ生き残ると信じています。
##だいたい10年前(2006年)に作ってたもの
http://soundimpulse.sakura.ne.jp/option-puni-puni/
FlashPlayer9がリリースされたのが10年前の2006年6月。
「FlashPlayer8.5に比べ(最大)10倍速くなる!」の売り文句と共に、ECMAScript4の先行実装であるActionScript3が導入されました。
ブラウザ上で現実的な速度で走るJITコンパイラが実装されたため、適切にコーディングすればネイティブに匹敵するパフォーマンスを引き出せました(ただし、当時のActionScriptの最適化は、かなり癖がありました)。
Flash迫害の常套句である「重いコンテンツ」は、大概、制作者のスキル不足によりFlashPlayer9以前の技術レベルにとどまっていることが多いです。技術レベルが高くなくても、そこそこの物を作れてしまうFlashの功罪と言えるでしょう。
一方、JavaScriptは大変高尚な言語であり、われわれ庶民には扱いにくいため、有象無象の補助ツールであふれかえりました。その結果、そこその物を作るには一定水準の技術力を持つ必要が生じ、Flashのような粗製乱造は今のところ起きていません。
##だいたい9年前(2007年)に作ってたもの
http://soundimpulse.sakura.ne.jp/metaball/
2007年12月にアップデートされたFlashPlayer(9.0.115)よりMPEG4(H.264)対応が始まりました。普及率98%というアホみたいな数値をたたき出した直接的な原動力と言って良いでしょう。
H.264は「高い圧縮率でも画質が劣化しにくい」という特徴のためネット配信動画に適していますが、ライセンス的にオープンな規格ではありません。Flashのように単体企業提供であればライセンス料を支払うだけで無問題ですが、Web 標準での採用は慎重に検討されるべきです。
ご存じのとおり、Chromeは2011年にこのライセンス問題でH.264のサポートを打ち切って以降「公式には」サポートしてません。しかしながら、こちらのリンク先(Mozilla)の説明のように、一読してもサポート状況が全く把握できない文章、ロイヤリティフリーに対応する気がない MicroSoft と Apple に対する静かな憤り、「Chrome から H.264 のサポートを削除するという約束をいまだに果たしていません」という玉虫色全包囲攻撃的な表現は、大変趣き深く、わずか数行でHTML5Videoの奥ゆかしさを味わえる、珠玉の文章ではないかと思います。
##だいたい8年前(2008年)に作ってたもの
http://soundimpulse.sakura.ne.jp/cannonml/
http://soundimpulse.sakura.ne.jp/shmups-on-lcd/
http://soundimpulse.sakura.ne.jp/bound-sonar-synthesizer/
2008年8月にECMAScript4が多数決で勝っていたにもかかわらずダグラス先生の剛腕により[要出展]放棄され、ECMAScript3.1が策定されました。ActionScriptがJavaScriptの未来と信じていたFlasherにとっては、結構ショッキングな事件でした。
ダグラス先生が当時あれほど嫌っていたクラスという概念は、トランスパイラという名の、JavaScriptの言語仕様の思想に対する冒涜によって、あっさりと実装されました。調べてたらGoogle+でこんなコメントを残しておられました。以下意訳
TypeScriptは多くのフロントエンドの中でも最良の選択肢となるだろう。ちゃんとしたコードを生成するようだ。この技術がECMAScriptにクラスや型を導入しようとする圧力を和らげる効果があると考えている。プリプロセッサがよろしくやってくれるのでJavaSctiptに何か変更を加える必要はない。
JavaScriptの動的型付けは最高の特徴の一つであり、型チェックはやり過ぎだ。TypeScriptは代償を払ってsweetnessを手に入れる事ができるが、私にとってこの代償は払うに値しない。
ブレない。かっこいい
余談ですが、自分は昔JavaScriptが大嫌いでした。しかし、ダグラス先生のページを読むうち、その一見キメラ的で不可解な言語仕様の根底にはしっかりとした思想があることを知り、JavaScriptが好きになりました。それゆえに、安易にクラスや型定義やタグ埋込を付与してしまうトランスパイラという思想は嫌いです(ES6でクラスが実装されましたが、思想に準拠した美しい仕様になってると思っています。それはまた別の機会に。)
##だいたい7年前(2009年)に作ってたもの
http://soundimpulse.sakura.ne.jp/dive-into-cyberspace/
http://soundimpulse.sakura.ne.jp/screen-space-ambient-occlusion/
http://soundimpulse.sakura.ne.jp/sion-tenrion/
http://soundimpulse.sakura.ne.jp/sion-fm-synthesizer-wf-1/
個人的にはFlashが最も熱かった年です(実質wonderflが始まった年、というのもありますが)。
FlashPlayer10 が 2008年10月→FlashPlayer10.1 が 2010年6月 のリリースなので、実はこの年には正式版FlashPlayerのリリースはありませんでした。しかし、開発者向けベータ版が盛んにリリースされ、そのたびに物凄くワクワクしながら触っていたのを、今でも鮮明に覚えています。
このバージョンアップにおける最大のトピックはモバイル端末対応の強化です。Adobeの当時のニュースレターに詳しく書かれていますが、省電力化・省メモリ化・GPUレンダリング・ビデオのHWデコード・各種センサ対応と、その本気度がうかがえます。
**このバージョンナンバーを0.1上げるのに実に2年近くを費やしました。**大量投資をして本気でモバイル端末に取り組もうという強い意志がひしひしと伝わってきます。この長期間にわたるAdobeの取り組みを知っているからこそ、この翌年にカリスマタートルネックによって勧善懲悪のストーリーに仕立てあげられた時は、とてもやるせない気持ちになりましたし、見当違いなFlashバッシングには強い憤りを覚えました。
##だいたい6年半前(2010年前半)に作ってたもの
http://soundimpulse.sakura.ne.jp/sion-soundobject-quartet/
http://soundimpulse.sakura.ne.jp/sion-tetrisizer/
http://soundimpulse.sakura.ne.jp/real-time-ray-tracing/
http://soundimpulse.sakura.ne.jp/puppyish-pentatonicism/
いわゆるカリスマタートルショック(iPhoneのFlash非対応の理由を署名付きの長文声明として発表)が起きたのが2010年4月。2年もの歳月をかけてモバイル対応を徹底強化した FlashPlayer10.1 がリリースされたのが 2010年6月。散々開発リソースを費やして、いよいよリリース!という2か月前に出鼻をくじくという。ダメージ効率を最大限まで高めてから放つ。さすがカリスマタートル。あなたのやり方は営利企業として100%正しい。
##だいたい6年前(2010年後半)に作ってたもの
http://soundimpulse.sakura.ne.jp/bound-ball-synthesizer-2/
http://soundimpulse.sakura.ne.jp/active-sonar-sequencer/
http://soundimpulse.sakura.ne.jp/hex-cylindrical-arpeggiator/
件の声明の中で、Flashを拒絶する理由として独占的・セキュリティ・消費電力・マウス操作前提・3rdparty製レイヤーを挟むことによるプラットフォームの成長の妨げ・対応の悪さを挙げました(2番目の"full web"は、H.264ビデオの例などを挙げて「Flash無くても大丈夫」という趣旨なので割愛。前述のとおり全然大丈夫じゃない)。
6年経過した現在、的を射てるのはセキュリティと対応の悪さくらいと考えています。こればっかりは、保守にリソースを割かないと維持できない問題なので、Flashが商売として成立しなくなった現在、大変厳しい状況です(そもそもこの状況に追い込んだのは誰なんだって話ですが)。
独占的の項目は、そもそも「Appleが独占的<=>Flashがオープン」というAdobeの主張に対して「Flashが独占的<=>HTML5がオープン」って返してます。中学生レベルの議論のすり替えだと思うんですが、なんでみんな盲信してるんでしょうか。当時からすごく不思議でした。
消費電力は2か月後にリリースされたFlash10.1で大幅に改善、さらに声明内で指摘されてるH.246再生については、HWデコードに対応したので、ちゃんとiOS版がリリースされてれば、差はなくなっていたでしょう。
マウス操作前提もFlash10.1でマルチタッチ・ジェスチャに完全対応。指摘は「タッチ対応のためにFlash書き換えるくらいなら、一からHTML5で作れば?」って感じですが、機能が全然足らない上に、わざわざ違う言語で書き直せとか、むしろおまえは何を言ってるんだ?
そもそも**消費電力やタッチ対応の話は前年のAdobeMAX2009で発表してるのでジョブズが知らない訳ない**んですが。
3rdparty製レイヤーを挟むことによるプラットフォームの成長の妨げは、Flashを潰した所で例えばUnityのような別の技術が台頭するだけのことで、その技術を提供する先がAdobeよりも手厚く対応できるなんて保障はどこにもありません。もっとも、先見の明に手足が生えたような人ですから、何か強烈な予見を持ってたのかもしれませんが、2016年現在そんな兆しは凡人レベルではまったく感じません。
先見の明が服を着て歩いているような人が、わざわざ署名入りの長文を自社サイトに掲載してまで阻止したFlashのモバイル参入。
この時、この人には見えていた「Flashが本格的にモバイル参入した未来像」は、一体どのようなものだったのでしょうか。
今となっては知るすべはありません。
##だいたい5年半前(2011年前半)に作ってたもの
http://soundimpulse.sakura.ne.jp/movie-data-in-one-png-image/
http://soundimpulse.sakura.ne.jp/clear-water-with-refraction-rendering/
http://soundimpulse.sakura.ne.jp/nomltest-on-flash/
スマターショックがあったとはいえ、この当時まだAndroidは友好的でありFlashもまだまだ堅調に進化しました。v10.1のリリースに2年かかったのに対して、2011年2月にv10.2、2011年5月にv10.3と矢継ぎ早にリリースがなされ、GPU利用による描画の高速化・マルチモニタ対応・IE7/PowerPCサポート終了・ローカル記憶域制御の改善などが行われました。
ただし、このころの最先端技術でのホットトピックスは、次バージョン FlashPlayer11 においてGPUを用いた3D描画に対応するという発表でした。この当時、WebGLはChrome Canary biuldで限定的にしか利用できませんでしたし、酷い時には**ブルースクリーンで落ちる(実体験)**というレベルでした。
2011年の2月に「インキュベーターリリース」という極初期の不安定な実験バージョンのFlash11SDKが、完全予約登録制で限定公開されました。今でこそWebGLで当たり前のようにGPUを叩くことができますが、初めてFlash上でGPUから絵を出せたときの高揚は、今もで忘れません。
##だいたい5年前(2011年後半)に作ってたもの
http://soundimpulse.sakura.ne.jp/spirographical-ingot-cast/
http://soundimpulse.sakura.ne.jp/boolean-crystal/
http://soundimpulse.sakura.ne.jp/4k-fly-through/
2011年10月満を持してFlashPlayer11がリリースされました。目玉はもちろんGPUアクセス3D描画でしたが、他にも64bitサポートやSWFファイルの圧縮率向上、高品質乱数の導入など、様々な意欲的なアップデートが行われました。
今思えば、この時が自分にとって最新技術にわくわくした最後の経験となりました。
それまでの5年間、Flashの最新技術を追ってるだけで、常に新鮮な驚きと感動が供給されていました。
それはおそらく、Flashがインタラクティブアートという直感的なアウトプットに紐づいた技術であり、最新技術が非常に分かりやすい形で具現化されるためだと思います。今のHTML5界隈の、心底どうでも良い補助ツールの使いやすさ競争とか見てると、ここは自分の住む場所じゃないな、と改めて感じます。
WebGLとかあるじゃん?って思うかもしれませんが、OpenGL1.3の時代に3Dフリーゲームを作ってたような老人で3D関連技術はキャッチアップしつづけてたので、残念ながらWebGLにはそれほどキラキラしたものを感じませんでした(もちろん素敵な技術だと思います)。
##だいたい4年前(2012年)に作ってたもの
http://soundimpulse.sakura.ne.jp/gimmick-fantaisie-impromptu/
とはいえ、スマターが残した爪痕は大きく、すでにFlashコミュニティの温度は大分低下していました。筆者はこの投稿を最後にWebフロントエンド技術としてのFlashからは、一旦身を引きました。
最後に作ったものが3Dと音楽という自分のFlash人生の集大成のようなコンテンツだったのは、感慨深いです。
#理解されないのは理解ってる
自分の場合、所詮サンデープログラマとしてFlashで遊んでいただけなので、他のプロフェッショナル達とは立ち位置も熱量も大きく異なります。そもそも、遊び場としてのFlashPlayerは提供され続けており、Adobeも今のところ放置せずにセキュリティアップデートをしていますので、別に引退する理由はありません。
Chromeは9~12月期にデフォルトFlashオフにすると発表してましたが、初回訪問時にON/OFFを選択させるようになるだけですので、広告のように勝手に再生されないと困るものでなければ、影響はほとんどありません(というか、いつ実施されるの?)。
自分がFlashに対するモチベーションを保てなくなったのは、極端な表現をすれば、雰囲気に流されてるだけです。
もっとも、神クラスの技術者に散々disられたり、あることないこと並べられてFlashはオワコンとか言われ続けたりしてるので、まぁ、死んだ目にはなるよねって思います。イジメとかイヤガラセをされて、達観はしてはいるものの精神力が削られる、とかそういう感覚。
もっと未来、皆がFlashのことなんか忘れて、平穏を取り戻してなお、Adobeがサポートが続けられてたら、ひょっこり戻ってる気もします。
その時までwonderflが残ってたら、また楽しくやろうな!
以上!
(どんなオチだこれ。。。)