タグ

hirose504のブックマーク (14,016)

  • StorybookとPlaywrightがもたらす画期的なUIテスト

    はじめに StorybookPlaywrightを連携してテストすることで、思っていた以上に良い開発体験が得られたので紹介します。 今回の記事で紹介するテストは以下のリポジトリで公開しています。 具体的には以下の点が最高でした。 独立したコンポーネント開発 Storybookを利用することで、UIコンポーネントを独立して開発・テストできます。これにより、コンポーネントの再利用性が向上し、効率的な開発が可能になります。 シナリオベースのテスト Playwrightを使ってシナリオベースのテストを実行できます。これにより、ユーザーの実際の操作に近い状況でのテストが可能となり、アプリケーションの品質を高めることができます。 クロスブラウザテストの容易さ Playwrightは、複数のブラウザでの自動テストをサポートしています。これにより、異なるブラウザでの動作検証が容易になり、互換性の問題を効

    StorybookとPlaywrightがもたらす画期的なUIテスト
    hirose504
    hirose504 2024/06/20
  • そのuseRef+useEffect、refコールバックのほうが良いかも? - Qiita

    Reactにおいて、useEffectのユースケースとして知られているのが、DOMノードに直接アクセスしなければいけない場合です。useRefでDOMノードをrefオブジェクトに取得し、エフェクト内からDOMノードにアクセスするというのがその場合の基的なやり方です。 このようなuseRef + useEffect の使い方は、問題ない場合もありますが、実は別の手段を使った方がいい場合もあります。その場合に別の手段として適しているのがrefコールバックという機能です。 そこで、この記事ではどのような場合にuseRef + useEffectよりもrefコールバックが適しているのか、そしてrefコールバックを使う場合の注意点について解説します。 復習: refコールバックとは React DOMでは、組み込み要素(divなどHTMLの要素)に対してrefという特殊なpropを与えることができ

    そのuseRef+useEffect、refコールバックのほうが良いかも? - Qiita
    hirose504
    hirose504 2024/06/20
  • 「このパスでこのファイルのインポートをさせたくない、、、」をESLintでルール化する

    Webエンジニアのhikaeです。 皆さんは「SOLID原則」についてどの程度知っているでしょうか? ソフトウェア開発においてメンテナンスしやすいコードを書くことは、とても重要な要素です。 今回はD(Dependency inversion principle)「依存性逆転の原則」にあたる内容で、 対象のパスで対象のファイルをインポートするのを禁止する仕組みを整えてみました。 日語の記事が見当たらなかったので、始めてみたい人はこの記事を参考にプロジェクトに導入してみてはいかかでしょうか? 今回の実装PRは以下に含まれています。 インストール 依存性逆転の原則に関しては以下の記事を参考にしてください。ここではルールの設定方法について説明します。 使用するライブラリはeslint-plugin-importです。メンテナの方、ありがとうございます。 npm install --save-de

    「このパスでこのファイルのインポートをさせたくない、、、」をESLintでルール化する
    hirose504
    hirose504 2024/06/20
  • ウォータフォールはやめて2024年の開発をやろう!|牛尾 剛

    今回の記事は特に私の意見であり、所属会社の意見ではないことをお断りしておきます。 最近になってまたウォータフォール vs アジャイルの議論を見かけることが多くなってきたので、私が勤務する米国の世界規模のクラウドプロバイダーでは2024年現在どんな開発をしているのかをご紹介したいと思います。私はこれが「正解」といいたいのではなく、何らかのポイントが皆さんの何らかの参考になったらいいなと思って筆をとりました。 ちなみに、2016年時点で私のウォータフォール開発に対する考え方は下記のブログの通りで今も変わっていません。ただ、2024年現在だからといってアジャイルをやるべきと思っているわけでもありません。 もし、今ウォータフォールをやっている人がいたら「そんなこと言ってもどうしたらええねん」となると思うので、自分なりの解決方法も考えてみました。 最初に自分的な結論を書いておくと「2024年の開発と

    ウォータフォールはやめて2024年の開発をやろう!|牛尾 剛
    hirose504
    hirose504 2024/06/19
  • ソートできるUUID v7をJavaで使うときの話

    JJUG CCC 2024 Spring の発表資料です

    ソートできるUUID v7をJavaで使うときの話
    hirose504
    hirose504 2024/06/16
  • 今話題となっているReact 19のSuspenseの変更内容を詳しく見てみました。

    はじめに 以下のツイートが発端でした。 投稿者は、React Query のメインコントリビュータの tkdodo さんです。 React 19 に含まれる変更にある異変を気づきました。 変更は以下に該当します react: Don’t prerender siblings of suspended component #26380 リリースノートに隅っこにありました。 この変更は RFC なしで含まれました。該当 PR は以下 What React では、 Suspense を使って、非同期処理を行うコンポーネントやReact.lazyによってコンポーネントの遅延ロード時に、読み込みを完了するまでフォールバックを表示させることができます。 以下のような実装があるとします。 import { lazy, Suspense, useState } from "react"; const Av

    今話題となっているReact 19のSuspenseの変更内容を詳しく見てみました。
    hirose504
    hirose504 2024/06/15
  • DoCoMoの25周年スペシャルムービーを見ると凄まじく感情が動くので書き殴ってしまった

    いまから7年前の2017年、とんでもないCMが世に放たれたことを皆さんはご存知だろうか。 DoCoMo25周年スペシャルムービーCM「いつかあたりまえになることを」。 このCMは4分にもおよぶ長さのためTVCMというより、もはやショートムービーなのだけど、とにかく破壊力が高いのでまずはしっかりと見てほしい。 なにこれ。 おそらく、この動画を見終わって、多くの人がこんな状態に陥ったんじゃないだろうか。 なんかしらんけど泣ける。 ただ、そこにあるのはあまりに複雑な感情なはずだ。 ありきたりで分かりやすいそれと違って、心の奥底がザワザワするような、敏感な場所を得体のしれないもので撫でられているような、まるでどこかで自分が経験したかのような、そんな感覚が生じているのだ。 もちろん、そうでない人もいるのだろうけど、それを言い出すと話が始まらないので、みんなそうなったと思い込んで話を進めていく。 感情

    DoCoMoの25周年スペシャルムービーを見ると凄まじく感情が動くので書き殴ってしまった
    hirose504
    hirose504 2024/06/14
  • TypeScriptのコンパイラを見てtype-challengesのEqual<X, Y>を完全に理解する

    この U1 and U2 are identical types (=U1とU2が一致する)という定義が重要で、このU1とU2にそれぞれ等価判定をしたいXとYを代入して、かつ他の条件を必ず満たすようにすれば、型の等価判定が実現できる。 ではなぜ<T>() => (T extends X ? 1 : 2)のような定義になってるかというと、これは「遅延評価のため」と述べられている。 Equal<X,Y> の実装に必要なのは Conditional Types 同士の比較なのだが、通常 Conditional Types は簡約されるため、Conditional Types 同士の比較になることは少ない。 T extends X ? 1 : 2 の評価をする際、Tは必ず未定である(この定義ではどの段階においてもTが具体的に決まることはない)。コンパイラは Conditional Types (T

    TypeScriptのコンパイラを見てtype-challengesのEqual<X, Y>を完全に理解する
    hirose504
    hirose504 2024/06/12
  • TypeScriptの型と値とバリデーション

    TypeScript質的に自分に型が付与されていると思っているだけの JavaScript です。 いくら型を付与しようが、それが実行時に影響を与えることはありません。 コードレビューをしているとここを誤解している人が当に多いです。何度も解説しているのですが、なかなか浸透しないので、TypeScript におけるバリデーションという視点で記事を書くことにしました。 あと TS でバリデータ使って色々作ろうとしている友人と、プログラミング始めたてで zodopenapi を使っいる友人がいたので、彼らが想定読者です。 型と値の名前空間 TypeScript 上での名前空間(スコープ)は2つに分類できます。 値: 実行時にランタイム上のメモリに存在するもの 型: 静的解析時にのみ参照可能なもの。コンパイル時に完全に消滅する。 TypeScript は基的に JavaScript

    TypeScriptの型と値とバリデーション
    hirose504
    hirose504 2024/06/12
  • 「役に立たない機械」早慶戦 2024

    1回表:早稲田「割りばし割り機」 最初は早稲田の佐口幸太郎さんの「割りばし割り機」からだ。 この真ん中の機械がそう 「割り箸というのは素手で割れるというのが長所であり特徴だと思うんですが・・」 と佐口さんが説明を始める。 「こういう形で割り箸をセットしまして・・」 「軽く握ると・・」 「バキャッ!」 と音がして割り箸が二つに弾け飛び、そのまま机に落ちる。 「おお〜」という歓声と拍手が鳴る。 「先生にいただいたお寿司をべたいと思います」 と、いま割ったお箸を机から拾って使う。 鈴木先生による講評はこんなふうだった。 ・お箸を割ったら確実に下に落ちるところがいい ・落としたものは普通もうべられない、なのに拾って使うというところが未知の領域 今回、じつはぼくも講評に参加したのだが、並べて書くのは恐れ多いので感想をふつうに地の文に書くことにする。この作品で好きなのは割れる時の音だ。箸を手で直接

    「役に立たない機械」早慶戦 2024
    hirose504
    hirose504 2024/06/12
    良い
  • 大公開!バッチアプリケーションの品質を高めるZOZOの『バッチ開発ガイドライン』 - ZOZO TECH BLOG

    こんにちは。MA部の田島です。 弊社では開発ガイドラインというものを用いて、システムの品質を担保しています。今回私がテックリードを務めているということもあり、バッチアプリケーションを開発するためのガイドラインを作成しました。記事では「開発ガイドライン」と「バッチ開発ガイドライン」を紹介します。 バッチアプリケーション開発に限定したTipsはまとまっているものが多くないため参考にしていただければと思います。 開発ガイドラインについての紹介 冒頭でも紹介した通り弊社では、開発ガイドラインというものを用いてシステムの品質を担保しています。バッチ開発ガイドラインを紹介する前に、まず開発ガイドラインを紹介します。 開発ガイドラインの種類 開発ガイドラインは現在、以下の種類が存在します。 共通 Android iOS Frontend Backend Infra API Batch DB(Datab

    大公開!バッチアプリケーションの品質を高めるZOZOの『バッチ開発ガイドライン』 - ZOZO TECH BLOG
    hirose504
    hirose504 2024/06/11
  • LINE Botの開発でCloudflareとHonoを使う理由

    概要 速さが正義 LINE Botの開発でCloudflareとHonoを使う理由 Cloudflare Workersの応答速度が速いから PoPについて CloudflareAWSlambdaに比べてポイントオブプレゼンス(PoP)の数が多く、処理が実行される場所がよりユーザーの近くにある可能性が高い。 そのため、パフォーマンステストではAWS LambdaAWS Lambda@Edgeよりも応答時間が小さいという結果になった。 コールドスタートがない Cloudflare Workersはコールドスタートがなく、LambdaLambda@EdgeのようにEventBridgeで1分おきにツンツンしなくていい。 Service bindingsが便利だから Cloudflare WorkersのService bindingsを使用することで、worker間の通信はパブリックに

    LINE Botの開発でCloudflareとHonoを使う理由
    hirose504
    hirose504 2024/06/09
  • explainだけじゃわからない!MySQLのindexの考え方 - BASEプロダクトチームブログ

    はじめに こんにちは、バックエンドエンジニアのSakiです!バックエンドでPHPを書いたり、PHPという言語そのもののメンテナーもしています。 この度、注文データダウンロードAppのパフォーマンスをアップさせるため、とても入念にデータベースまわりの処理を見直しました。その中でも特に速度に関わってくる「index」についての考え方をまとめたいと思います。 この記事はMySQL(InnoDB)についての記事であり、他のRDBについては当てはまらない場合もあるということにご注意ください。 indexとは何か、おさらい ご存知の方ももちろん多いと思いますが、indexについておさらいさせてください。 indexとは辞書でいうところの目次に相当するもので、目的のデータをいち早く検索するために重要なものです。もし辞書に目次が存在しなかった場合、目的の情報を探すのにとても苦労するだろうというのは想像しや

    explainだけじゃわからない!MySQLのindexの考え方 - BASEプロダクトチームブログ
    hirose504
    hirose504 2024/06/05
  • 「これはHEAD^^」 「これはHEAD^2」 「これはHEAD~2」「HEAD@{2}、reflog用」「全部いっしょじゃないですか」「違う!!もっとよく見ろ!!」 - Qiita

    「これはHEAD^^」 「これはHEAD^2」 「これはHEAD~2」「HEAD@{2}、reflog用」「全部いっしょじゃないですか」「違う!!もっとよく見ろ!!」Git 画像略 TL;DR(Too Long; Didn't Read) ~nは単純なコミットの親をたどる(ブランチの分岐がある場合は現在のブランチのみで辿れるコミット) ^nはマージコミット向けで^2は「そのコミットの2番目の親(取り込んだブランチの前回のコミット)」 だからHEAD^n(n > 2)は存在しない 2024/06/04追記: OctopusなMergeだと3つ以上のブランチからマージできるので^nも存在する......があまり見かけることはない HEAD^^は「HEAD^の親」、HEAD^2は「HEADのもう一人の親」みたいな......。タラちゃんがHEADだと波平がHEAD^^でマスオがHEAD^2です(

    「これはHEAD^^」 「これはHEAD^2」 「これはHEAD~2」「HEAD@{2}、reflog用」「全部いっしょじゃないですか」「違う!!もっとよく見ろ!!」 - Qiita
    hirose504
    hirose504 2024/06/05
    覚えてらんないのでGUIを使います
  • 明示的な型注釈によって推論コストを下げるというアプローチ

    近年、TypeScript を取り巻くエコシステムでは、ユーザーに明示的な型注釈を求めることで、推論や型生成のコストを下げるというアプローチが注目されています。TypeScript 5.5 beta で 発表された --isolatedDeclarations オプションはその代表的な機能ですし、Deno の提供する新しいパッケージレジストリ JSR が提唱している slow types という考え方も同様のアプローチを求めるものです。 この記事では、上記のようなアプローチが提案された経緯や解決したい課題について、TypeScript を利用するエコシステムの状況も踏まえて整理します。 TypeScript を取り巻くツールチェインと型情報を利用する上でのパフォーマンス 皆さんがご存知の通り、TypeScript の型推論は非常に賢く、その機能は日々アップデートされています。特に以下のよう

    明示的な型注釈によって推論コストを下げるというアプローチ
    hirose504
    hirose504 2024/06/04
    “--isolatedDeclarations オプションが有効になった環境下では、明示的な型注釈のない変数や関数をエクスポートしようとするとエラーになります。”
  • 三大数字で表せる言葉

    3150(最高)4649(よろしく)8107269(はてなブログ) あと一つは?

    三大数字で表せる言葉
    hirose504
    hirose504 2024/06/04
    504は自分の名前に由来してる
  • JavaScript 実行エンジン V8 の JIT 出力コードを読んでみよう

    ChromeJavaScript はとても高速なことでも有名ですが、その実行エンジンは V8 と呼ばれます。V8 自体は独立したモジュールであり、Node.js 等にも使われております。 V8 が JavaScript を高速に実行する技術の一つが JIT (Just In Time) コンパイルです(一般的に JIT と呼ばれます)。これは、そのまま実行すると遅い JavaScript を実行中にリアルタイムに直接マシンコードに変換し(これが Just In Time と呼ばれる所以です)、途中からそのコードに入れ替えて実行することで高速化を達成しています。特に何度も実行される関数で効力を発揮します。 JIT という名前は聞いたことがあろうとも、実際に JIT がどのようなコードを実行しているのかを確認する機会は滅多にないでしょう。この記事では、実際に V8 の JIT の出力を確

    hirose504
    hirose504 2024/06/04
  • MySQL/Aurora/TiDBロック入門 – 第1回トランザクション分離レベル|技術ブログ|北海道札幌市・宮城県仙台市のVR・ゲーム・システム開発 インフィニットループ

    MySQL/Aurora/TiDBロック入門 – 第1回トランザクション分離レベル MySQL InnoDB および AWS Aurora や PingCAP TiDB におけるロックの仕組みやトランザクションの動作を全11回のシリーズで解説します! 最初はベースとして重要な MySQL 8.0 InnoDB 前提でユーザー視点でのロックの仕組みを学び、後半第10回以降では MySQL 互換 DB として人気の高い AWS Aurora や PingCAP TiDBMySQL InnoDB との違いについて学びます。 1回目の今回はロック機構と切っても切り離せないトランザクションとその分離レベルについて、実際に挙動を確かめながら解説します。ライブ感のある説明も理解に役立ちますので、解説動画も付けてみました。合わせてご覧ください! ★ 第1回 トランザクション分離レベル ★ 第2回 ロ

    MySQL/Aurora/TiDBロック入門 – 第1回トランザクション分離レベル|技術ブログ|北海道札幌市・宮城県仙台市のVR・ゲーム・システム開発 インフィニットループ
    hirose504
    hirose504 2024/05/31
  • Reactのトランジションで世界を分岐させるハンズオン

    ReactのSuspense機能に付随するトランジションは、使いこなせば有用ですが裏で何が起こっているのか分かりにくい機能です。このでは、手を動かすことでトランジションの機構をしっかりと理解することを目指します。

    Reactのトランジションで世界を分岐させるハンズオン
    hirose504
    hirose504 2024/05/31
  • デジタル庁デザインシステムβ版

    デジタル庁デザインシステムは、スタイリングの考え方を提供するデザイン言語、情報の視覚表現とインタラクションを具現化するUIコンポーネント、ユーザビリティとアクセシビリティを踏まえた設計や実装のためのガイドラインから構成されるデザインアセットです。 デジタル庁のミッションである「誰一人取り残されない、人に優しいデジタル化を。」の実現に寄与することを標榜し、官公庁や地方自治体などの行政機関や公共性の高い組織等のウェブサイト/ウェブアプリケーション/オンラインサービスまたはシステム等で利用することを念頭に置いて構築されています。

    デジタル庁デザインシステムβ版
    hirose504
    hirose504 2024/05/30