Javascript開発の変遷

2021/05/31

Web開発の変遷で、バックエンド中心のアーキテクチャの推移を整理していた。
バックエンドの再構築と並行して、Javascript開発がヘビーになる。

おそらくJavascriptは一番難解な言語だろう。
主な要因は、ブラウザのプロダクトとバージョンごとに実行環境が無数にあり、それとは別に方言が増え続けていることによる。
完全に組み合わせ爆発が起きている。

機能強化の方向で複雑性が増すのはまっとうと言えるが、残念ながらJavascriptについては着手までに考慮・実装・検証すべきことがあまりに多い。
直近では、Safariの機能対応に不備があり2日がかりで追加実装していた。この間、コードは1行も書いていない。

多くのプログラミング言語は、オープンな実行環境上でツール整備を進めるか、またはベンダーが実行環境とセットで開発ツールを提供するかのいずれかだ。
しかしJavascriptは、クローズドなブラウザ実行環境上にオープンソースの開発ツールが群生しており、根本的なところから手探りになっている。

Internet Explorerが25年かけて脱落してきたが、2番手以下のブラウザはJavascript開発の直接のネックになる。
今後は、Safariがどのようなスピードで進化していけるかが、Javascriptの生産性に直結するだろう。 PCでは代替ブラウザを選べるが、iPhone/iPadはSafariが独占しておりOSバージョンとセットになっているため問題は根深い。

ブラウザのバージョンアップごとに状況が変わりゆく「動く標的」ということもあり、クリーンな解決は今後とも望めないだろう。
ただしプロダクト内の後方互換性はかなり強固であるため、一度動作させたものはある程度の安全性を見込める。

方言の増加とサバイバルの動向

Javascriptは非常に方言の多い言語と言える。現時点の代表例にTypescriptがある。
また、JavascriptはWebUIを作る言語でもあり、ReactJSが導入したJSXが標準化されつつある。
さらにこれらとは別の標準として、Javascript自体の文法も年々追加されている。

Javascript言語自体の変遷のポイントは、いずれも決定打にはならないということだ。
それぞれの方言が提供する改良がいずれもごく限られた範囲の部分的なものであるため、全体を見渡すと実はおおむね進歩していないとも言える。

おそらく大局的なトレンドから見ると、JSXなどによりJavascriptがHTMLを包含したことが1つの進歩だろう。
CSSも包含しつつあるが、完全に消化不良の実装になっており、これはこのままブレークスルーできずに終わるのではないか。

Typescriptなどのクラス機能の強化は、Reactが一度取り入れた後に事実上切り捨てており、限定的な用途にシュリンクしていくように見える。
各種方言のうちどの書き方を採用すべきかは、各開発プロジェクトが選択すべき事項であり、言語の進化が自然に生産性向上に結びつくわけではない。

Typescriptがとくに苦しい点は、せいぜいプロジェクト内のコードしか制御できない点だろう。
依存ライブラリやランタイムの不整合に対する対策が立たないため、全体の品質制御にあまり効果がない。

Javascriptが丸ごと置き換えられる可能性

Javascriptは進化し続けている言語ではあるが、展開によっては使われなくなるシナリオがある。
WebUIについては、新技術のHTMLCanvasとWebAssemblyを利用することにより、JavascriptとHTMLのレイヤをバイパスするアプローチが登場している。
初期段階の実装として、すでにFlutter webのcanvasKitとMicrosoftのBlazorがある。

HTMLCanvas+WebAssemblyは、Javascriptの標準化が順調に進まなかった場合のプランBとして機能する。
Javascriptの標準化とは市場2位のブラウザ実装のことであり、現時点ではiOS Safariの牛歩戦術への対処のように見える。
すでにSafariはWebComponentsの標準化を巻き戻した実績がある。

FlutterにせよBlazorにせよ、Javascriptのツールチェインとは徹頭徹尾まったく異なる技術で構成されている。
これは、そもそも今存在しているJavascriptのツール群が砂上の楼閣になっているからだろう。
Javascriptも変化しているが、目的をもった進化というより、単に分化しているように見える。

どの技術がクリティカルマスを越えるのかは不明だが、代替技術が実用に耐える安定動作を獲得したときJavascript資産は無に帰す可能性がある。
その場合、既存のJSコードを移行するパスはなく、すべて廃棄して新たに開発する必要があるだろう。

これまで相当な努力が投入されてきたにも関わらず、WebUIの分野では有意義な進展が乏しかった。
おそらくJavascriptの技術スタックは過去と未来のランタイムの複雑さに呑まれ、自壊の途上にあるのだと思う。

代替手段も定まっていないため、現時点ではただただ混沌としている。

⁋ 2021/05/31↻ 2021/06/01