タグ

ブックマーク / zenn.dev/cybozu_frontend (10)

  • 拡張性に優れた React Aria のコンポーネント設計

    React Aria Components は Adobe によって提供されている Headless UI コンポーネントライブラリです。振る舞いや国際化に, アクセシビリティに関する機能を備えており、Button や Input, TextField, Label などのシンプルな要素から、DatePicker や ComboBox などの様々なコンポーネントが提供されています。 今回は React Aria Components の設計について紹介します。 React Aria Components のコンポーネントの設計 React Aria Components の API はコンポジションを中心に設計されています。これにより、パターン間で共通のコンポーネントを共有することも、個別に使用することも可能です。なお、コンポジションについては React Component Compos

    拡張性に優れた React Aria のコンポーネント設計
    efcl
    efcl 2024/05/18
    React AriaはContextを使ってコンポーネント同士の拡張性を高めてる
  • 「実装例から見る React のテストの書き方」をアップデートする

    社内の人から、自分が以前書いた次の記事が「便利で助かった!書いた時から何かアップデートある?」ってメッセージがきた。 そんな便利だなんてどうもありがとうございますウフフ、と思いながら書いた日を見てみると 2022-08-09 だった。もうすぐ 2 年経とうとしてる。時の流れが早くて怖い。 この記事に書かれた実装例はリポジトリにまとめていたんだけど、当然、何かメンテをしていたわけもなく、2022 年当時の状態がそのまま残っていた。 せっかく便利に思ってくれる人がいたので、内容をアップデートする。 アップデートまとめ メジャーバージョンのリリースやビルドツールの統一の観点で Jest から Vitest に移行 useFakeTimers({ shouldAdvanceTime: true }) @testing-library/reactを v15 にバージョンアップ MSW を v2 にバ

    「実装例から見る React のテストの書き方」をアップデートする
    efcl
    efcl 2024/04/18
    React周りのツールやテストのアップデートについて。
  • Next.js 14 で導入された React Taint APIs を試してみた

    Next.js の公式ブログの How to Think About Security in Next.js という記事で Next.js 14 で導入される React Taint APIs について紹介されていました。 この記事では、Next.js 14 で React Taint APIs 実際に試してみて、どのような機能なのかを確認してみたいと思います。 React Taint APIs とは? React Taint APIs とは、React が experimental バージョンで提供する新しいセキュリティ保護機能の一つです。このAPIを使用することで、誤って Client Component にセキュリティ上の重要なデータが渡されることを防げるようになります。 具体的には、以下の2つの API が提供されています。 experimental_taintObjectRefe

    Next.js 14 で導入された React Taint APIs を試してみた
    efcl
    efcl 2024/02/25
    Taint API
  • Intl.Segmenterはどうやって単語分割しているのか

    Intl.Segmenter についておさらい JavaScript には Intl と呼ばれる国際化 API があり、日時や数値のフォーマットを始めとする国際化に便利な機能が揃っています。Intl.Segmenter はこの Intl の一機能で、文字・単語・文章単位での文字列分割を可能にします。 文字単位での分割では複数のコードユニットやコードポイントを持った文字を考慮し、正確に見た目上の1文字(書記素)で分割できるので、絵文字を含んだ文字数のカウントなどに便利です。 const segmenter = new Intl.Segmenter("ja", { granularity: "grapheme" }); console.log("🇯🇵👨🏻‍💻".length); // ❌ 11 console.log([..."🇯🇵👨🏻‍💻"].length); // ❌

    Intl.Segmenterはどうやって単語分割しているのか
    efcl
    efcl 2024/02/10
    Intl.Segmenterのsegmentの定義について。
  • Biome と ESLint の lint ルールの互換性

    Biome では、現在約 150 個程度の JavaScriptTypeScript に関する lint ルールを実装しています。 これらのルール多くは既存の ESLint 関連で実装されているルールと同じものになっているのですが、ルールの名前が異なることもあり、その対応関係がわかりにくくなっています。 そこでこの記事では、フロントエンド開発をする場合によく設定していそうな次の lint ルールについて、Biome で実装されているかどうかの対応表を紹介します。 eslint (eslint:recommended) typescript-eslint (plugin:@typescript-eslint/recommended) eslint-plugin-jsx-a11y (plugin:jsx-a11y/recommended) eslint-plugin-react (plugi

    Biome と ESLint の lint ルールの互換性
    efcl
    efcl 2023/10/16
    BiomeとESLintのルールの対応表
  • Next.js 13 Template と Layout の使い分け

    Next.js 13には、LayoutとTemplateというよく似た機能が存在します。 この記事では、それぞれの特徴と使い分け方についてまとめてみました。 Layoutとは? Layoutは複数のページに渡って共有されるUIのことを指します。 特徴としては画面遷移が行われた際に、その状態を保持し、再レンダリングは行われません。またLayoutはネスト(入れ子)にして使用することも可能です。 Layoutの定義方法 appディレクトリ配下で layout.tsx ファイルを定義するとLayoutとして定義できます。 例えば、以下のようなLayoutを定義することができます。 // app/posts/layout.tsx export default function Layout({ children, }: { children: React.ReactNode; }) { retur

    Next.js 13 Template と Layout の使い分け
    efcl
    efcl 2023/09/06
    Next.jsのLayoutとTemplaten違いについて。 LayoutはStateを維持するが、LayoutはStateを維持せず毎回新しいインスタンスを作成する。
  • typescript-eslintで新しい構文をサポートする

    新しい構文がやってくる ご存知の通り、JavaScript の標準仕様である ECMAScript では毎年新しい記法や構文が提案され、採択されています。もちろん JavaScript のスーパーセットである TypeScript もその例外ではありません。 TypeScript では基的に ECMAScript Proposal の Stage3 になった仕様から順次サポートするという方針があります。最近であれば v5.0 に入った Decorators や v5.2 で導入される using Declarations(Explicit Resource Management)などが該当します。 ここまでのことは普段 TypeScript を利用している方であれば知っている方も多いでしょう。しかし実際に TypeScript で新しい構文がサポートされた後、typescript-esl

    typescript-eslintで新しい構文をサポートする
    efcl
    efcl 2023/08/30
    typescript-eslint/ESTreeに新しい構文を追加する話
  • typescript-eslint v6 アップデートガイド

    typescript-eslint v6 リリース! 2023/07/10 に typescript-eslintv6 がリリースされました。 メジャーバージョンアップということで多くの BreakingChange があるのですが、その中でもReworked Configuration Namesと呼ばれる変更は利用者に大きな影響を与えそうです。 Reworked Configuration Namesはざっくり言うと「config に書くrecommendedのようなルールセットの名前や枠組みが変わるよ」という変更です。 ルールセットの名前だけでなく、含まれるルールや分類自体に変更があるので、設定ファイルを v5 のままアップデートしてしまうと意図したルールセットと異なる設定になってしまいます。 ここでは上記の記事にある変更点を紹介しつつ、なるべく既存の設定のままアップデートする

    typescript-eslint v6 アップデートガイド
    efcl
    efcl 2023/07/23
    typescript-eslit v6 のプリセットの変更について
  • Origin Private File Systemを使ってブラウザ上でファイルを高速に操作しよう

    3 行まとめ Origin Private File System という名の通り、Origin に紐づくプライベートなファイルシステムが扱える API Firefox 111 で実装されたことで、主要ブラウザでほとんどの機能が使える[1] Origin Private File System は FileSystem Access API よりもファイル操作のパフォーマンスが良い Origin Private File System とは Origin と紐づき、ユーザには非公開なブラウザ上で扱えるファイルシステムです。 なぜ Origin Private File System を使うのか Origin Private File System を使わずとも Blob と URL.createObjectURL() を組み合わせて a 要素をクリックすることでファイルをダウンロードしたり

    Origin Private File Systemを使ってブラウザ上でファイルを高速に操作しよう
    efcl
    efcl 2023/05/09
    Origin Private File Systemの基本的な使い方について
  • Rome の core contributor になった

    ちょっと時間が経ってしまったのですが Rome の core contributor になったので、なるまでの振り返りと現在の Rome の状況について少し書きたいと思います。 Rome とは Rome は、増え続けている JavaScript の開発に必要なツールチェーンを統一し、開発者体験を改善しようということで始まった OSS です。現在は、JS (JSX)・TS・JSON に対する formatterlinter を提供しています。 Babel の生みの親である Sebastian McKenzie さんが 2017 年頃からプライベートで開発を始め、2020 年頃からは OSS として開発が進められています。2021 年の 7 月ごろまでは、3rd party の npm パッケージを極力利用せずに TypeScript で実装されていました。[1] 2021 年の 7 月

    Rome の core contributor になった
    efcl
    efcl 2023/04/20
    Romeの開発状況について。 開発資金がショートしたので、ボランタリーベースになっているという話
  • 1