2022年11月24日に初出の投稿

Last modified: 2022-11-24

ご承知のとおり、ウェブ・コンテンツのコーディングやプログラミングは、既に単純な front-end, tier, back-end といった分類では切り分けられなくなっている。従来の区別だと、フロントエンドは HTML や CSS あるいは、かろうじて「プログラミング」と言われてきた JavaScript や懐かしき ActionScript などのコーディングを指していたし、tier という分類は日本では殆ど知られていないが、要するにロジック(MVC モデルで言うコントローラ)の担当であり、ウェブ・アプリケーションのプログラマはこれを担当するものとされてきた。そして、バックエンドがデータベースやウェブサーバや OS そのものに関わるプラットフォームとかコンパイラとかの技術であった。しかし、既に10年以上も前には Google が NaCl をリリースして、こうした境界を取り払うようにネイティブ・コードをブラウザで実行するという仕組みへの移行が始まって、現在は WebAssembly という中間コードのフレームワークが登場して WWWC の正式な規格にもなった。よって、サーバでシェル・スクリプトだけを書いているような人とか、あるいは JavaScript だけ書いているような人々は、どちらであれ WebAssembly のようなテクノロジーには対応できなくなってくる。

もちろん、こうしたテクノロジーは ECMAScript を推進している人々にすればウェブ・コンテンツのブラックボックス化であり、情報セキュリティという点でも第三者がコードを検証できなくなる。これまで JavaScript でコーディングしてきた人々は、Node.js や Deno や TypeScript のコードを隠蔽できるという理由で知財を保護できると喜ぶのかもしれないが、逆に言えば自分たちがバカや無能でも誰も助けてはくれない。

僕は、テクノロジーとしては単純に興味深いけれど、いったいそもそも C/S システムにおいてウェブ・コンテンツのユーザ・エージェントとはなんであるかを考えたときに、ネイティブ・コードを実行するパフォーマンス上の責任やメリットがアクセスした UA すなわち各人のパソコンのスペックに委ねられるべきであるという発想には、何か不自然で不健全なものを感じてしまう。

確かに、これまでも JavaScript や HTML のレンダリング・エンジンはクライアント側のパソコンにおいて実行されてきたわけだし、UA が単なる双眼鏡みたいなものでなかったのは事実だろう。また、サーバ側のコンテンツがあらゆる意味で透過的あるいは雑な意味で「オープン」でなくてはいけない道理などないのも事実だ。それはただのイデオロギーであって、インターネット通信の合理性やウェブ・コンテンツの扱いの法的あるいは経済的な妥当性とは別の話である。しかし、だからといって「実行速度が上がるから、バックエンドでは Rust で書いて、それを WebAssembly で実行してもらう」のが将来のウェブ・アプリケーションやコーディングの実務として当たり前になるかというと、どうもそういう印象は感じられない。

もちろん、大半のコーダやウェブのプログラマが、どちらの側であれコンパイルという作業に慣れていないという事情もあろう。しかし、そこは API なり抽象化によっていくらでもアクセスが容易になる可能性はある。おそらく問題は、処理結果のデータをシリアライズされたデータだけでレスポンスするというメッセージングが否定されて、データだけでなくネイティブ・コードの本体までレスポンスされるというメッセージングに、本当に通信システムとしての合理性や効率性があるのかという疑問があるからだ。僕は、20年くらい前の話だという特殊な事情はあるにせよ、あの昔懐かしき XML でオブジェクト指向のメソッド本体をやりとりしてしまう Web Services とか SOA というテクノロジーが API というイージーなメッセージングに解消してしまった歴史を知っている。いまどき SOA なんて単語を使ってるのは、IT ゼネコンで銀行の基幹システムを設計しているアーキテクトや Java のエンジニアくらいのものだろう。というか、SOA というアーキテクチャそのものが、複雑すぎて設計も実装もできない多くの Java 使いのために、LEGO のブロックを並び替えたり積み替えるようにプログラミングできることを意図して提唱されたのではないかと思えるような、いわばゼネコン向けの玩具だったという気がする。

  1. もっと新しいノート <<
  2. >> もっと古いノート

冒頭に戻る


※ 以下の SNS 共有ボタンは JavaScript を使っておらず、ボタンを押すまでは SNS サイトと全く通信しません。

Twitter Facebook