2 ポイント 投稿者 GN⁺ 2025-05-12 | 1件のコメント | WhatsAppで共有
  • HTML、CSS、JavaScriptのみを使った基本的なWeb開発技術の説明
  • ビルドツールやフレームワークなしで、標準的なWeb技術だけでサイトやアプリケーションを実装する方法を紹介
  • Web ComponentsやモダンなCSS機能を活用した構造化とスタイリングの方法を扱う
  • フレームワークの複雑さや保守負担なしに、シンプルな開発環境と長期的な利点を追求
  • すでにWeb標準技術を習得している開発者を主な対象とするチュートリアル

Plain Vanilla Web 概要

Web開発において、ビルドツールやフレームワークなしで、標準的なWeb技術だけを使ってサイトやアプリケーションを作るための主要な手法の概要

  • エディタ、ブラウザ、Web標準だけを活用する環境を説明
  • 初期設定やサーバーサイドロジックなしで本番環境へデプロイできる構成を紹介

扱うトピック

1. コンポーネント(Components)

  • Web Componentsを使って、HTML、JavaScript、CSSだけで高水準の構成要素として組み合わせる方法
  • ReactやVueのようなフレームワークのコンポーネントアプローチを置き換える方法

2. スタイリング(Styling)

  • 最新のCSSの強力さを活用し、CSS Modules、PostCSS、SASSが提供する利便性を置き換える方法
  • 古典的なCSSから一歩進んだ、構造的でモジュール化されたスタイル構成の概念を提供

3. サイト(Sites)

  • Web ComponentsベースでWebプロジェクトを構成し、ビルドツールやサーバーサイドなしでデプロイする方法
  • 実用的でシンプルなデプロイワークフローを提示

4. アプリケーション(Applications)

  • シングルページWebアプリケーションをバニラ手法だけで作る方法
  • ルーティング、状態管理の方式を説明

推奨対象

すでにHTML、CSS、JavaScriptをある程度扱える開発者を対象とする

  • Web開発を初めて始める人には、Odin ProjectMDNのような基礎学習ルートを推奨

なぜバニラ方式なのか

現代のフレームワークは構造的で強力な機能を素早く提供する一方で、ツールやフレームワークの複雑性の増大と継続的な保守負担を伴う

  • プレーン・バニラ方式は、短期的な利便性の一部を手放す代わりに、シンプルさと事実上ゼロメンテナンスという長期的な利点を提供
  • 今日のブラウザは優れたWeb標準サポートを備えており、このアプローチは現実的に可能

1件のコメント

 
GN⁺ 2025-05-12
Hacker Newsの意見
  • 私はもう「バニラかフレームワークか」という議論から離れて、『そもそも本当にWebサイトが必要なのか?』という視点で考えるようになった
    Webアプリ、特にB2B SaaSの分野で本当にそうしたWebが必要なのかと懐疑的になり始めると、ブラウザに手を入れなくてもビジネスをかなり先まで進められることに気づく
    私がWebサイトやアプリを作るのに費やしてきた時間の大半は、管理用UI/UX、つまり管理者がデータベースのフィールドを変更してアプリケーションが顧客の期待どおりに動くようにする部分に集中していた
    多くの場面では、ビジネスに単純な設定テンプレート(Excelファイルなど)を渡し、その結果をSQLテーブルに直接挿入・マージするほうが、はるかに速く簡単で、無駄な作業も少ない
    Webは1つのUI/UXのやり方しか提供しない。メールやプレーンテキストファイルのほうがむしろ柔軟だ

    • Digital-firstなコンサルティング会社が、B2B分野で無駄に凝ったWebアプリを作るせいで機敏さを失っているのをよく見る
      特に政府機関など、買い手側がよく分かっておらず、しばしば過大な費用を払ってしまう問題がある
      購買担当者は何が必要なのかについてもっと教育を受ける必要がある
    • 私はオンラインで納骨壺を販売している。自分のサイトにはメールリンクしかない。ショッピングカートもない
      現実の納骨壺店舗にカートがないのに、なぜ仮想店舗には必要なのか
      特殊な木工工具をオンラインで購入したときも、単にフォームに入力して部品を請求書と一緒に受け取っただけで、望むならその場で支払わなくても問題なかった
      オンラインでもオフラインでも多様な商取引の形が存在しており、興味深いやり方で暮らしている人たちを注意して見れば、あちこちで見つかる
    • ほとんどCRUD以上ではない内部ツールの場合、Webは外部コンサルタントが一発で作る、あるいは社内チームが永遠に面倒を見ることができない状況で最も役に立つ
      少しでも保守の能力があるなら、Excelテンプレート+簡単なカスタムスクリプトのほうがずっと柔軟になる。
      最終利用者が結局は生データを扱えるレベルのユーザーなら、非常に効果的だ
    • B2B分野はSaaS以前は100%こういうやり方で運用されていた
      そして今でもB2Bの99%はこの方式に従っている
  • 私はフレームワークに反対しているわけではない。ただ、多くの場合は不要だと感じる
    コードを1行も書く前に、なぜ100KBのJSを追加しなければならないのか、いつも不思議だった
    私たちのチームは https://restofworld.org を何のフレームワークも使わずに作った
    アンケート、アウトリーチ、メールでのフィードバックはいずれも、使いやすさや読む体験の面で非常に好意的だった
    後からフレームワークを使うこともできるが、今のところは単なるバニラJSがとてもうまく合っている

    • このコメントは、こうした議論でいつも現れる断絶のよい例だ
      一方には30人以上のチームで大規模なWebアプリを作っている人たちがいて、彼らはフレームワークなしで作ると言われると、すぐに大規模で必須の機能をどう処理するのか疑問を投げかける
      だが答えは、その機能自体が必要ないし、ブログのような用途なので、そもそもフレームワークの必要性がないということだ
      逆に、大規模Webアプリの経験がほとんどない人は、「なぜみんなフレームワークを使うのか」と考える
      Webは本当に多種多様なソフトウェアの集合体だ。
      だからフレームワークについて論じるときは、対象がどんな種類のソフトウェアなのかを明確にすべきだと思う
      この場合、これはWordPressブログだ
    • ページは素晴らしく、読み込みも速いが、これはTFA(元記事)が説明しているやり方とは関係がない
      WordPressという大型フレームワークを使っていて、単に静的レンダリングしているだけだ
      TFAが言っているのは、ビルドツールすら使わず、最新のWeb標準だけを使うことだ。エディタ、ブラウザ、Web標準だけを使うということだ
    • 「コードを1行も書かずに、なぜ100KBのJSを追加しなければならないんだ」
      私が働いてきた企業向けアプリでは、100KBの心配などまったく不要だった
      ほとんどが複数チームで作る大規模アプリで、Reactなどを使っていた。
      LOB/B2Bでは初回ページロードを気にする人は誰もいない
      ユーザーは毎日そのアプリを使い、大半はブラウザキャッシュからすぐに静的アセットを利用できる
      Next.jsのような賢いフレームワークを使えば、ルート単位で内容がimmutableなchunkに分割される
      初期レンダリングは静的HTMLなので、ユーザーにとってハイドレーションも目立たない
    • サイトは素晴らしい。良い記事も見つけた
      ただ、バニラ vs フレームワーク論争でこういう例がいつもニュース/記事サイトなのを見ると、複雑なアプリではないのだから「自分でも最初からフレームワークは使わなかっただろう」と思ってしまう
      結局、実用例としてはもっとインタラクティブなアプリが必要だ
      最近はフレームワークと一貫したパターンだけを使い、ほかの依存関係は最小限にするやり方を好んでいる
    • この構造の利点の1つは、ブラウザの前後履歴ナビゲーションが非常に速いことだ
      iPhoneでは、戻ったときに毎回ページ全体が再読み込みされるのがあまりにも当たり前になっていた
    • おめでとう! 使いやすさを確保するのが一番大事だと思う
      しかし開発者は、面白半分でローディング画面、ハイドレーションされたコンポーネント、過剰なアニメーション、苛立たしいモーダルなどに執着する
    • フレームワークを使っていないからなのかは分からないが、戻る/進む操作のときにURLはすぐ変わるのにページが更新されず、同じ記事にとどまる問題がある
      また、無限スクロールはスクロールバーの位置で自分がどこにいるかを把握しにくくするので、使い勝手に致命的だ
    • Rest of World はオーストラリアでもとても速く動作し、初めて見る素晴らしいニュースサイトだ。
      構築に関わったことを称賛する
    • WordPressで静的ページ生成をした美学だ
    • たいていのフレームワークは100KBのJSを必要としない
      Mithrilなら、すべての機能を10KB gzippedで実現できる
    • バニラの例の問題は、ページがあまりに単純すぎて、UXも基本しか入っていないことだ
      検索機能付きのリアクティブなテーブル、ラベル・検証・エラー表示がきちんとしたフォーム、そうした振る舞いを自分で実装するくらいなら、SvelteのUIライブラリと25KBのオーバーヘッドでよくできた検証済みの製品を使えるのに、なぜわざわざ自作するのか
    • メイン画像は200KBを超えているのだから、100KB論争には意味がない
      それにWordPressもフレームワークだ
      フレームワークを使っても遅くはならない。WordPressでも何でも
    • 現代のWebの肥大化を示す良い例だ
      速すぎる
    • 本当に速い!
    • Rest of World が大好きだ
    • 「なぜ100KBのJSを追加しなければならないんだ」
      開発者の生産性のためだ(理屈の上では)。
      実際には、あまり役に立たないことも多い
    • サイトが本当に速い。以前にもこういうジャーナリズムを見たことがある
      このアプローチに鋭い問題点があったのか気になる
    • えっ? そんなの不可能だ
    • 100KBなんて誰も気にしない
  • 約2,000人のユーザー向けのシステムを開発しているが、彼らはリアクティブなUIをまったく気にしない
    モノリスを作り、ページのリロードも気にせず、ただ仕事を片づけることに集中するのが一番だ

    • 反論として、多くの既存デスクトップアプリが結局Webへ移行している
      その動機は大きくは技術的なものではなく、ネイティブアプリの配布コストが高すぎるからだ
      Webはアプリ配布の標準を安価に提供するが、UI技術としてはいまだに今ひとつだ
      過去にはX11、Java、Flashなどさまざまな中途半端な試みがあり、いつかもっと快適なWebアプリ開発の方法が生まれてほしい
    • CSSの @view-transition だけでも滑らかなトランジションは可能だ
      https://developer.mozilla.org/en-US/docs/Web/CSS/@view-transition
    • 今の時代としては、あまりにも鈍感な意見だ
      ほとんどのソフトウェアは120年前の機械式装置よりはるかに遅く、反応も悪い
    • 単なるCSSとJSだけでも、超シンプルなリロード時のダイナミクスは簡単に作れる
      npmパッケージを読み込む必要はない
    • Reactとサーバーの分離もひどい
      バックエンドは express/node で、コード全体は一緒にあるのに、開発環境ではサーバーがReactの基本サーバーで動き、本番デプロイでは別の形で動くので、結局おかしなビルド・運用方式が必要になり、開発サーバーの利便性(ホットリロードなど)が台無しになる
    • SPAのほうがMPAより壊れているのを何度も経験した
      RedditやX(Twitterなど)のような大企業のSPAですら、モバイルではとても不安定だった
      Twitter級でもなければ、あるいはAPIベースのプラットフォームでもなければ、そこまでSPAにこだわる必要はないと思う
      何十億ドル企業を含め、誰もまともに構築できていないものを、自分ならもっと上手くやれると過信すべきではない
    • バニラ方式の利点は、既存のSSRサイトにも拡張できることだ
      すべてをReactに作り直す必要はない
      元記事の著者が言う高度なSPA風機能は、あくまでオプションだ
    • 実用本位のユーザーは気にしないが、とにかく手当たり次第クリックするユーザーは、メインフィードに戻るために待つより先に戻るボタンを押す。そしてそのタイミングは、CDNから最新フレームワークを取得する時間より速い
    • ページの再読み込みが本当に速いなら、私はその意見に同意する
    • ユーザーが実際にはページのリフレッシュ自体をまったく気にしていないと、どうやって分かるのか聞きたい
      離脱した人まで調査したのだろうか
  • こういう世界に住みたい
    私はフレームワーク以前の時代から来たが、当時はまだ未成熟で、jQueryしか知らない人も珍しくなかった
    今では、post-query selector時代のフレームワークが、そのコストに見合う効果を持っているとは思えない(テストフレームワークは別で、とても良い)
    私たちはReactというフレームワーク監獄に閉じ込められており、あらゆる失敗はスパゲッティ化した複雑性の結果だ
    state machine はハードコードで絡まり、翻訳・圧縮・トランスパイルされた成果物は見分けがつきにくい
    ソースマップも保守のための複雑性をさらに1層増やしている
    フレームワークが作られた理由は認めるが、新しいエンジニアにとって、バニラJSよりフレームワークを学び続けるほうが簡単だとはとても思えない

    • 私もそういう昔の時代を経験したが、最大の問題は、私たちが文書フォーマットの上にアプリのエコシステムを築こうと決めたことだ
      HTMLはテキストのレンダリングを少し楽にするためのマークアップにすぎず、HTTPも同様だった
      昔はtext-to-markup比率が高くあるべきだったが、今では完全に逆転している
      それでも私たちは、この上にアプリ開発のすべてを載せるのが未来だと信じていたし、Reactの内部を見ても、何十年にもわたる小細工とトリックの塊だ
      昔なら、Excel+VBでアプリを作ったり、PDF+PostScriptの組み合わせでアプリを作るような、無茶な試みに見えただろう
      そうしてきたのだから、JSが数MB、何メガバイトも消費するのを過剰だと感じる
    • 私にとって最近のキラーアプリは反応性だ
      データの変更にUIが即座に反応することで、これを手動でリスナーを作り、diff更新をして、イベント解除までやると、ほとんど手動メモリ管理のような感覚になる
      jQuery時代がそうで、ミスも多かった
      コンポーネントベースで、ビューを宣言的にモジュール化できるようになったら、そのとき初めてバニラJSに戻るが、今のところは絶対に無理だと思う
      決定的な要素が足りない
    • 私もまた、KISS原則などに浸ったノスタルジーなのか迷うことがある
      ReactやAngularはES2015以前には確かに意味があった
      その後はフロントエンドフレームワークの変化にうんざりした
      Reactの中でさえ、componentのやり方や状態管理の方法が変わり続けている
    • 何億ビューものサービスをやるなら、実際にはずっと静的サイトに近い構造になるのではないかと想像する
  • 私はWeb Componentsにはまだ賛成できない
    特に @scoped や import {type:css} など最近の機能があっても、単に要素を静的にレンダリングしてから、最新のJSで動的に更新するほうがずっと意味があると思う
    Web Componentsのやり方の大半には懐疑的で、ReactやSvelteのようなフレームワークの外側で革新し続けるべきだと信じている
    Web Componentsが自分の運営する複数のサイトで役立つと感じたことはない

    • Web Componentsは私の問題を解決するどころか、むしろ新しい問題を追加している
      Shadow DOMについて各ページで何十回も言及されるが、それは導入したことで生じた問題の解決が大半だ
      自分のアプリ専用コンポーネントなら、Shadow DOMの問題もない
    • 「静的要素をレンダリングして、最新のJSで動的に更新する」
      Web Componentsではバックエンド側でこれをどう処理するのか気になる
    • Web Componentsは明確な抽象化の境界を提供する
      独自タグに追加メソッドを付けたり、更新ロジックをコンポーネント内部にカプセル化したりできる
    • 再びUnobtrusive JS(非侵入型JS)に戻るべきだと思う
      軽量ライブラリ中心、あるいは自分で書ける実践方法が必要だ
      HTMXには良い部分もあるが、それでもなお script タグのように振る舞うし、URL/メソッドはHTMLにだけ明示し、hx-target のようなものはJS側で data- attribute として指定するだけで十分だ
      使わないHTMX機能まで全部含まれるのは望まない
  • 私はWeb Componentsが、他のフレームワークでコンポーネントと呼ばれるものの代替だとは思わない
    複合値(Object、Arrayなど)を属性に入れられず、ボイラープレートが多すぎて、リアクティビティもない
    私は signals[1] 方式でバニラJS系のコーディングをしている
    すべてのW3C標準が正解ではなく、XHTMLの失敗例を参考にすべきだ
    [1] https://wrnrlr.github.io/prelude/

  • http://youmightnotneedjs.com

  • これは趣味でWebページを作る人にはよく合うアプローチのように思える
    フレームワークは標準化、ベストプラクティスを組み込んだ設計、そして素早く開発を始めるためのものだ
    Webサイト自体に本質的な価値があるわけではなく、その内容をどう効率よく公開し、期限どおりに正しく開発するかが重要だ
    そういう意味でフレームワークは現在と将来のコストを下げてくれる

    • それが「公式のナラティブ」だが、実際には常に正しいとは限らない
      実際の大企業では意思決定が流行・慣習・人気フレームワークに対する防衛的意識に左右され、複雑性増大による生産性低下は追跡されず、むしろ誤った意思決定のほうが個人やチームのインセンティブに合ってしまう
      つまり、「合理的選択であるはずだ」という論理だけでフレームワーク選定を正当化することはできない
    • Reactおよび関連フレームワークで作られたプロジェクトが、まったく適切に管理されていない例も数多く見てきた
      そもそもフレームワークを使ったからといって自動的にベストプラクティスが守られるわけでもなく、むしろさらに肥大化して遅いシステムができることもある
  • 本当に素晴らしい資料だ
    Webを作るなら、基礎技術の原理をきちんと理解し、Webプラットフォームを最大限活用できるべきだと思う
    その上で、ビルドシステムやフレームワークを使うかどうかは、トレードオフだけ理解したうえで自由に選べばよい
    個人的にRemix(/React-router v7+)が好きなのは、Web標準の哲学とつながっているからだ
    つまり、より少ない開発でより多くのことができる(サーバーデータの変更をHTML formだけでも可能にできる)
    また https://every-layout.dev も勧めたい。ブラウザネイティブのCSSだけで実現する、高性能・アクセシビリティ・柔軟性を備えたレイアウトのさまざまなテクニックを学べる
    私は1998年からプロとしてWeb開発に携わっている

  • 先週、完全にバニラだけで小さなプロジェクトを実装したが、とてもうまく動いている
    Mastodonの長いスレッドを書くためのWebツールだ
    作っている間ずっと、「フレームワークなしで、自分は何か間違ったことをしているのでは?」と感じていた
    ほかの人たちはみんなフレームワークを前提にしている雰囲気だ
    Splinter, splinter.almonit.club, 興味がある人は参考にしてほしい