ブックマーク / www.mizdra.net (11)

  • fetch の中断と Back/Forward Cache からの復元で発生する奇妙な現象について - mizdra's blog

    TL;DR あるリソースの fetch 中にページ遷移すると、一部ブラウザでは fetch が中断される 中断されると、TypeError が throw される ページ遷移時は、ブラウザによって遷移前のページの実行が"停止"され、"捨てられる"ので、通常 throw された後のことは考えなくて良い しかし、そのページが Back/Forward Cache から復元されうるなら、話は別 ブラウザバックすると、エラーが throw された後からページが再開される!!! そして発生する、奇妙な現象の数々... はじまりは、あるサービスの不具合報告 ある日、「Webサービスから外部サービスにページ遷移した後、ブラウザバックで戻ると、エラー画面が表示される」という不具合が報告された。どうも WebサービスErrorBoundary で何かしらのエラーが catch され、それによってエラー画

    fetch の中断と Back/Forward Cache からの復元で発生する奇妙な現象について - mizdra's blog
    t_f_m
    t_f_m 2023/12/15
  • Prisma で本物のDBMSを使って自動テストを書く - mizdra's blog

    DBMS に依存するロジックのテストを書く時、主に2つの手法があると思います。 Repository 層などを mock する Service 層のテストをする時は、その下位の Repository 層を mock して、DBMS に依存しない形にしてからテストする レイヤードなアプリケーションで適用できる手法 テスト実行時も DBMS を裏で動かして、それを使う 番と同じスキーマを持つ DBMS に対して、実際に insert したり select してテストする DBMS は docker-compose upとかで事前に立ち上げておく 双方にそれぞれ良さがあって、プロダクトによってどっちでやるか変わってくると思います。 この記事では 2 の手法を Prisma でどうやるかについて紹介します。 前提 実際のテストコードの例 テストヘルパーを作る 別解: ヘルパーを自動生成する je

    Prisma で本物のDBMSを使って自動テストを書く - mizdra's blog
    t_f_m
    t_f_m 2022/11/24
  • コードジャンプ可能な CSS Modules を実現する happy-css-modules の紹介 - mizdra's blog

    弊社では ReactCSS を書くための手法として CSS Modules を全面的に採用しています。そこで CSS Modules を使った開発をより快適にするために、「happy-css-modules」というツールを作りました。 happy-css-modules のデモ。 この記事ではこのツールが必要になった背景、導入方法、そしてツールの技術的な仕組みについて紹介します。 CSS Modules の問題点と、typed-css-modules による解決 CSS Modules では、デフォルトでは存在しないクラス名を使用しても、(プロジェクトの設定次第ですが) TypeScript のコンパイルエラーが出ることはありません。 import styles from './Button.module.css'; function Button() { return ( <but

    コードジャンプ可能な CSS Modules を実現する happy-css-modules の紹介 - mizdra's blog
    t_f_m
    t_f_m 2022/11/19
  • npm-scripts を書く時の手癖 - mizdra's blog

    かれこれ 5 年くらい趣味開発で npm-scripts を書き続けている。長年書き続けているとノウハウが蓄積されてきて、「こう書くとスッキリする」「迷いがなくなる」「後から拡張したくなった時に、簡単に拡張できる」みたいな書き方が身についてきた。自分の型、あるいは手癖のようなものだと思う。 せっかくなので、id:mizdra の今の npm-scripts を書く時の手癖を書き連ねてみる。 基形 { "scripts": { "build": "webpack --mode production", "dev": "webpack-dev-server --mode development", "lint": "eslint .", "test": "jest" } } 一番シンプルな npm-scripts を書く時のパターン。以下の 4 つの script を登録している。 buil

    npm-scripts を書く時の手癖 - mizdra's blog
    t_f_m
    t_f_m 2022/03/29
    "じゃあtsconfig.jsonにしないといけないのかというと、そうでもない。Solution Style tsconfig.json というものを用意すれば、好きな名前の設定ファイルを tsserver に読み込ませることができる"
  • 個人的 Web フロントエンドスキルの獲得方法 - mizdra's blog

    ここ2年くらいの話なのですが、仕事で「フロントエンド会」というチーム内委員会のようなものを立ち上げて運営しています。元々1人の Web フロントエンド職人がプロダクトの Web フロントエンドの面倒を見ていたのですが、その方が異動されることになったので、残った人で面倒を見ていける体制を作りましょう、というモチベーションで発足した会でした。この話については以前イベントで発表したので、詳しくはこのスライドをご覧下さい。 speakerdeck.com Web フロントエンド職人の異動とともに入社した id:mizdra が Web フロントエンドが得意だったので、ペアプロやペアオペ、定例会などを通じてどんどんスキルや知見を配っていく、という戦略で運営していました。実際に 2 年経過してみてメンバーも徐々にキャッチアップしていって、ちょっとしたパフォーマンス改善をやってみたり、最近 Gulp

    個人的 Web フロントエンドスキルの獲得方法 - mizdra's blog
    t_f_m
    t_f_m 2022/01/01
  • svh という策定中の CSS Unit について - mizdra's blog

    CSS Values and Units Module Level 4 という提案にて、 svh という新たな CSS Unit の導入が検討されています。簡単に言うと、ブラウザのナビゲーションバーやオムニボックスの高さを除外した vh です。 🚨🚨🚨 There are some changes being proposed regarding viewport units, finally solving that "100vh in Safari on iOS" issue (cfr. https://t.co/fvoIXRLqJx) Let's take a look … 🧵 pic.twitter.com/ektVwlhI7O— Bramus (@bramus) 2021年6月18日 今までは実際にユーザがブラウザで見ている範囲内に要素を収めるには JS で動的に可視領域

    svh という策定中の CSS Unit について - mizdra's blog
    t_f_m
    t_f_m 2021/07/14
    small viewport height / 実際にスクロール等で動く範囲の高さって感じか
  • JavaScript で print デバッグ時に変数名を出力する - mizdra's blog

    数列の和を求めるプログラムを作成することになり、意気揚々と以下のようなプログラムを書いたという状況を想像して下さい。 function sum(nums, acc = 0) { if (nums.length === 0) return 0; if (nums.length === 1) return nums[0]; return sum(nums.slice(1), acc + nums[0]); } const nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; console.log(sum(nums)); // expected: 55 一見すると何も問題なさそうに見えるプログラムですが、実はバグがあります (皆さん分かりますか?) *1。実際に上記プログラムを実行すると 55 ではなく 10 が出力されます。 こうした場面に遭遇すると、自然と sum

    JavaScript で print デバッグ時に変数名を出力する - mizdra's blog
    t_f_m
    t_f_m 2021/05/03
  • ブラウザにおけるメモリリークを解決するために読んでおけると良い資料 - mizdra's blog

    最近趣味仕事の Web アプリケーションでメモリリークに遭遇して、頑張ってメモリリークの原因を突き止めて修正する、ということがあった。その過程でメモリリークについて色々調べて知見が溜まったので、学習資料の紹介という形でアウトプットしてみる *1。 前置き 紹介する記事がかなり偏っていることに注意 冒頭で触れたメモリリークを解決するために読んだ記事をまとめただけなので、内容にそれなりの偏りがある 例えば id:mizdra が遭遇したメモリリークは全てブラウザ上で発生していたものだったので、これから紹介する内容も主にブラウザにおけるメモリリークに焦点を当てたものになる GC がどうメモリをどう解放しているか、何故メモリリークが発生するのかは全てカット 調べれば色々な記事が出てくるので、必要に応じて読んでください 基的な知識を抑える まずメモリリークとメモリ撹拌の違いを学ぼう どちらも同じ

    ブラウザにおけるメモリリークを解決するために読んでおけると良い資料 - mizdra's blog
    t_f_m
    t_f_m 2021/02/10
  • polyfill を深堀りする - mizdra's blog

    この記事ははてなエンジニア Advent Calendar 2020 5日目の記事です。4日目は id:syou6162 さんで、数字のバラ付きを考慮して意思決定する技術でした。 qiita.com developer.hatenastaff.com こんにちは、id:mizdra です。今年新卒としてはてなに入社し、WebアプリケーションエンジニアとしてGigaViewerというマンガビューワーを作っています。 最近のはてな社内では「tech-future」という、様々な技術を見つめ直すワーキンググループを運営しています。この会では、ある技術についての要点をまとめるだけでなく、その技術にまつわる歴史を紐解いて整理し、その上で全体を俯瞰して将来その技術がどういう方向に向かうのかを議論し、未来を予測する手がかりを作る、といった挑戦的な取り組みをしています。既に弊社のエンジニアから「tech-

    polyfill を深堀りする - mizdra's blog
    t_f_m
    t_f_m 2020/12/12
  • 画像による Layout Shift が無くなる Web がやって来る - mizdra's blog

    はじめに Web では古来より <img> タグを用いて画像を読み込んでいました. しかし <img> タグにはアスペクト比に関する情報を埋め込むための属性が用意されていません. そのため, ブラウザが画像をネットワークから fetch して読み込みが完了するまで, レスポンシブな img 要素の寸法を決定できず, ページにガタツキ (Layout Shift) が生じる問題がありました. この問題を解決するため以前より, アスペクト比を埋め込むための新たな属性の導入が提案されていました. しかし最近議論に動きがあり, 既存の属性を利用する方法が提案され, ブラウザに実装され始めています. ここでは問題の背景, 提案と議論の変遷, そして開発者が取るべき対応について紹介します. はじめに img タグと Layout Shift intrinsicsize 属性 intrinsicsize

    画像による Layout Shift が無くなる Web がやって来る - mizdra's blog
    t_f_m
    t_f_m 2020/06/01
  • 日向縁さんの誕生日をお祝いしてゲームを作った話 - mizdra's blog

    はじめに この記事はゆゆ式 Advent Calendar 2018 9日目の記事です. adventar.org 今回は日向縁さんの誕生日をお祝いしてゲームを作ったので, その紹介をします. 日向縁さんと目 皆さんは「日向縁」というキャラクターを聞いて初めに何を連想するでしょうか. ゆるふわ, お姫様, よく笑う, などなど. 人によって様々なイメージが浮かぶと思います. ちなみに僕は「1の目」を最初に連想しました. そう, 日向縁さんといえば作中でよく数字の「1」のような目をすることで知られています. 原作者の三上小又氏のツイートなどで「1の目」をネタにされていることで印象深い方も多いでしょう. さんげんめ!日向縁編 今日 味のり pic.twitter.com/AmhluZkE8t— 三上小又@ゆゆ式 きららファンタジアやってるよ。 (@mikamikomata) 2015年3月3日

    日向縁さんの誕生日をお祝いしてゲームを作った話 - mizdra's blog
    t_f_m
    t_f_m 2018/12/10
  • 1