以下の内容はhttps://ozaki25.hatenadiary.jp/entry/2024/08/25/070433より取得しました。


「フロントエンドカンファレンス北海道2024」に参加してきました

感想

  • フロントエンドのカンファレンスは一昔前だとJSフレームワークが中心だった印象なので、時代の流れが変わったなと思った
  • CSS周りの話が面白くてもっと深堀りしたくなった
  • 初開催の中でもハイブリットでオフラインは200名程度のイベントを用意してもらえて感謝です
    • もともと1トラック予定のところ、たくさんのプロポーザルが来てなんとか2トラック調整をつけたとか苦労話も聞きました
  • 次回開催も期待してます

ダークテーマとアクセシビリティの融合したカラートークンの設計

カラートークンの設計

  • global tokenとalias tokenを定義して使ってた
  • カラーパレット
    • ブランドカラーの組み合わせがコントラスト比満たしてなかった
      • プライマリー/セカンダリーで定義した色のほとんどが満たしてなかった
    • グレースケールは色差が同じくらいになるよう輝度を変えていくようにした
      • そこに青緑がかった色になるよう調整
    • 有彩色もコントラスト比を確認しながら作成
  • カラートーク
    • base/container/text/borderに分類
    • 特定のコンポーネントでしか使わない色もそれ用に定義
      • markdownの編集の中でしか使わない色とか

AI時代のこれから、もっと重要になるフロントエンドのお話

  • 米井 優顕さん

生成AIとフロントエンド

  • チャットで生成した成果物をどう埋め込むか
    • コピペする?
    • Copilotだとそのままエディタに反映できる
  • メシウスの製品だとエクセルライクなサービスにチャット機能があって生成結果を埋め込める
    • Next.jsで作ってAzure叩いてる

CSSレイアウト再入門:完全に理解してCSSを記述するために

整形コンテキスト

  • CSSボックスモデル
    • ブロックレベルのボックス
      • ブロック整形コンテキスト
    • インラインレベルのボックス
      • インライン整形コンテキスト
  • ブロック整形コンテキスト
    • 参加されるボックスはすべてブロックレベルボックス
    • 段落が増えていく
    • ボックス間はmarginの相殺が起きる
    • 何もしなければ横幅いっぱい
  • インライン整形コンテキスト
    • 参加するボックスはインラインレベルボックス
    • 行方向に増えていく
  • ボックス種別は外側と内側がある
    • ブロックやインラインは外側
    • flexとかは内側
  • フレックスボックスレイアウト
    • フレックスボックスレイアウト
  • グリッドレイアウト
    • グリッド整形コンテキスト
  • 独自の整形コンテキスト
    • float
    • position

Webサイトをキュッと引き締めるモーションデザイン

Webサイトにおけるモーション

  • モーションのマイナス面
    • 動くと読みづらい
    • 気を取られてしまう
    • 動くのが苦手な人も
  • 大事なこと
    • 読み手にとって大事な演出であること
    • ユーザのメンタルモデルに合うこと
  • モーションの要素
    • 長さ
    • イージング
    • ディレイ
  • モーションの目的にあわせたサイズの使い分け
    • クイックに動かすもの
      • ホバーとか
    • 中くらい
      • ドロワーアニメーション
    • 大きいモーション
      • 画面遷移
  • 体感の重心
    • イージングをかけて変化の速度を変える
    • 1から100に変化させる必要もない
      • 75から100とか

デザインシステムとコンポーネント指向によるフロントエンド開発プロセスの革新

コンポーネント指向による開発

  • jQueryしか経験ないような人が多いチーム
    • グローバルでいろいろさわれちゃうのが問題
    • 何をどう共通化するか難しい
    • コンポーネント指向で何とかする
  • コンポーネント指向知らない人に
    • AtomicDesignをガイドラインとして進めていった
    • どれがどの分類か定義は難しいが方向性をイメージするのにはいい
  • デザインシステム
    • デザイナーとエンジニアの共通言語になるように
    • それぞれ勘所が違うので

10年ものの jQuery フロントエンドを良くしていくための道筋

uQuery

  • 昔のブラウザ互換性問題
    • prototype.jsはネイティブのオブジェクトにいろいろ生やしてた
    • jQueryはグローバルな$にいろいろ詰め込んでるのが新しかった
  • jQueryで抱えていた問題
  • 改善
    • 命名を工夫する
      • cspellでスペルミス計測
    • Lintrでしばる
      • ESLint入れる
      • どんなglobal変数を使ってるかコメントで各とignoreされる
    • bundlerを入れる

ESLint Plugin により事業, 技術ドメインに沿った制約と誓約を敷衍させるアプローチのすゝめ

制約と誓約

  • 開発におけるルールを守ることでアプリケーションの質を高める
  • アプリケーション開発/運用と普遍的/固有の2x2の4パターン
    • 今回は開発の固有部分がスコープ
  • 日経電子版では
    • HTTP Request Header Fieldから取得の制約
      • 素早いページ遷移のため
      • スパイク時の負荷対策
      • CDNでのShared Cache Firstな戦略
        • 90%ヒットしてる
      • CDNcookieを元にユーザ判別しサーバへheader付与して渡す
        • Varyの値もキャッシュの計算に使うことでユーザ属性の差もひろう
        • これをセットし忘れるとキャッシュのルールが壊れてしまう
    • CSS in JSの制約
      • CSS in JSの処理をwebpackでやっていてbabelに依存してる
      • CSS in JSの処理をするファイルを絞ることでその処理を実行する対象を最小限に
        • ファイル名に命名ルールを設けることで実現
  • 制約を守るために
    • 人の手だけだと完全に実現するのは難しい
    • 機械でできることは機械的
    • Custom Linter Ruleで
  • Custom Linter Ruleの開発
    • OSSでなければ自分で作るしかない
    • ASTを見て特定の場合にwarn/error
    • ASTを見ると言っても参考になるものも多いしそんなに難しいものではない
    • アプリケーションと同一リポジトリに置くのもいい
      • 背景とかわかるし

Component-Driven Design & Development

Component-Driven Design

  • コンポーネント
    • FIRST
    • 焦点を絞る/独立/再利用/小さい/テスト可能
  • Component-Driven Development
  • Component-Driven Design
    • デザインもコンポーネントドリブンがいいしそうなりつつある
    • AtomicDesighnもデザイナーも巻き込んで浸透してればうまくいくのでは
    • デザインツールも進化してきてる

Design Token

  • プラットフォームに依存しない形で共有できるもの
  • 色とかタイポグラフィとか余白とか
  • GlobalToken/SemanticToken
    • Globalは直接的な定義
    • Semanticは意味をもたせた定義
    • デザイン/開発で使うのはSemanticToken
  • デザインと開発の橋渡し
  • JSONのフォーマットがW3Cで定義されている
    • Design Token Format Module
    • これをいい感じにCSSなどに変換して使う
      • style dictionary
  • Headless Componentと相性がいい
    • デザイントークンをはめるとstyleがつく

Figma

Storybook

  • Storybookでテストも
    • Chromaticと組み合わせてVRT
    • Story単位でのテスト
    • PlaywrightでStoryを動かすことも

The Future of Frontend i18n : Intl.MessageFormat

  • Sajikixさん

Intl.MessageFormat

  • Intl
  • Intl.MessageFormat
    • 新しく追加されようとしている
    • 日時など各要素の書式化は充実してきてる
    • アプリ全体の国際化を進めようという話
    • ECMAScriptUnicodeと連携して進めている
      • 文言管理とか
  • ICU MessageFormat
    • プレースホルダーを設置してそこに言語ごとの値を入れる
      • よくある機能と同じ感じ
    • 細かい書式指定や条件分岐も書ける
    • 20年くらい前からある
  • ECMAScriptとMessageFormat v2
    • v1は歴史があって問題を抱えていた
    • unicodeECMAが協力してv2
      • unicode:MessageFormatに課題がある
      • ECMA:IntlでMessageFormat管理し実行したい
  • MessageFormat v2のち買い方
    • 2種類のメッセージ
      • simple message
      • complex message
        • 全体を管理して {{}} で値を組み立てる
  • simple message
  • {} の中に $username みたいな形で埋め込む
  • 関数を埋めることもできる
    • デフォルトでも用意されてる
    • 数値のフォーマットとか単数複数のためのものとか
  • {#button}Submit{/button} みたいにマークアップすることも
  • complex message
    • message内だけで使える変数の宣言ができる
    • match でswitchみたいなこともできる
  • 実際はIntl.MessageFormatを通してv2を使うことになる
    • newする時にいろいろ指定する
    • formatする時に変数を渡す

ブラウザはどのようにしてテキストを描画しているのか?――Chromiumにみるテキスト描画の深淵

  • canalunさん

テキスト描画

  • text shaping
    • フォントデータのglyphをどこに配置するか
    • フォントが持つcmapでglyphを決定
    • ligature
      • 隣に来る文字に応じて字体を変える
      • fが2個あるとつながるとか
    • 隣の文字によって距離を変える
  • テキストの描画
    • chromiumはSkiaを使ってる
    • 下線/上線/テキスト/打ち消し線
    • 縦書きなど回転させる場合の影問題
      • ベースを描画してから後から影をつければいける
      • 直してるが大変



以上の内容はhttps://ozaki25.hatenadiary.jp/entry/2024/08/25/070433より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14