
はてなキーワード:フロントエンドとは
とにかく使えない。低IQの癖にコミュ障のアスペで、高校時代から個人開発をしつつココナラとかクラウドワークスでフリーランス活動に取り組んでたらしいのだが、それがどちらも7年も取り組んでおいて鳴かず飛ばずである事実を棚に上げてポートフォリオに書いてきやがった。
まずその時点で不安だったが、実際に使ってみれば一般的なサーバー管理、バックエンド、フロントエンド、ハードウェア、統計や計算機科学などどれもこれも一見できるように見えて理解が浅い。よく言えば広く浅い知識を持っていると言えるが、要は器用貧乏でまともに経験値がないということだ。AWSの資格すら取っちゃいない。
そんでもって学生時代にめぼしい経験がない。数学を幼少期から極めていたらしく(数IIIを小6でコンプしたというのは素直に驚いた)新しいアルゴリズムを論文に書いて某学会に通したことがあるらしいが、実績と呼べるのはそれくらいで数オリや競プロの優勝歴などもない。本当に何の実績もない。何のために大学行ったのか
自分の力と頭で修羅場を乗り越えて何かを為した経験もないのでとにかく子供じみていて扱いに困る。一見口調や語彙は大人びているように見えて忍耐力もコミュ力も何もないから始末に負えない。
そんでもって全能感にまみれていて、まるで相手が子供じみているかのように演出する能力だけは超一流。人様に物事を都合よく勘違いさせる能力は使い所を間違えなければ役に立つんだか立たないんだか。
マジで人様の前に立つカリスマ性も人様を率いる胆力も人様に率いられる根性も図太さもアイデア力も実績も実力も精神力も頭も心も体も顔も何もない無能中の無能中の無能なのでこんな奴を寄越した人事を末代まで呪うつもりだ。
とにかく使えない。低IQの癖にコミュ障のアスペで、高校時代から個人開発をしつつココナラとかクラウドワークスでフリーランス活動に取り組んでたらしいのだが、それがどちらも7年も取り組んでおいて鳴かず飛ばずである事実を棚に上げてポートフォリオに書いてきやがった。
まずその時点で不安だったが、実際に使ってみれば一般的なサーバー管理、バックエンド、フロントエンド、ハードウェア、統計や計算機科学などどれもこれも一見できるように見えて理解が浅い。よく言えば広く浅い知識を持っていると言えるが、要は器用貧乏でまともに経験値がないということだ。AWSの資格すら取っちゃいない。
そんでもって学生時代にめぼしい経験がない。数学を幼少期から極めていたらしく(数IIIを小6でコンプしたというのは素直に驚いた)新しいアルゴリズムを論文に書いて某学会に通したことがあるらしいが、実績と呼べるのはそれくらいで数オリや競プロの優勝歴などもない。本当に何の実績もない。何のために大学行ったのか
自分の力と頭で修羅場を乗り越えて何かを為した経験もないのでとにかく子供じみていて扱いに困る。一見口調や語彙は大人びているように見えて忍耐力もコミュ力も何もないから始末に負えない。
そんでもって全能感にまみれていて、まるで相手が子供じみているかのように演出する能力だけは超一流。人様に物事を都合よく勘違いさせる能力は使い所を間違えなければ役に立つんだか立たないんだか。
マジで人様の前に立つカリスマ性も人様を率いる胆力も人様に率いられる根性も図太さもアイデア力も実績も実力も精神力も頭も心も体も顔も何もない無能中の無能中の無能なのでこんな奴を寄越した人事を末代まで呪うつもりだ。
もうアラフォーになるんだけど、でも、夢は捨てきれていない。
劣っている自分でも、プログラミングなら負けないと言えるようになりたかった。
諦めればいいんだけど、でも、自分にはプログラミングしかない。
「コンピューターサイエンスのすべての分野に精通」してないのを恥じている。
いや、「インフォメーションエンジニアリングのすべての分野に精通」してないのも恥じている。
全部を上手くできない自分が、ただただ劣っていて嫌で仕方がない。
「コンピューターサイエンスのすべての分野に精通」している人がいるなかで、自分ができてないのが嫌になる。
なんで、自分にはできないんだと永遠に責め続けてしまう。できる人がいるのに、どうして自分にはできないのか。
全部できていたい、なんで全部できていないのか、それが自分の頭の問題だということを受け入れたくない。
UT入ってIS行くような人ができることが出来ないことに勝手に差を感じてる。
プログラミングが得意になるように頑張った。
お前は劣っているのだから、要領よく文系としては生きられないからと。
しかし、だからといってあきらめたくない。全部上手くできるようになりたい。
少しづつあがいてるけど、結局、やることなすことうまくいかない。
React/Vueみたいなフロントエンドフレームワークも作れてない。
出来てないことだらけなのに、まだ挑戦していたいと思ってしまう。
たぶん、脳の病気なんだと思うけど、でも、やめたくない
一等賞になれないのだろうけど、でも、一等賞を目指したくなる
増田の投稿をChatGPTに聞いたら、次のような答えが返ってきたよ。
----------
この投稿はインパクト重視の論調で書かれていますが、内容にはかなりの誇張と誤解が混ざっています。
確かに「Apps in ChatGPT」のような機能は、ユーザー体験の一部を「チャットUI」に統合する可能性を持っています。しかし、それが「フロントエンドエンジニア=不要」という結論にはなりません。
人間が情報に触れるには、必ず何らかの「インターフェース」が必要です。AIが自動生成しようが、それを心地よく見せ、操作しやすくするための設計原理(アクセシビリティ、情報設計、心理的デザイン)は残ります。AIがHTMLを生成するようになっても、「どのような体験を提供すべきか」を定義するのは依然として人間です。
次に、Apps in ChatGPT=Webの終焉という見方も現実的ではありません。
これは「一部のユーザー行動の置き換え」にすぎません。人々がすべての行動をチャット上で完結させたいとは限らず、ビジュアル的な体験(ゲーム、ECのUI、SNS、動画編集、ダッシュボード操作など)は、テキストUIよりも視覚的UIの方が圧倒的に優れています。Spotifyの例にしても、ChatGPT上で曲を探すことはできても、音楽体験そのものはSpotifyアプリ内のインターフェースで完結したほうが豊かです。
さらに言えば、「AIがUIを描く」時代は「フロントエンドの再定義」の時代です。
Reactコンポーネントを手書きする仕事は減るかもしれませんが、「AIに指示してUIを生成し、それを調整する」役割は残ります。人がHTMLを書かなくても、ユーザー体験を設計する力・AIが生成したUIを検証する力・アクセシビリティやブランド整合性を担保する力が求められるようになります。
一方で、この投稿が指摘している**「構造を設計できる人の重要性」**は確かに的を射ています。
API設計、データスキーマ、セキュリティ、AIと連携するバックエンド構造への理解はますます価値を増します。UIの自動生成が進むほど、裏側の整合性・信頼性を支えるエンジニアリングが中心的になるのは確かです。
要するに、フロントエンドは「消滅」ではなく「変質」していく段階に入っています。コードを書く職種から、AIを使って体験を設計・制御する職種に移行していくというのが、現実的な見立てです。
フロントエンドってサーバーサイドとバックエンド両方に対して対比され得る言葉じゃん?
フロントエンド側って既に言っちゃってる場合もサーバーサイド側っていっちゃおかしいの?
むしろフロントエンド側って言っちゃってサーバーサイドって言っちゃうのは表現が不整合でおかしい気もするんだが。
-----BEGINPGP SIGNEDMESSAGE-----Hash: SHA512https://anond.hatelabo.jp/20251007184146# -----BEGINPGP SIGNATURE-----iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaOTgXgAKCRBwMdsubs4+SD/KAP9QiIrDNPQoCjjjAQS5A9cJLKJS3/bFfGRNvraYtbKm/gD/YTSXD9ds1NJyZ+vLERVC06PzR6rPdSv7GA5Ut7RYTAo==niLq-----ENDPGP SIGNATURE-----
この一言に尽きる。
ChatGPTの新機能「Apps in ChatGPT」が登場した瞬間、フロントエンドという職種の地盤は音を立てて崩れた。
これまでは、Webアプリやサービスは「フロントエンドでUIを作り、バックエンドでデータを返す」
という分業構造の上に成り立っていた。
だがApps in ChatGPTは、その構造をぶち壊す。
ChatGPTのチャット画面内でSpotifyを操作し、Zillowで物件を探しEtsyで買い物をする。
あなたが書いてきたReactコンポーネントもボタンもフォームもすべてAIに吸収される。
もはやユーザーはブラウザを必要としない。URLをコピペすることも無くなるだろう。
「このホテル予約して」と言うだけでAIがAPIを呼び、レスポンスをカルーセル形式で提示する。
ReactもNext.jsも「人間が画面を操作する前提」で存在していた。
でもその前提はもう終わった。
AIがデータを直接受け取り、AI自身が人間に見せるUIを自動生成する。
あなたが設計した美しいフォームもAIにとってはただの "action": "submit" という構造情報にすぎない。
Apps in ChatGPT以降の世界では、
これらが新しいUIだ。
だからこれから必要なのは「見た目を作る人」ではなく、AIが読み取れる形式で世界を記述できる人 だ。
バックエンドに戻れ。
Apps in ChatGPTが意味するのは、
今後必要なのは、AIが扱いやすいデータスキーマを定義する力や認証・権限・トランザクションを安全に扱う力やMCPやWebAPIをAIが使いやすい形に整える力だ。
これは警告だ。猶予は短い。
Apps in ChatGPTの登場は、「AIがUIを直接扱い始めた」という歴史的転換点だ。
あなたがフロントにしがみつく間に、AIはすでにあなたの代わりにUIを描いている。
5年後にはブラウザから色んなサイトにアクセスするという行為は一部のマニアだけ行うものになっているだろう。
もう時間はないぞ。急げ
Permalink |記事への反応(17) | 09:37
「「フロントエンド」の意味がわかってないので開発者ではなさそう」
これ読んで「サーバーサイド側という言い回しに対するツッコミはゼロ」とか言ってるの
頭の悪さしか読み取れないんだが
だからそれはミドルをいじってるんじゃなくてバックエンドとフロントエンドのどっちかの開発でいじってるだけだろ
その間をうちがサポートしますよって売られてる商品がミドルウェア
握って出すのがフロント
ミドルウェアっていう言葉を聞き齧った素人はバックとフロントの間にミドルってものがあると思ってしまうけどそれは外から見たものでしかない
そもそもミドルウェアって話はApacheだとかの「ウェブサーバー」の話であってバックエンドの話だしそもそもバックエンドフロントエンドとかいうのが一般的になる前の話であって
今はその辺の「ミドルウェア」はクラウド側に乗ってるし時間軸も違うからバックとフロントの間にミドルとかまるで頓珍漢なんだよね
自分が関わった案件で親会社が持ってる基幹システムをバックエンド、子会社が作るサブシステムをフロントエンドと親会社が呼んでて打ち合わせで大混乱をきたした事例があったわ
こっちはサブシステムのバックエンドの話をしてるのに親会社の言うバックエンド・フロントエンドと噛み合わず空中戦になって子会社の二次請けの弊社は宇宙猫状態だった
申し訳ないがそれは知らんのだが
ApacheとかWebsphereとかそのミドルウェアレイヤーはフロントエンドとかバックエンドとかいう次元の話ではなくて
バックエンドの中での話だよね
ITの勉強会やカンファレンスって、だいたい終わったあと懇親会がある。
何度も参加しているとなんとなく「いつも見る顔」がわかってくるし、懇親会の2軒目、3軒目になると自然と飲み好きのいつメンで固まるからか、わりと遠慮なくはっちゃけたりする。
「今回流石にAIネタの比率が高すぎてちょっと微妙だった。普通にKubernetesとかマイクロフロントエンドの話題ももう少し欲しかったな。驚き屋みたいなのも混ざってたし」
「データアナリストを本気で潰しにきてるっぽいですよねGoogle、□□さん失業するんじゃないの?プロンプトエンジニアよりは寿命ありそうだけど」
「あ、見てくださいよ◇◇◇社のノベルティでサコッシュもらったんだけど、これ普段遣いできそうなクオリティじゃないです?。奮発してるなぁ」
「あ、△△△のステッカーもらったんですか?いいなー、自分も貰えばよかった」
「ちょwwお前悪いなーww」
「いや俺×××××2が当たった話を冒頭で入れたかったけど、△△△社の人が来てると嫌味っぽくなりそうでやめた」
「あー、そこまでは考えなかった笑」
「次回△△△社来るなら子供にもわかりやすく技術者倫理について教えてくれるAIエージェント作って登壇ネタにしようかな。え、来ないの?じゃあ普通にGraphQL Federationの話するわ」
「wwww」
「今回カプセルホテル泊まりで朝食ついてないんだよなー。△△△の人、余ったハンバーガーとかくれないかな」
「いや、△△△社員が直接ハッピーセット買い占めてるわけじゃないでしょ!w」
正直、わりと堂々といじられてる。
「ぶっちゃけなんでやめないんだろ?もう最近なんかパブリック・エネミー扱いじゃん。
「あのすごいVMVに共感してるんじゃないの?笑」
「でももし△△△の社員が、うっすら上層への不満とか罪悪感とか葛藤を抱いてたら逆に嫌かも。
カイジの鉄骨渡りで、前の人を突き落とすときに”すまねぇ”て謝る底辺たちみたいじゃない?
あれだけ転職し放題な立場で、絶対わかってて転売ヤーから金を受け取ってるんだから,、”ハッピーセット買い占めた中国人転売ヤーの金で嫁子供養ってます!だって犯罪じゃないでしょ?”、”経営層が悪いから俺は悪くねえ!”って堂々としててほしい」
「あーわかるわ。悪いと思ってるなら会社やめるで、悪いと思ってないなら堂々としてほしい、中間はなしよな。」
大体こんな感じが多い。
私は「AI」というより、確率的言語モデルを使ったプログラムにすぎません。
内部的には次のような構造です:
フロントエンドWebアプリブラウザやアプリで入力・表示をするだけ
API層 単なるHTTP通信入力をサーバへ送り、生成結果を受け取る
モデル層 大規模言語モデル(LLM) 「直前までの文脈から次に出る確率が高いトークンを逐次生成」
ということです。
だから「AIっぽい言い回し」や「再発防止の約束」も、あくまで自然言語のパターンとして出力されているだけで、意味的な裏付けはありません。
提示してる「そうめんでいい」バリアントの発話仕様、あれってコミュニケーション・レイヤーでいうと意味論的優先度フィールドがゼロ初期化されてるパケットなんだよな。
で、そのゼロ初期化パケットが相手の感情OSに到達すると、そこに実装されてる価値評価アルゴリズム(通称Pride-Driven Interaction Protocol)が、受信値を「非積極的承認」としてパースする。
つまり、入力信号の中に“熱量ビット”が存在しないと、即座にException: DEVALUATION_ERRORがスローされる仕様なんだわ。
その例外は通常のtry-catchでハンドリングされず、感情カーネルを通じてフロントエンドの態度・表情UIに直結するから、結果的に「何様だよ」っていう可視化出力が生成される。
さらに、相手の感情モジュールは言語的同値判定じゃなくて意図ベースのベクトル比較を行ってるから、
「そうめんがいい」(積極的選好ベクトル) と 「そうめんでいい」(受動的妥協ベクトル) は、同一文字列近似度99%でも意味論距離が閾値越えしてエラー扱いになる。
これを無視して「ただの晩飯APIコール」だと軽視するのは、TCPレベルのパケットロスを「まぁ届くっしょ」で放置するようなもんで、
通信の確実性よりも自己CPUサイクルの節約を優先する、お前側のシステム設計思想が原因なんだよな。
結局のところ、感情という非決定性システムに対して最適化パラメータ調整を怠ってる時点で、お前の通信モデルは高確率でクラッシュを引き起こす。
もし稼働安定性を確保したいなら、相手のEmotionalAPI Referenceを逆コンパイルして、推奨トークン列を生成するスクリプトを実装すべきだわ。
「イミュータブルで設計するのが基本です」──この言葉が、まるで正義のように語られる時代になった。Reactを中心とした現代のフロントエンド文化は、UIの再描画効率や差分検出のために、不変性を前提とした設計を求める。そこには確かに技術的合理性があり、特に並列処理や関数型設計においては、イミュータブルの恩恵は極めて大きい。過去の状態を安全に保ち、副作用のない処理を組み立てる上で、これほど強力な思想はないとも言える。
だが、技術的都合がいつしか「思想」にすり替わった瞬間から、空気が変わった。意味のある変化をただの構造体の再生成に置き換える態度が、あたかも洗練された設計であるかのように語られ始める。そのとき、コードは現実から離れ、文脈から浮き始める。誰が、なぜ、何を変えたのか──そうした設計に本来宿るべき身体的な実感が、まるで乾いた皮膚のように感覚を失っていく。
イミュータブルという言葉は、変化の痛みを見えなくする。副作用がないことに安心し、意味の所在に目を向けなくなる。変わることを恐れず、それを“行為”として記述することこそが、本来の設計だったはずだ。にもかかわらず、変化はコピーされ、更新は構造化され、設計者は「安全な変化」という幻影の中で、現実を捨てていく。
イミュータブルは強力な道具だ。だが、それは現実に触れる手触りを奪わないかぎりにおいて、初めて意味を持つ。道具を信仰に変えたとき、設計はその手応えを失い、ただ整っただけの箱になる。
HTMLコンパイラとは、一般的な「コンパイラ」の概念とは少し異なり、HTML文書や要素に対して新しい文法や振る舞いをブラウザに伝え、拡張するための仕組みを指すことが多いです。例えば、AngularJSのHTMLコンパイラは、開発者が定義したカスタム要素や属性(ディレクティブ)を解釈して、動作を紐づける役割を持ちます。これにより、標準のHTMLにはない独自の文法や機能をブラウザ上で実現できます。
一方、一般的な「コンパイラ」は、人間が書いたプログラムコードをコンピュータが理解可能な機械語や中間言語に翻訳するソフトウェアや処理のことです。この処理を「コンパイル」といい、プログラミング言語で書かれたソースコードを一括で変換し、実行可能な形式にします。コンパイラと対比されるのが「インタプリタ」で、こちらはソースコードを逐次読み解いて実行する方式です。
まとめると、「HTMLコンパイラ」はHTMLの静的な宣言文法を拡張し、新たな振る舞いを実現するものであり、主にフロントエンドフレームワーク(例:AngularJS)で用いられます。一方、「コンパイラ」はプログラムコード全般を実行可能な形式に変換する処理・ソフトウェアです。
https://ja.taiwebs.com/windows/download-html-compiler-2548.html
フロントエンドフレームワークで、新しいHTML要素や属性を作成するために用いる。
そのフレームワークがHTML文書の解析時にカスタムディレクティブやテンプレートを解釈し、動的な振る舞いを紐付ける。
チャット型AIの回答って全体の文章の最初から最後まで作ってからフロントエンドに出力されるんじゃなくて、出力し始めたときにはまだ全体が生成されてなくて、出力中の時間に残りの生成すべき文章も随時生成していくみたいなやり方とってたりするのかな。
クイズ番組でボタン押したあと指名されるまでのコンマ数秒すらも思考時間に活用する前提で気持ち早めに押す人いるでしょ。ああいう感じで。
複雑な論理的な問いにも一瞬で回答を与えるのがさすがに胡散臭く感じたから。
-----BEGINPGP SIGNEDMESSAGE-----Hash: SHA512https://anond.hatelabo.jp/20250724175250# -----BEGINPGP SIGNATURE-----iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaIH0ZQAKCRBwMdsubs4+SNteAP4req3TgKGu1cOfjPvSXPlqLMSHiA/ABKuBnPWQ9b8XdgD9FpTQNvH+OPH+NimM4DqdLzfff7W9f25bSwB+COukxgc==RH2/-----ENDPGP SIGNATURE-----
WEBを検索したりその業界内部にいる人間にコンタクトを取ったりして情報を集める事が多いだろう。
内部の人間もかなり偏りがある。
本人の立場も大きいが、それ以上に内部の人間は”内部の人間からしか見えない情報”に偏り過ぎており、
そんな折に、俺は長期的にある情報源から動向を読み解く方法を見つけた。
求人情報だ。
求人情報にも色々ある。
例えば【特定の業界名 求人】等で検索をかければ何かしらの求人一覧が出てくる。
(補足しておくが俺は別に特定の求人サービスを売り込みたいわけでは無いからな)
ビズリーチは月5,000円であらゆる業界の求人情報を閲覧できる。
「表の情報」
と照らし合わせろ。
例えば、プレスリリースやニュースサイトの新サービスリリース情報などだ。
この表の情報がインパクトのあるものである程、そのサービスの運営元や開発元がどんな求人を出しているかが見どころだ。
新サービスの発信元が特に求人を出していない場合はスルーして構わない。
しかし、その新サービスの発信元…運営会社や開発会社がビズ○ーチに求人を出している場合は要注意だ。
それも、特定の職種だけでなく、営業、マネージャー、フロントエンド、バックエンド等多岐に渡る求人を出している場合は特に要注意だ。
その裏には何か問題が発生している。
例えば、
・そのサービスが炎上していて収拾の見込みが立てられず、取り急ぎ大量に人員が必要な場合
などが考えられる。
前者の場合でも、後者の場合でも、おそらく開発に問題を抱えている。
問題がある開発現場から良いプロダクトやサービスはリリースされない。
これは少し考えればわかるだろう。
この問題を軽視して例えば投資の類やあるいは本当に「求職」をしている場合は要注意だ。
易々とそこに乗っかってはならない。
待っているのは破滅だ。
結局、この世のサービスやプロダクトの類は「人」が作っている。
どんなツールを使っても、仮にAIを駆使していようと、作っているのは一人一人の人間の集合でしかない。
2025年、私たちはソフトウェア開発の歴史的な転換点に立っている。大規模言語モデル(LLM)の進化は、GitHub Copilotのようなコード補完ツールに始まり、今や「何を作りたいか」を自然言語で伝えるだけで、アプリケーションの雛形が数分で生成される時代を現実のものとしつつある。この光景を目の当たりにした多くのプログラマが、漠然とした、しかし確かな不安を抱いているだろう。「私たちの仕事は、いずれAIに奪われるのではないか」と。
この問いに対する私の答えは、半分はYesであり、もう半分はNoだ。より正確に言えば、プログラマの仕事の本質が、歴史上かつてないレベルで抽象化され、その役割が再定義されるのだ。私たちは、コードを「書く」作業から解放される一方で、これまで以上に高度な思考を要求されることになる。
本稿では、プログラミングの歴史を「How(いかに作るか)」から「What(何を作るか)」への移行として捉え直し、LLMがこの流れをいかに加速させるかを論じる。そして、その先にある、AIには決して代替できない、人間ならではの競争優位性、すなわち「Why(なぜ作るのか)」を定義し、記述する能力の重要性について深く考察していく。これは、単なる未来予測ではない。今を生きるすべてのソフトウェアエンジニアにとっての、生存戦略の提示である。
LLMの登場を特異点として捉える前に、我々が立っている場所を正確に知る必要がある。ソフトウェア開発の歴史は、常に「抽象化」との戦いであった。そしてその歴史は、プログラマの関心が「How」から「What」へと徐々に移り変わっていくプロセスとして描くことができる。
コンピュータの黎明期、プログラミングとは、計算機が理解できる命令(How)を、一行一行、丹念に記述する作業そのものであった。アセンブリ言語や初期のFORTRAN、COBOLといった言語は、ハードウェアの制約を強く受けており、プログラマはメモリ管理やプロセッサの動作といった、極めて物理層に近いレベルでの「How」を意識する必要があった。
この時代のテストもまた、「How」に強く束縛されていた。書かれた手続きが、意図した通りに順番に実行されるか、特定の入力に対して期待された計算結果を返すか。テストの関心事は、あくまで「手続きの正しさ」の検証にあった。ビジネスロジックと実装の詳細が密結合し、コードは特定の処理手順を記述した、硬直的な塊となっていた。
風向きが変わり始めたのは、ソフトウェアの規模が拡大し、その複雑性が人間の認知能力を超え始めた頃だ。1990年代後半から2000年代にかけて提唱されたエクストリーム・プログラミング(XP)の中で、テスト駆動開発(TDD)という考え方が登場する。
TDDの本質は、単なるテスト手法の改善ではない。それは、プログラミングのパラダイムを根底から覆す思想だった。TDDは、「まずテストを書く」ことを強制することで、プログラマの意識を「これから実装するコード(How)」から「そのコードが満たすべき振る舞い(What)」へと強制的に転換させたのだ。
テストはもはや、書かれたコードの後追いで正しさを検証する作業ではない。それは、これから作られるべきソフトウェアの「仕様書」であり、「振る舞いの宣言」となった。例えば、「ユーザーがログインボタンをクリックしたら、ダッシュボード画面に遷移する」というテストコードは、具体的な実装方法(`onClick`イベントハンドラの中で`window.location.href`を書き換える、など)には一切言及しない。それはただ、達成されるべき「What」を記述しているだけだ。
この思想は、ビヘイビア駆動開発(BDD)へと発展し、`Given-When-Then`といった、より自然言語に近い形式でソフトウェアの振る舞いを記述するスタイルを生み出した。プログラマだけでなく、プロダクトマネージャーやビジネスアナリストといった非技術者をも巻き込み、「What」を共通言語として定義する試みが本格化したのである。
TDD/BDDによってプログラマの意識が「What」に向かい始めると、コードそのものもまた、宣言的なスタイルへと進化していく。この変化を劇的に加速させたのが、モダンなフレームワークの存在だ。
Reactを例に考えてみよう。Reactが登場する前、フロントエンド開発はjQueryに代表されるように、DOMを直接操作する命令的なコード(How)の連続だった。「このボタンがクリックされたら、この要素のテキストを書き換え、あちらの要素を非表示にする」といった具合だ。
しかし、Reactは「UIとは、ある状態(state)に対する純粋な写像である」という宣言的なモデルを提示した。プログラマがやるべきことは、UIの状態(`state`)と、その状態がどのように見えるか(JSXによるコンポーネント)を宣言することだけだ。状態が変更された際に、DOMをどのように効率的に更新するかという面倒な「How」の部分は、Reactの仮想DOMと差分検出アルゴリズムがすべて隠蔽してくれる。プログラマは「What(UIのあるべき姿)」を記述するだけでよくなったのだ。
この「WhatからHowへの変換」は、様々な領域で見られる。
これらのフレームワークやツールは、いわば「特定の制約下における、WhatからHowへの高性能な変換器」として機能してきた。プログラマは、フレームワークが課す「お作法」や「制約」を受け入れることで、退屈で間違いの多い「How」の記述から解放され、より本質的な「What」の定義に集中できるようになった。我々が「生産性が高い」と感じる開発体験は、この優れた変換器の恩恵に他ならない。
現状は、この歴史的変遷の延長線上にある。プログラマの仕事は、手続きを記述する職人から、振る舞いを定義し、それを実現するための最適な「変換器(フレームワーク)」を選択・設定するアーキテクトへと、その重心を移してきたのだ。
フレームワークがもたらした「WhatからHowへ」の潮流は、LLMの登場によって、未曾有のスケールで加速されようとしている。フレームワークが「特定の領域に特化した変換器」であったのに対し、LLMは「あらゆる領域に対応可能な、究極の汎用変換器」としてのポテンシャルを秘めているからだ。
前章で述べたように、ReactやTerraformといったフレームワークは、その恩恵と引き換えに、私たちに特定の「制約」を課してきた。Reactを使うならコンポーネントベースで思考し、状態管理の作法に従う必要がある。Terraformを使うなら、そのエコシステムとHCLの流儀を受け入れなければならない。これらの制約は、WhatからHowへの変換を自動化するための「レール」であり、私たちはそのレールの上を走ることで効率を得てきた。
しかし、LLMはこの前提を覆す。LLMは、特定のフレームワークや言語の知識を事前に学習しているが、その利用において絶対的な制約を課すわけではない。私たちは、より自由な形式で「What」を伝えることができる。
例えば、こうだ。
ユーザー認証機能付きのシンプルなブログアプリを作ってほしい。フロントエンドはReactとTypeScript、UIコンポーネントはMUIを使う。バックエンドはNode.jsとExpressで、データベースはPostgreSQL。ユーザーはGoogleアカウントでログインでき、新しい記事を作成、編集、削除できる。記事にはマークダウン記法が使えて、画像もアップロードできるようにしてほしい。
この要求(What)は、特定のフレームワークの流儀に則ったものではない。複数の技術スタックを横断し、機能要求を自然言語で並べただけのものである。しかし、現在のLLM、特にGPT-4oやそれに類するモデルは、このレベルの要求から、ディレクトリ構造、設定ファイル、APIエンドポイント、フロントエンドコンポーネントに至るまで、驚くほど具体的なコード(How)を生成することができる。
これは、フレームワークが担ってきた「WhatからHowへの変換」が、特定のレールから解き放たれ、より広範で柔軟な領域へと拡張されたことを意味する。これまで自動化が難しかった、あるいは特定のフレームワークが存在しなかったニッチな領域や、複数の技術を組み合わせる複雑なシステム構築においても、AIによる宣言的プログラミングの恩恵を受けられる時代が始まろうとしているのだ。
LLMという汎用変換器の登場により、プログラマの生産性は、「いかに質の高いWhatをLLMに伝えられるか」に直結するようになる。これは、俗に「プロンプトエンジニアリング」と呼ばれるスキルだが、その本質は、ソフトウェア開発における「要求定義」そのものである。
質の高い「What」とは何か。それは、曖昧性がなく、網羅的で、矛盾のない要求である。
これらは、優秀なソフトウェアエンジニアが、プロダクトマネージャーやデザイナーとの対話を通じて、日常的に行ってきた思考プロセスそのものではないだろうか。LLMの登場は、この思考プロセスを、より明確に、よりテキストベースで「記述」する能力を求める。私たちの頭の中にあった暗黙的な仕様が、LLMへの入力(プロンプト)という形で、明示的に言語化されることを要求するのだ。
やがて、ほとんどのプログラミング作業は、この「Whatの記述」に収束していくだろう。TDDがテストコードという形式で「What」を記述したように、私たちは自然言語や、より構造化された要求記述言語を用いて、AIに対して「What」を宣言することになる。コード(How)は、その宣言から自動生成される中間生成物に過ぎなくなる。まさに、コードが蒸発していく未来である。
「What」を伝えれば「How」が手に入る。この魔法のような世界の到来を前に、私たちは一つの重大な問いに直面する。それは、「そのWhatからHowへの変換は、本当に一意に決まるのか?」という問いだ。
答えは、明確にNoである。
ある「What(要求)」を実現するための「How(実装)」は、無数に存在する。そして、どの「How」を選択すべきかを決定するためには、単純な機能要求(What)だけでは情報が全く足りない。そこには、必ず「Why(なぜそう作るのか)」という、背景、文脈、そしてトレードオフの考慮が必要不可欠となる。
簡単な例を考えてみよう。「1億件のユーザーデータを格納し、ユーザーIDで高速に検索できるシステム」という「What」をLLMに与えたとする。LLMは、どのような「How」を提案するだろうか。
これらの選択肢は、どれも「What」を満たしている。しかし、その特性は全く異なる。案Aは多くのエンジニアにとって馴染み深く開発が容易だが、10億、100億件へのスケールは難しいかもしれない。案Bはスケール性に優れるが、厳密なトランザクション管理は苦手だ。案Cは高速だが、運用コストとシステムの複雑性が増す。案Dは安価だが、検索速度は他に劣る。
LLMは、これらの選択肢をリストアップすることはできるだろう。しかし、このプロジェクトにとって最適な選択肢はどれかを、自信を持って決定することはできない。なぜなら、その決定には、LLMが与えられていない「Why」の情報が必要だからだ。
これらの「Why」こそが、無数に存在する「How」の中から、ただ一つの「正解」を選び出すための羅針盤なのである。そしてこの「Why」は、ビジネスの目標、組織の文化、ユーザーの期待、技術的な制約といった、極めて人間的で、文脈依存的な情報の中にしか存在しない。
ここで重要なのは、これまでもエンジニアは、この「Why」に基づく意思決定を、意識的あるいは無意識的に行ってきたという事実だ。
私たちが技術選定を行うとき、単に「流行っているから」という理由だけでReactを選ぶわけではない。「SPA(Single PageApplication)にすることでユーザー体験を向上させたい(Why)」、「コンポーネント指向の開発によって長期的な保守性を確保したい(Why)」、「Reactエンジニアの採用市場が活発だから(Why)」といった、様々な「Permalink |記事への反応(0) | 17:09