1 ポイント 投稿者 GN⁺ 2024-09-30 | 1件のコメント | WhatsAppで共有

堅牢なフロントエンドを構築する方法: 段階的向上

  • HTMLから始める

    • 政府サービスはHTMLだけでも機能するべき
    • HTMLレイヤーはフォールトトレラントであり、古いブラウザーでも動作可能
    • 正しいセマンティックマークアップを使い、文書構造を論理的に組み立てる必要がある
  • CSSを使う

    • CSSを使ってサービスをスタイリングできる
    • CSSレイヤーは個々の宣言を無視できるフォールトトレラント性を持つ
    • CSS-in-JS のような技術は避けるべき
  • JavaScriptを使う

    • JavaScriptはインタラクティブな要素を追加するために使われる
    • JavaScriptレイヤーはフォールトトレラントではなく、エラーが発生しうる
    • ブラウザーAPIに対する機能検出、ポリフィルの導入、トランスパイルなどによって互換性を高められる
    • JavaScriptはHTMLとCSSを補完する役割を担うべき
  • JavaScriptの代替

    • JavaScriptなしでもユーザー要件を満たせるシンプルな解決策を検討するべき
    • 代替として、データテーブル表示、データのエクスポート、グラフの画像への事前レンダリングなどがある
  • クライアントサイドJavaScriptフレームワークを使う

    • 複雑なユーザーインターフェースでない場合は、フレームワークの使用を避けるべき
    • フレームワークを使うと、コードベースの肥大化、性能問題、サードパーティーコードへの依存といった問題が発生しうる
    • フレームワークを使う場合は、各ユーザーインターフェースを個別のコンポーネントとして設計するべき
  • CSSまたはJavaScriptが読み込まれない、または実行されない理由

    • ネットワークエラー、ブラウザー拡張機能、サードパーティーベンダーのダウンタイム、DNSルックアップ失敗、ブラウザー更新によるバグなどが原因になりうる
    • 一部のユーザーはブラウザー機能を意図的に無効化している場合がある
  • シングルページアプリケーション(SPA)

    • シングルページアプリケーションでサービスを構築するべきではない
    • SPAはアクセシビリティを損ない、ページ間移動時のフォーカス処理の問題、戻る/進むボタンが使えないなどの問題を引き起こす可能性がある
  • サービスのテスト

    • JavaScriptまたはJavaScriptフレームワークに大きく依存するコンポーネントは、さまざまなブラウザーやデバイスで動作しなければならない
    • アクセシビリティのためのテストを行うべき
  • 事例研究および関連ガイド

    • なぜ段階的向上を使うのか
    • さまざまなデバイス向けのデザイン
    • フロントエンド性能のテスト方法
    • WCAG 2.2 を理解する

GN⁺の要約

  • 段階的向上は、HTML、CSS、JavaScriptの順でウェブサイトを構築する方法
  • この方法はサービスのフォールトトレラント性を高め、さまざまなブラウザーやデバイスで動作可能にする
  • JavaScriptは補完的な役割を担うべきであり、代替ソリューションを検討する必要がある
  • シングルページアプリケーションはアクセシビリティの問題があるため避けるべき
  • サービスのテストでは、さまざまな環境でのアクセシビリティを保証する必要がある

1件のコメント

 
GN⁺ 2024-09-30
Hacker Newsの意見
  • JavaScriptフレームワークを使うときは、ユーザーにどんな利点があるのかを証明できるべき

    • オフラインでもデスクトップアプリのように動作できるアプリなら、シングルページアプリケーション(SPA)として作るのがよい
    • 例として、Photopea、Google Docs/Sheets、tldraw などがある
    • インターネット接続が必要で複数ページを必要とするアプリなら、ブラウザにナビゲーションを処理させるのがよい
  • SPAの欠点として指摘されている点

    • 支援技術の利用者が、ページ移動時のコンテキスト変化を認識できない
    • ページ移動時にフォーカスを適切に処理できない
    • ブラウザの戻る・進むボタンを使えない
    • ネットワーク接続が切れた場合、エラーから復旧できない
    • ただし、これらの問題はSPAでも解決できる
  • インターネット全体がこの助言に従ってほしい

  • シンプルな解決策を優先すべき

  • Linuxが一覧にない理由が気になる

  • 多くの人がこのアプローチを気に入っているようだ

    • なぜ一般的なトレンドとして、不必要にJavaScriptやReactのようなフレームワークを使うのか気になる
  • HTMLとサーバーで事前取得したデータを使い、クライアントでできる作業はクライアントで処理する

    • 最小限のCSSとバニラJSを使う
    • 同僚には古臭く見えるかもしれないが、何も取りこぼさない
  • 多くのSPAには問題があるが、すべてのSPAに問題があるわけではない

    • VitePressやSolidJSのような例を見ると、うまく動作している
    • JSを使わない人はほとんどいない
    • 低スペックなデバイスでもJSを処理するのに問題はない
    • アクセシビリティの問題は、SPAを使うかどうかとは関係ない
    • Svelteにはアクセシビリティ警告機能も組み込まれている
  • サーバーサイドレンダリングも無条件によいわけではない

    • クライアントサイドのJavaScriptフレームワークを使うときは注意が必要
    • コードベースが大きくなり、クライアント側で処理すべき作業が増えて、パフォーマンス問題が発生する可能性がある
    • サードパーティコードへの依存が増え、保守が難しくなることがある
    • JavaScriptフレームワークを使うときは、ユーザーにどんな利点があるのかを証明できるべき
    • 悪影響を認識し、緩和できるべき
    • HTMLとCSSだけでは構築できない部分にのみフレームワークを使うべき
    • 各ユーザーインターフェース部分を個別のコンポーネントとして設計すべき
    • JavaScriptが読み込まれなくても、ページの残りの部分は正常に読み込まれる