僕らを縛る Node.js という呪いについて

これ僕らの物語であり、僕と君の物語であるかもしれない。

数日前、友人が言った。「久しぶりに Rails を書いたけれど、Node.js の良さに敵わない」と。

その言葉に同意しながらも、他方で少し不思議に思う。

いつから僕らは Node.js しか使わなくなったのか。あれだけ話していた Rails などの多くの Web 技術にときめかなくなったのか。と。

もちろん、使えないというわけではない。寧ろ今現役で十分な活躍をしているフロントエンドの人間は、等しく皆「主役であるバックエンドのサブとして存在するフロントエンド」を経験してきている。

書こうと思えば書ける。だがその中で、敢えてフロントエンドとその技術を選んできた。

だけど今はどうだろう。フロントエンドエンジニアはもはや「JavaScript を扱うソフトウェアエンジニア」となり、一般的なバックエンドは勿論、Node.jsが一級市民として存在するクラウド領域まで生まれている。

それに留まることなく、中には Electron や Ionic のような、これまでデスクトップアプリやネイティブアプリが活躍していた領域に JavaScript を担いで行って食い扶持にしている人も少なくない。

気がついたら僕らは「フロントエンドのエンジニア」ではなく「JavaScriptのエンジニア」になっていた。

けれどこれは果たして思考停止なんだろうか。あるいはもっともらしい理由はあるんだろうか。

フロントエンド。これは誰も疑う余地はないだろう。ホーム中のホーム。「何か一つの目的にしか使えない」ならここが選ばれるのは間違いない。

サーバーサイド。これもよくわかる。フロントエンドとのTypeScriptによる親和性は勿論、k8s領域を除くサーバーレスの世界では、Node.js は主役と言っても良い。 ビジネスロジックや機能を一般的なアプリケーションサーバーとして提供するのか、FaaS のようなサーバーレスの形をとるのか。柔軟に切り分けられるのも独自の強みと言える。 言語としても、 TypeScript は他の軽量言語より堅牢であるといえるし、一方で Go のようなシンプルさはないが、その分言語とエコシステムの両側面でパワフルさを兼ね備えている。勿論、これだけ多くの属性を持っているゆえに、それぞれと比べて中途半端に感じる人はいるかもしれない。

デスクトップアプリ。これはもはやOSの機能にアクセスしない限りは Web アプリとして作る選択肢が多いように思う。 2022年に Qt を使いたいかと言われると No に近いだろうし、利用者もそうなんでもアクセス権限を渡したくないだろう。 結果的に特別な事情を除いて Web で完結させるようになり、通常のフロントエンドやサーバーサイドと同じ技術に落ち着く。Electronはガワだけとそれ以外で都合が変わりすぎるので割愛しよう。

モバイルアプリ。これはあまりフロントエンドの息がかかっていない気がする。大手銀行レベルでも Ionic を利用する事業者はいるものの、様々な制約の結果モバイルアプリを Web 技術で完結させる人は多くない。代わりに React Native のような中間択はグラデーション広く利用されており、特に少ないリソースで多くのプラットフォームに対して価値提供すべきスタートアップの事業者は利用している。

こうしてみると、ソフトウェアエンジニアが携わるほぼ全ての領域に、Node.js を使う余地があり、また時には利用する合理性すら生まれる。

Node.js は常に Better な結果をもたらしてくれる。技術だけで見た時、Best となるのはフロントエンドと、あとはサーバーレスの世界くらいかもしれない。

ただ一方で、リソースであったり、メンバーの構成であったり、専門性、エコシステム、プラットフォーム。様々な要素を考慮した時、状況においては、他の領域でも Best になりえる選択肢と言える。

そしてそこで引き継げる経験値は多いだろう。それは UI = f(state) かもしれないし、もっと素朴なライブラリを知っているか否かかもしれない。あるはもう少し実用的な柔軟な型定義の話かもしれないし、structでもclassでもない、JavaScriptのObjectの取り回しやすさかもしれない。

それらはいずれも、僕らの武器になる。Node.js は悪くない精度で問題を解決してくれる。コンテキストスイッチもない。何故かどの分野で使えてしまう。もしかしたら、この技術は万能であるかもしれない。

そんな幻想よりもわかりやすい、たった一つの答え。

「楽」という事実。

Node.js を、TypeScript を使えば良い。React は優秀だし、TypeScript を使えば多少質の悪いコードも可読性は担保される。 gyp で悩む機会もなくなって以降は開発環境もストレスフリーだし、扱う領域が広がったときも可搬性が高い。

楽して高品質。こんなに心地の良い技術は他にあるだろうか。いや、ないだろう。

そんなことを言いながら、僕らは Node.js に浸かってゆく。

これは呪いだろう。この技術が廃れると危機感を持つその日まで、僕らは逃れることはできない。

いや、逃れることに合理性がない。少なくとも今日今の時点では。

冬の終わりを告げる春の風。ぼくらの呪いの終わりはいつか。果たして君はどうだろう。

さやの湯処 帰り道にて