気まぐれメモランダム / でたらめフィードバック

タグ: フロントエンド開発

TanStack Routerの単体テストで警告を出さない方法を確認する

公開:
構想を温めていた小品の新作自作Webアプリに手を付け始めました。新作はクライアントサイドでルーティングを行うのでルーティング用ライブラリが必要です。定番は古くからあり私も別アプリで使っているReact Routerかと思いますが、次の理由から今回は見送り。breaking changeにたびたび巻き込まれてあまりいい印象がないRemixとの統合を果たすv7のリリースが間近で安定するまで少し時間がかかりそう代わりに世評の高いTanStack Routerを試してみることにしました。TanStack RouterはFile-Based Routing推奨とのことなので素直に従ってみたところ、型推論や補完が強力に働いて感心することしきり。しかしルーティングってそんなに変わるものでもないので、労力のかけかたは少し疑問に思わないでもないです。…
エントリを表示

React AceをTesting Libraryでテストするときはフォーカスを明示設定すること

公開:
Tone.jsをベースにブラウザでのライブコーディングを可能にするlive tone、使えなくもないという感じにまではできそうなのでコード編集要素を標準のtextareaから高機能なコードエディタに変えることにしました。代表的なコード編集用コンポーネントと言えばCodeMirrorAceMonaco Editorあたりかと思いますが、今回は機能とサイズのバランスからAceを採用。React用のラッパーライブラリReact-Aceを使うことでtextareaからの置き換えも次を調整するだけで済みました。onchangeイベントハンドラの引数が標準と異なるので対応する幅と高さをwidthheight…
エントリを表示

React単体テスト実行時のSVGコンポーネント警告解消方法(vite + vitest編)

公開:
React+vite+vitest(+Happy DOM)のフロントエンドプロジェクトに初挑戦、SVGの参照にReactコンポーネントとしてのインポートを可能にするvite用プラグインvite-plugin-svgr(実体はSVGR)を利用したところ、vitest実行で次の警告が報告されました。(…)実害はありませんがノイズではあるので、解消を試みて次で解決できました。ユニットテスト実行時の置き換え用ダミーコンポーネント定義を任意の場所(jestのマナーに従うならsrc/__mock__/あたり)に保存します(…)SVGの参照をダミーコンポーネントに置き換えるエイリアスをvitestの設定で定義します…
エントリを表示

シャドウDOMを使わないLitElementでslot要素を使う方法

公開:
Lit、というかウェブコンポーネントには子要素を指定位置に再配置するためのslot 要素という機能があります。これはシャドウ DOM用のため、thisを返すcreateRenderRootメソッドを定義するなどして普通に DOM にレンダリングするようにしたLitElementでは機能しません……そのままでは。しかし考えてみれば普通に DOM にレンダリングしたのですから普通に DOM として操作すればよいだけの話です。幸いなことにその実現を容易にするライフサイクルメソッドをLitElementクラスは定義可能です。レンダリング前に呼び出されるconnectedCallbackメソッドで子要素を参照できます…
エントリを表示

RMWCとminifyの組みあわせでMDCのCSSが失われたときの対応方法

公開:
こんな現象に遭遇するのは私くらいかなあと思いながらメモ。個人用勤怠記録 Web アプリWorking time aroundは次のサードパーティーライブラリ・ツールを利用しています。UI キットにRMWC。React で Google 謹製 Web 向け Material Design CSS フレームワークMaterial Components for Web(以下 MDC)を利用可能にするコンポーネントライブラリで、MDC に依存もともと使っていた Google 謹製のMDC Reactの開発が終了してしまったのでやむを得ず乗り換えたもの(乗り換えの顛末)バンドラーにParcel先日ライブデモ
エントリを表示

LitでVue.js 2.xコンポーネントを置き換えた話

公開: / 最終更新日:
Lit + Deno + Packup でお手軽に Web Components 定義で記した通りLitのコンポーネントが開発できるようになったので、前回の更新ではブログ部分のVue.js 2コンポーネントを Lit コンポーネントに置き換えて Vus.js 依存を解消しました。Lit の使いかたがすこしわかってきたので、把握した注意点をメモとして残しておきます。以下すべて Lit v2.3.1 時点の話となります。また理解不足により誤りを記しているかもしれません。ご容赦を。

CSS フレームワークとの併用ではシャドウ DOM は使わない

Lit のコンポーネントはシャドウ DOMへのアタッチを標準的な利用と想定して定義されています。CSS in JS でコンポーネントのスタイリングを完結させるケースにおいては望ましい想定ですが、既存の CSS フレームワークの利用などスタイルを HTML 全体で定義・利用するケースではシャドウ DOM へのアタッチはスタイルが反映しないため使えません。…
エントリを表示

Lit + Deno + Packupでお手軽にWeb Components定義

公開: / 最終更新日:
IE サポート終了Web Componentsもいよいよ実用フェーズかと Web Components 開発用ライブラリLitのドキュメントに目を通していて、これはDenoを使えばお手軽なのでは?とひらめき試してみたところあっけなく成功したので共有。

Deno をインストール

まず Deno をインストールしていなければインストールします。Windows ならWindows パッケージ マネージャー(winget)でインストールできればお手軽なのですが、残念ながらまだ存在しません(Release Builds on WinGet Pkgs · Issue #5640 · denoland/deno
エントリを表示

Parcel 2とJestを組みあわせるときはBabelの設定を分離する

公開:
Parcel は便利、でも Jest を使うなら……の続き。バージョン 2 リリースまで長い停滞期間のあったParcel、最近は開発が活性化しています。バージョン 2 になって取りあつかいがおおきく変わったのがBabelの設定。presetsでの@babel/preset-envや@babel/preset-typescript、@babel/preset-reactの指定は Babel の設定としては定番ですが、Parcel はこの指定があるとしつこく警告します。(…)(…)(…)公式ドキュメントの解説によると次の通り。However, if you're only using `@babel/preset-env`, `@babel/preset-typescript`, and `@babel/preset-react`, Babel may no longer be necessary. Parcel supports all of these features automatically without a Babel config, and Parcel's default transpiler is much faster than Babel.
エントリを表示

RMWCでMDC Reactを置き換える

公開:
地味に間欠的に開発を続けている個人用勤怠記録 Web アプリWorking time around開発の停止した Material Component for React(MDC React)をいつまでも使い続けるのもなあ、ということでMDC Web on other frameworksで紹介されているRMWC: React Material Web Componentsに置き換えました。RMWC の日本語の情報はほとんど見かけないのでちょっとメモ。グリッド関連のコンポーネント、一行のときは行(GridRowコンポーネント)を省略して列(GridCellコンポーネント)を直接書けるようになっているのですが、そのせいで複数行のとき…
エントリを表示

Parcelは便利、でもJestを使うなら……(追記あり)

公開: / 最終更新日:
working-time-aroundではバンドラーにParcelを採用しました。試してみたかった、設定作業はしないに越したことがない、というのがその理由。実際に試してみるとなんにも準備せずに実行できる手軽さは圧倒的ですね。手放しでほめたくなります……が、ちゃんと開発するにあたってはおおきな落とし穴が。Jest使いはじめて気がついたのですが、Jest はbabelと協調して動くので、Parcel では不要な babel の設定も Jest 用に用意しないといけないのでした……だったらwebpackで設定統一したほうがまちがいがおきなくてよいではありませんか!Parcel と Jest + babel の分離は他にも問題があって、TypeScript の…
エントリを表示

MDC React v0.15の全面採用は時期尚早(追記あり)

公開: / 最終更新日:
2020-01-19(Sun)追記:昨年 11 月にMDC-React is no longer under active developmentと宣言されていました。アップデートされないと思ったらそういうことだったのか……working-time-aroundでは UI ライブラリとしてMaterial Component for React(MDC React)を採用しました。バージョンは v0.15 とまだメジャーバージョンはリリースされていませんが、ベースとなるMaterial Component for the Webが今年二月に v1.0.0 リリース後 v3.2.0 まで順調に版を重ねているので問題なかろうと判断してのこと。しかしこれはちょっと時期尚早で、まだまだ気軽に使うというわけにはいきませんでした。以下覚え書き。…
エントリを表示

Microsoft Edge Legacyのfetch API実装は2018年10月の時点では問題あり

公開: / 最終更新日:
2022-10-17(Mon)追記:2018 年公開の本エントリの指摘対象はいわゆる Edge Legacy で Chromium ベースの 2022 年現在の Edge にはあてはまらないため、タイトルを「Microsoft Edge の fetch API 実装は現在のところ問題あり」から変更しました。ここのところ業務ではしばらく Single Page Application(SPA)と Web API で構成された Web アプリケーションを開発しています。担当は主に SPA 側。最近は SPA も Internet Explorer のようなレガシーブラウザを相手にしなければ特に課題となるようなことはありません……とは残念ながらいかないのがつらいところ。問題になりがちなのはまたしてもマイクロソフト謹製のモダン(なはずの)ブラウザ、Edge です。…
エントリを表示

Material Design Liteのiframe処理をecho.jsで最適化する

公開: / 最終更新日:
Material Design Lite(MDL)は画像その他のリソースの有無をチェックし、存在しないときは非参照の表示が表に出ないよう調整します。そもそもこの機能がありがたいかは議論の分かれるところだと思うのですが(指定ミスに気づかない可能性が高まりますし)、対象のひとつである iframe 要素では別の問題も生じます。読みこみが二回発生してしまうのです。iframe 要素の参照先は比較的重いコンテンツになるので、これはありがたくない動作です。本来なら MDL が解決の方策を用意すべきだと思うのですが、残念ながら v1.3.0 の時点ではそうなっていません。この現象は遅延読みこみライブラリの利用で解消できます。しかし MDL での遅延読みこみライブラリの利用には別の課題があり、一般的なライブラリはそのままでは使えません。というのも、MDL はレイアウトを調整する際 body 要素の子要素に…
エントリを表示

Pick up work

最近のエントリ

アーカイブ

ブログ情報