ばかおもちゃ本店:Youtube twitter:@sashimizakana Amazon.co.jpアソシエイト

2017年9月6日水曜日

jQueryから遠くへ

私がプログラマとして給料をもらい始めた頃にはjQueryなんてものは存在していなかった。Ajaxというのは、何かGoogleとかだけがやっている最新鋭の技術という感じで、prototype.jsが出てやっとみんなやってみっかという感じになりつつあった。当時の私が居たSIerには片手で数えれるより多い行数のJavaScriptを理解出来る人は居なかったらしく、継ぎ足されて数十行くらいになったJavaScriptは、たったそれだけの行数なのにバグの山になっていて、本来出すべきタイミングでフォームを出せなかったりしていた。
私はそれを全部書き直して、半分くらいのサイズにして直したりした。

それからほどなく私は退職して、お別れ会のときに言われた。

「あのJavaScript君にしかわかんないから、助けに来てね」

私は答えた。

「ははは(死ね)」

うちが取り立てて酷いか、というと、まあそうなのだけど、地方の零細SIerなんてものはどこだって取り立てて酷かった。少なくとも私のような学歴も経験もないような人間をさほど試験もなく取るような会社は酷かった。そういう意味では身の丈にあった会社だった。私はクソゴミだったので、クソゴミのような会社に入り、ひととおり仕事を経験して、もうちょい給料をもらって良いクソゴミだということを確認できたので辞めた。

それからあちらこちらへと流れて、そのうちにjQueryというものが出た。画期的だった。ややっこしいDOMツリーの検索を理解しなくとも、誰にだって要素を取り出すことが出来たし、追加することが出来た。なんだ簡単じゃんJavaScript。そう誰もが思った。JavaScriptのことで助けに来てくれというような連絡はついに来なかった。もっとも、それはただの社交辞令だったし、そうでなくとも電話に出るつもりすらなかった。

みんなjQueryで色々書いていた。何万行ものjQueryを書いた。書いたやつは誰も彼も保守などせずに遠くへ消えていった。私もそうだった。死ぬほど沢山の、canvasにスクラッチで様々なグラフを書くようなコードを書きまくって、リーマンショックに伴って契約更新が流れて、去った。
保守性? 誰が気にする。JavaScriptだぞ? Excelの関数なんかと同じだ。トイレットペーパーを取り出しやすくするために三角形に折るような程度の利便性のためのプログラミング言語だ。誰も真剣に理解なんかしちゃいないが、何の問題が有るっていうんだ。
そうして、そのほとんどが保守不可能なゴミになっていった。

問題だったのは、JavaScriptが受け持つ部分が、ほとんど誰も気づかないうちに、あまりに広がりすぎていたことだ。フォームに数字しか入れられなくしたい? OK。フォームの状態に応じて「その他」のテキストエリアを出したい? OK。そのテキストエリアが表示されたときは入力を必須にしたい? OK。結果を非同期に受け取って、エラーを埋め込みたい? まあOK……。確認画面もそのままJavaScriptで描画する? 結果画面のリストもそのままページ遷移せずに出したい? 定期的に他人の追加した項目をリストに追加したい? それらをちゃんとページ遷移みたいにブラウザバックできるようにして、状態を常に最新に保ちたい? いや、ちょっと待った!

私は必死に、非表示のiframe内のページを遷移させて、ブラウザの戻るや進むがちゃんと働くようなコードを書いた。リストを非同期に読んだり、追加したり、列の表示非表示を切り替えたり、フィルタしたり、ページの速度を稼ぐためにdivの寸法を独自に計算して表に見えるように書いたりした。大量すぎる描画にブロックされないように、スクロール位置を計算して、表示されている部分だけが描画されるようなコードを書いた。jQueryでそれらを書いた。書き続けた。それらは膨大で、あきらかに書いた自分にすら著しく読みづらかった。

私には猛烈に嫌な予感がし始めていた。
きっと誰にも嫌な予感がし始めていた。
誰がこれを読み、誰がこれを直すのか?

海の向こうでは、私のような愚かなプログラマよりはるかに賢く真面目な人たちが、こういう状態に陥らないようにするためにフレームワークを書き始めていた。それがAngularであり、Reactであり、Vueであり、山のようなあれこれだった。

その先には、また別の問題があり、その解決策は今もよくわからないが、ともかく私はjQueryと別れて、なんとか持ちこたえた。たった一項目のデータを追加するために大量のjQueryのコードを読んだりするような羽目にはもうならないだろう。

そうして、私は今日も定時に帰る。