Web系の開発現場にいると、毎日のように目にする光景がある。「gRPCの方が型安全で高速だろ」「いやGraphQLで統一すべき」「RESTで十分だって…」。技術選定をめぐる終わりなき宗教戦争だ。
僕はかつてWeb系企業でエンジニアとして働いていた。マイクロサービスを採用した開発現場で、まさにこのカオスを体験してきた。そこで気づいたことがある。
みんな、人が作ったフレームワークを選んでるだけなのに、なんでこんなにプライドが高いんだ?
Webエンジニアの現場で起きていること
僕がいた会社はマイクロサービスを採用していた。それ自体は先進的だったかもしれない。でも実態はこうだ。
- サービスA → サービスB:gRPC
- サービスB → サービスC:REST(JSON)
- サービスC → サービスD:GraphQL(なぜか)
- サービスD → サービスA:RabbitMQでイベント駆動
全体像を把握している人間が誰もいない。OpenAPIの定義はバラバラ、gRPCのprotoファイルは数年前のまま放置、GraphQLのスキーマは誰もメンテしていない。
新しいメンバーが入ってきて「内部APIってどうやって呼べばいいですか?」と聞くと、先輩が真顔で答える。「……案件による」。
なぜこうなるのか。マネージャーが変わればリードエンジニアも変わる。それぞれが自分の「正しい技術」を持ち込んで、前任者の方針を全否定する。技術選定に統一性なんて最初からない。あるのは「そのとき実権を握っていた人間の主観」だけだ。
で、結果どうなるか。仕様通りにはなんとかそれらしいものが出来る。ただそれだけ。誰も幸せじゃない。
冷静に考えてほしい。お前らは「選んでる側」だ
ここで一度冷静になってほしい。
gRPCを選ぶのも、GraphQLを選ぶのも、Next.jsを使うのも、Nuxtを使うのも、全部「誰かが作ったものをメニューから選んでいるだけ」だ。
レストランに例えるなら、料理を作った人(フレームワーク開発者)と、メニューから料理を選んだ客(利用者)がいる。Webエンジニアの多くは後者だ。なのに、なぜか料理人と同じレベルのプライドを持っている。
「俺はNext.js派だ」と胸を張って言う人がいるけど、それはVercelのエンジニアたちの成果であって、あなたの成果ではない。「GraphQLこそ未来」と語る人も、それはMeta(旧Facebook)が開発したものを使っているだけだ。
やっていることの本質はマイナーチェンジだ。誰かが作った枠組みの中で、設定をいじり、パラメータを変え、ビジネスロジックを書く。もちろんそれ自体に価値がないとは言わない。でも「技術力が高い」こととは別の話だ。
本当にすごいエンジニアは何をしているか
ゼルダの伝説 ティアーズ オブ ザ キングダムというゲームがある。あのゲームでは、プレイヤーが物体を自由にくっつけて乗り物や兵器を作れる。橋は自然にたわみ、チェーンは絡まり、火は連鎖的に燃え広がる。全部リアルタイムの物理計算で動いている。
しかもこれが動いているハードウェアは、スマホ並みのスペックしかないNintendo Switchだ。
任天堂のエンジニアたちは、この物理エンジンを6年かけて内製で開発した。低スペックなハードウェアの制約の中で、プレイヤーが思いつく無限の組み合わせに対応しつつ、バグをほぼゼロに抑えている。GDC(Game Developers Conference)では世界中の開発者が「どうやって作ったんだ?」と驚いたという。
これが「作る側」のエンジニアリングだ。
他にも例はいくらでもある。
- Unreal Engineの開発チーム — 世界中のゲーム開発者が使うエンジンをゼロから構築・維持している
- Reactのコア開発チーム — Webエンジニアが毎日当たり前に使っているライブラリの根幹を設計している
- OSやドライバの開発者 — 1バイトのミスでハードウェアが壊れる世界で、メモリを直接管理している
- SDK開発者 — iOS/AndroidのSDKなど、開発者が開発するための基盤を作っている
彼らは「選ぶ側」ではない。「選ばれるものを作る側」だ。そしてこういう人たちほど、SNSで技術マウントをしていない。黙々と作っている。
なぜWebエンジニアのプライドだけ異常に高いのか
ゲームエンジン開発者やSDK開発者と比べて、Webエンジニアのプライドが突出して高い理由。僕はこう考えている。
参入障壁の低さ → 人口爆発 → マウント合戦
Web開発は、プログラミングの中で最も始めやすい分野だ。オンライン教材は無限にあるし、フレームワークを使えば数日でそれっぽいものが動く。結果、人口が爆発的に多い。
人が多い場所では差別化が必要になる。「俺はTypeScriptを極めてる」「俺はクリーンアーキテクチャを理解してる」。技術選定がアイデンティティの表明になり、それを否定されると人格を否定されたように感じる。だから戦争になる。
SNSとの親和性が高すぎる
Web系エンジニアはX(旧Twitter)やQiita、Zennで技術ポエムを書く文化がある。「なぜ我々はVercelを選ぶべきか」「DDDを導入して学んだこと」。これが拡散されてバズると、承認欲求が満たされる。
一方、ゲームエンジン開発者がSNSで「Havok物理エンジンのカスタマイズ手法」とか投稿しても、ほぼ誰も理解できない。そもそもNDA(秘密保持契約)で言えないことも多い。結果、SNS上での可視性はWeb系が圧倒的に高く、あたかもWeb開発が技術の中心であるかのような錯覚が生まれる。
技術選定が「信仰」になっている
冷静に見ると、Web系の技術論争は宗教に似ている。
- 教義:Next.js + TypeScript + Tailwind + Prisma + Zod
- 異端審問:「それまだRedux使ってんの?」「jQuery……?」
- 布教活動:毎週「なぜ我々は○○を選ぶべきか」ブログ更新
- 聖典:「The Clean Architecture」「Domain-Driven Design」
そして信者が一番嫌いな質問がこれだ。
「それ、ユーザーの役に立ってる?」
……答えられない。
プログラマー分野別の技術難易度を比較してみる
完全に独断と偏見だが、プログラマーの分野を技術的な深さ・難易度で並べてみた。「その辺の一般的なレベル」での比較であり、Twitter/X規模のバックエンドのような例外は除く。
S tier(神領域)
ゲームエンジン・物理シミュレーション開発、SDK・低レベルライブラリ開発
ティアキンの物理エンジンのように、低スペックハードでリアルタイムの物理計算を安定させる仕事。あるいはiOS/AndroidのSDK、OS、ドライバなど、開発者が開発するための基盤を作る仕事。数学・物理・メモリ管理の知識が必須で、1つのバグがシステム全体を破壊する。
A tier(超高度)
AI/ML研究開発、大規模バックエンド/インフラ(Twitter規模)、AAAゲーム開発
GPT級のモデルを訓練する研究者、数億ユーザーの分散システムを設計するインフラエンジニア、Unreal Engineを使いこなして60fps死守するゲーム開発者。いずれも専門知識の深さが段違いで、「フレームワークに乗っかる」レベルでは到達できない。
B tier(高度)
組み込みシステム、データサイエンス(上位層)、中規模バックエンド
リアルタイム制約のある組み込み開発や、因果推論まで踏み込むデータサイエンティスト。クラウドで緩和はできるものの設計ミスが致命傷になるバックエンド設計。いずれも参入障壁が高く、簡単には代替できない。
C tier(標準)
一般的なWeb開発(フロントエンド/バックエンド)
Next.js + Supabase + Vercelでサクッとデプロイ。フレームワークに乗っかってCRUDを実装する。需要は多いし、ビジネス的な価値もある。ただし技術的な深さという軸で見ると、上位層とは明確な差がある。
そしてこのC tierにいるエンジニアのプライドが、なぜかS tierやA tierと同等かそれ以上という現象が、僕がこの記事で言いたいことの核心だ。
技術負債の本当の正体
Web系の現場でよく聞く言葉がある。「技術負債が溜まっている」。
でも僕が見てきた現場では、本当の技術負債はコードの品質じゃなかった。
技術選定バトルに費やした時間こそが最大の負債だった。
完璧なアーキテクチャを議論している間にプロダクトが出ない。「クリーンアーキテクチャに移行しよう」で半年潰す。「マイクロサービス化すべき」で通信方式の議論に3ヶ月。その間にユーザーは待ってくれない。競合はとっくにリリースしている。
さらにAI時代に突入した今、状況はもっと厳しい。コードはAIが書いてくれる。フレームワークの知識やアーキテクチャの理解は、AIが一番得意とする領域だ。「どの技術を選ぶか」で差別化できた時代は終わりつつある。
残るのはシンプルな事実だけだ。動く。売れる。それが正義。それ以外は全部ノイズ。
まとめ — 作る側と選ぶ側の差を自覚しよう
この記事で言いたいことはシンプルだ。
フレームワークを使っている時点で、僕たちWebエンジニアは巨人の肩に乗っている。Next.jsもReactもGraphQLも、天才たちが作ったものを使わせてもらっているだけだ。
それ自体は悪いことじゃない。巨人の肩に乗ることで、ビジネスに集中できる。プロダクトを速く届けられる。それがWeb開発の最大の強みだ。
でも、プライドを持つなら「何を選んだか」ではなく「何を作ったか」で持つべきだと思う。
技術選定で戦う暇があったら、プロダクトを出そう。フレームワーク論争で消耗するくらいなら、ユーザーに価値を届けよう。
「俺はNext.js派だ」じゃなくて、「俺はこのプロダクトを作った」。
そっちの方が、よっぽどカッコいいと思わないか。


コメント