#ガチJS でJavaScriptとフロントエンドの未来について熱い話をした

(追記): このブログで一部のJSをgithubに置いてたら 「The website abuses rawgit.com」という警告が出てました。現在修正しました。ご迷惑おかけしました。

@kyo_agoさんの主催で、 @mizchi(シングルページ系フロントエンドJSer) と @damele0nさん(ゲーム系HTML5のJSer)でJavaScriptについて話をした。すごく有意義な話だったので、会話を思い出せる限り書いてみる。

このエントリを読む前にこの記事を読むと幸せになれる。

このまとめは僕の主観であり、僕が理解できた部分と自分の発言を一番覚えてるのでどうしてもそれが多めになりますが、ご容赦ください。ついでに酒入ってる。

iOS SafariIE化を防ぐためには

「現時点でのモバイルの一番の問題は、iOS SafariIE化(独自技術の寡占による)だということに疑問はないと思う。WebGLが有効化されなかったりするリスクも本質はそこにある」

iOSSafariのがIE化を阻止する鍵は、FirefoxOSが流行ること。FirefoxOSが標準準拠でプラットフォームとして確固たる位置を築けば、iOSに圧力がかけられる。」

「え、あれ流行る余地あるの」

「現時点でMozillaがFirefoxOSで何をしたいかわからない。開発リソースつぎ込んでるみたいだけど、なにしてるのかわからない」

Androidと同じ土俵で勝負してる限り勝てないし、iOSAndroidも嫌なキャリアから投資してもらうのが一番いいんじゃない?」

「現状FirefoxOSは途上国狙いだけど、開発リソースが先進国に集まってるし、先進国のエンジニアは途上国用のアプリなんて書かないよねぇ…」

Web標準最悪のシナリオとしては、WindowsPhoneが流行るのが一番辛い。昔はワルで今はいいやつのような色眼鏡があるけど、やっぱIE(mobile)は流行ってほしくないなぁ」

Adobeが作るはずだった未来

AdobeHTML5に注力することがわかって、皆がその道(Flash連携)をAdobeに譲ったけど、そのAdobeがマシなもの作らないから空白が生じている」

「create.jsまだ微妙だよね」

「そもそもなんでこの時代になってもまともなHTMLのオーサリングツールがないんだろう。おかしい」

「なんで俺らはこの時代になってdivにポチポチとクラスつけてるんだろうね」

「この世界線は間違っている。本来ならマークアップエンジニアという職種はもう消えていたはず」

「結局、エンジニアがAdobeを見捨てても、デザイナがついて行くから、Adobe製品を捨てられない。だったらそのAdobeはまともなオーサリングツールを出す義務がある。義務を果たしてほしい」

Adobeがその義務を果たす世界線に行きたい。電子レンジいじろう」

FlashCanvas for HTML5 / Create.jsへの不満

「俺が主役だって感じでボッと生成されるcreate.jsが辛い。お前はMovieClipの再生モジュールであって、必要になるまで、どいていてほしい。」

Flash代替エンジンはやっぱりバグがあったり、速度上の問題があったりする。その点create.jsは未来がある。まだクソだけど」

Adobe頑張れ。さもなくば今すぐ滅びろ」

「なんかAdobe昔ほどのエネルギーを感じないんだけど、やっぱ人が流出しているんだろうか」

ゲームにおけるHTML5

「そもそもHTML5でゲーム作りたいの?幸せになりたい人はUnity触ってりゃいいんじゃない?」

「まあスーファミとかPS1レベルの表現力あればウェブゲームとして十分なんじゃない?」

「ウェブゲームとしてはローディング重くなっちゃうじゃん。そんでローディング重くなると期待度が上がって比較対象がきつくなる」

「キャッシュの仕組みも不十分で、ここらへん解決されなきゃ踏み切れない部分多いよね」

index.svgという未来

kyo_agoさん熱く語る

「そもそもsvgが使えればマークアップエンジニアを介する必要はない。aiファイルから直接svgを生成すればいいんだから」

「それってJS連携用のidとかclassとか打てるの?」

「実はイラレから打てる」

「フォトショはダメだ、あれは捨ててもらう」

「あとCSSはレイアウトエンジンとして貧弱すぎるから、SVGを使えばその問題も解決する。SVGで配置して、その中にHTMLを埋める」

Googleがインデックスしてくれないけど」

svgと言えば画像フォーマットだから、なんかそのうち「〜で画像検索!」みたいな感じになるんじゃない?」

「え、辛い」

「俺達が夢見たラピュタはそこにある」

「比較的HTML/JS慣れてる俺らですらindex.svgは朧気すぎて、本当にやれるかちょっとわかんない」

「だからGoogleAJAXという革命を起こしたように、index.svgという革命を起こす必要がある」

「まあ一回やってみたい気持ちはあるけど…」

「ダイジョブダッテ!」

JavaScriptのテストについて

「テスト = 良いみたいな価値観は危険。コスト感覚を持つ必要がある」

「とはいえ、他の言語の連中に馬鹿にされるからテスト書いてるところは、結構ある。本当なら書きたくない。JSのテストはほとんどペイしない」

GUIに起こる副作用をキャッチするの、テストコードで記述するの難しいよねー」

「自分はJavaScriptとしてDOMに起こす副作用をまでテストするようにしている」

「それコスト感覚としてペイしないと思うんだけど」

「あ、自分(mizchi)はDOMの扱いに慣れてるのでコスト感覚という面ではここまではペイするという気がしている」

「うーむ(意見が一致せずここで15分ぐらい議論する)」

「なんにせよ誰にとって、何の目的のテストかってのが重要。盲目的なテストは危ない」

Ruby連中とかやや狂信的で怖い。テストがコーディング文化に組み込まれてるからだけど…その感覚でJSのテストを書くの危ない。維持コスト半端ない」

「なんか最近サーバーがAPI(のjson作る過程)だけテストするようになって、テスト書くの簡単になったみたいな話があるけど、それクライアントサイドに押し付けてきただけな気がしている」

「わかる」

「わかる」

「だからJSエンジニアももっとマークアップやその他を信用して、そっちに目に見える部分の仕事投げよう」

信頼すること

マークアップとか、企画の人とかに、もっとエンジニアリングとしてカバーしていたテストや検証を任せたい。JSでテストできる範囲は、やっぱり目に見えない値の操作に集中する」

「それ、いわゆるコードを書く人種がJS書く人までで、その先はちょっと違うんじゃない」

「とは言うけどエンジニアが彼らを信頼しなさすぎるからではないだろうか」

「エンジニアとして、見積としては最悪のケースを想定するので、相手にマルチタレントを期待して裏切られるぐらいだったら最初から信じたくない」

「なんだかJRPGのラスボスの直前の会話みたいになってきた」

もっと有意義な話、夜になると @Constellationさんのアニメ実況でTLが埋まるとか、そういう話もしていたけど、大枠は以上です。