
2026/10/04 13:10
なぜ開発者はプラットフォームを利用するべきなのか
RSS: https://news.ycombinator.com/rss
要約▶
日本語翻訳:
長年にわたり、「プラットフォームを使用する」という強い提唱にもかかわらず、多くの開発者が現代的なブラウザネイティブAPIを採用せず、慣れ親しんだライブラリをもちいたJavaScriptで機能を実装し続けています。この好ましさは、ブラウザの遅延と複雑なCSSに由来する歴史的習慣、「IKEA効果」(自作コードを高く評価する心理的バイアス)といった心理的偏見、あるいは標準規格が解決可能な課題についての無知さに起因します。その結果、チームは
<dialog> や自動的な列状ストレージといった最適化された組み込み機能を使う代わりに、カスタムモーダルダイアログや圧縮システムといった基本的なソリューションを再発明することが多く、冗長で「バラオック(装飾的・複雑)」なコードとなり、パフォーマンスの悪化によるユーザー負担と保守コストの膨張をもたらします。シニアエンジニアはこのようなレガシーコードを簡潔なネイティブ呼び出しにリファクタリングできますが、若手開発者は残存する技術的障壁や自前のソリューションを構築する好みにより問題を過剰設計してしまいます。ドキュメントはライブラリの推奨からMDNなどのリソースへの焦点が移行していますが、業界の習慣は依然として続いています。今後、人工知能には二重の未来が待っています:大規模言語モデル(LLM)は曖昧なプロンプトに対して速いネイティブAPIを自然に優先するため、採用を加速させる一方、注意深く管理されない場合、コードの重複や非標準的なパターンを永続させる可能性もあります。本文
「プラットフォームを利用せよ」への真の理由:歴史的背景と開発者の心理
何年もにわたり、ウェブ標準・パフォーマンス・アクセシビリティを擁護する人々は、開発者に対し**「プラットフォームを利用せよ」と説いてきました**。私もかつてその一人でした。
主張はシンプルです。 「ブラウザが対応できることを、わざわざ JavaScript で自作する必要はあるのでしょうか?ブラウザに備わっている機能よりも性能が劣り、使いやすさも損なわれる可能性が高いのです」。
しかし、なぜ多くの開発者がこの説得を拒否するのかを理解するためには、対照的な立場(プラットフォーム懐疑論者)を取る価値があります。明確な理由はいくつかあります。
1. 歴史的な背景:ブラウザが追いつくまで
長らくブラウザは、構築されるエコシステムに追いつく側でした。
- 空白の埋め合わせ: jQuery などのライブラリが重要な機能を補い、ブラウザへの API 実装を待たなければなりませんでした。
- 遅れ集团の時代: IE6 などの古くなったブラウザに対応するため、待つ必要がありました。
- 状況の転換: 今日では大部分のブラウザが定期的な更新を行うようになりました(Safari は除くが、年約 7 回更新でも悪くない)。
- 現在の課題: しかし2020 年代頃までには、ウェブ開発者は決して平坦ではないウェブ環境に直面することになります。そのような状況下において、「自社で実装する」ことは合理的な選択でした。
2. 「慣れ」とドキュメントの偏り
- npm に固執する理由: npm から React コンポーネントを探すことに慣れてしまったため、問題に関わらず第一選択が npm になります。
- 例:
を npm で検索しても、「単に CSS のsticky positioning
を使え」というパッケージは存在しません。position: sticky
- 例:
- 有用な隙間の埋め方:
- 堅牢な標準があるにもかかわらず、npm ライブラリがフレームワークの使いやすさとプラットフォームの間で「有用な隙間」を埋める役割を果たしました。
- 例: React 開発者が「生の DOM API は不快(icky)」と感じつつも、仮想リストライブラリなどが純粋なパフォーマンスのために生の DOM API を使いながら、理解しやすい高レベルのプリミティブを提供しています。
- ドキュメントの分散:
- MDN が主要情報源になるまでは、情報はブログや Stack Overflow に散在していました。
- その中には、「有名なライブラリ(jQuery や GreenSock)を使えばいい」と教えるだけのサイトさえありました。
- 比較例: Dragula サイト vs. MDN のドラッグ&ドロップページ。前者がいまだに説得力があります。
3. 開発者の心理と「IKEA 効果」
もし対立構造だけであれば、反発の説明は十分ではありません。自ら物事を構築することそのものが楽しいのです。
- 学習の喜び:
- モーダルダイアログを作る際、単に
タグを使うだけでなく、以下の要素を学ぶ過程が享受されます。<dialog>
とposition: absolute
で位置設定z-index
のbody
制御(背景スクロールの防止)overflow- アクセシビリティ対応(Esc キー閉じ、フォーカストラップ、フォーカス還元の処理)
- モーダルダイアログを作る際、単に
- カスタマイズの楽しさ:
- アニメーションやテーマ、「閉じる」ボタンなどを追加する過程で、npm に公開できるライブラリが完成します。
- これには単に
タグを使って終わらせることとは比べられません。<dialog>
- 専門性の獲得:
- 多くの擁護者もかつてはポリフィルやシムの作者でした(例:PouchDB 開発中の IndexedDB ツール)。
- プラットフォームの空白を埋める強制力がない場合、そのレベルの専門性を得る動機を見出すことは難しかったでしょう。
4. CSS や他プラットフォームへの言及
自ら実装することだけが善であるわけではなく、無知や理解不足から生じるケースもあります。
- CSS の歴史的背景:
- CSS は直感的に理解しにくく(
,clear-fix
など)、内部アルゴリズムが複雑でした。floats - 行の切り詰めや
リサイズなど、明確な表現方法が欠けていたため、開発者は既知のツールで自作することを余儀なくされました。textarea
- CSS は直感的に理解しにくく(
- 他のプラットフォームでも同様:
- 例: ClickHouse でのデータ保存戦略(同僚との議論)。
- 同僚:保存前に圧縮。
- 私:別々の鍵値ストアにデータを格納し、クリックハウスに鍵のみを挿入。
- 結果: 両者とも間違っていました。ClickHouse は自動圧縮が最適で、列指向ストレージとしての特性を最大限活用すべきでした。
- これもプラットフォームのドキュメントを読み込み、ベンチマークを実装する手間をかけるべきだったという教訓です。
- 例: ClickHouse でのデータ保存戦略(同僚との議論)。
5. AI コーディングの影響と展望
AI コーディングが「プラットフォーム利用」への態度にどう影響するかについては、楽観派と悲観派的な見解があります。
楽観的な見方
- 知識の活用: LLM はプラットフォームに関する百科事典的な知識を持ち、最適な API を選定できます。
- 性能と精度: ユーザーランドコードよりも高速かつ正確なソリューションを提供し、テスト後にこれを優先するでしょう。
- 効果の消失: 「IKEA 効果」は開発者がコードを書かなくなると消失します。
悲観的な見方
- コードの複製: LLM が既存ヘルパー関数を使わずに独自関数を記述することで、プラットフォーム慣習に即さないコードが増加します。
- テスト不足: エージェントへの十分なテスト指示がなく、初稿をコミットしてしまいます。
- 過設計: エピサイクル(補正ループ)によって、本来必要ない過設計されたソリューションが継続的に反復改良されます。
実際の利用経験では両方の現象が現れており、モデルの進歩に伴い楽観的な結果に向かうか断言できません。
結論:なぜ「プラットフォームを利用せよ」と言われ続けるのか
これは私のマントラであり、以下を凝縮した言葉です。
- スパゲッティコードへの警鐘: 著者がもう少し下のレイヤーを理解していたら、どれほど洗練されたコードになるかを思い浮かべた時の感情です。
- 理解への共感: 私もかつてその「美しさ(乱雑さを含む)」を味わい、自作の喜びを知っていました。
開発者がなぜこう考えるのかを理解する価値はあります。「プラットフォームを利用せよ」という言葉は、プラットフォームが存在し続ける限り聞かれるでしょう。