タグ

JavaScriptに関するklim0824のブックマーク (332)

  • ESLint を使い倒す(おすすめルール紹介)

    前書き ESLintJavaScript, TypeScript のための静的検証ツールです。 ESLint を活用することで、コーディング規約やベストプラクティスを機械的に強制することによりコードレビューの手間を省き、番環境でのエラーやパフォーマンスの悪化を抑制することができます。 TypeScript を使っているプロジェクトでは、パーサーを適切に設定すれば型情報を用いたより精密な静的検証を行うこともできます。 eslint を使う際、 eslint:recommended, plugin:@typescript-eslint/eslint-recommended などの各 eslint plugin の推奨 config のみを使って済ませたり、 eslint-config-airbnb などの config のみに頼ることも多い印象ですが、 recommended conf

    ESLint を使い倒す(おすすめルール紹介)
  • Fetch APIは「PATCH」だけ大文字と小文字の挙動が異なる

    const url = "https://fetch-api-normalization.deno.dev"; await fetch(url, { method: "PATCH" }); await fetch(url, { method: "patch" }); 実行すると、次のようなエラーを得るはずです。 PATCH を小文字で書いた際のエラーの一例 さて、どのような条件でこのエラーが発生するのでしょうか?これが意図されたものなのだとしたら、 GET や POST は大文字・小文字を無視してよくて PATCH は無視できない理由がなにかあるのでしょうか?以下でその理由を探ってみましょう。 いつエラーが発生するか このエラーは、 Fetch API を利用して外部の HTTP サーバーに対してリクエストを行う時に、 PATCH と書くべきところを patch と書いていると発生します。

    Fetch APIは「PATCH」だけ大文字と小文字の挙動が異なる
  • BudouX: 読みやすい改行のための軽量な分かち書き器

    .app 1 .dev 1 #11WeeksOfAndroid 13 #11WeeksOfAndroid Android TV 1 #Android11 3 #DevFest16 1 #DevFest17 1 #DevFest18 1 #DevFest19 1 #DevFest20 1 #DevFest21 1 #DevFest22 1 #DevFest23 1 #hack4jp 3 11 weeks of Android 2 A MESSAGE FROM OUR CEO 1 A/B Testing 1 A4A 4 Accelerator 6 Accessibility 1 accuracy 1 Actions on Google 16 Activation Atlas 1 address validation API 1 Addy Osmani 1 ADK 2 AdMob 32 Ads

    BudouX: 読みやすい改行のための軽量な分かち書き器
  • JSの非同期処理を理解するために必要だった知識と学習ロードマップ

    はじめに JavaScript の非同期処理を学習してみて「ある程度自信を持って理解できたと言える」状態に到達したので、その感想とまとめの学習ロードマップとその中でどのような知識が必要になるかを紹介したいと思います。 あるいは、自分が実際に学習してきた道筋に基づいているのでショートカットとして参考にしてもらったり、使えるリソースなどの情報が共有できると思います。もしくは「JavaScript 初心者が非同期処理を理解できるようになるまでの道筋」というストーリーで1つのサンプルとして見ていただけるといいかもしれません。 ChangeLog 大きな変更のみをトラッキングしています。 2022-11-16 の内容を反映させた追記・修正を追加 2022-05-21 構成を修正 「V8 エンジンから考える」の項目を追加 2022-04-30 「イベントループの共通性質」の項目を追加 「ロードマップ

    JSの非同期処理を理解するために必要だった知識と学習ロードマップ
  • JSONとBigInt

    ちょっと前にblueskyで見かけた話題。もとは「GraphQLのスキーマではintが32ビットしかなくて、64ビット整数とかないのがイケてない」といった話だったかなと思う。直感的にはこれは「Javascriptではすべてが倍精度浮動小数点数だから64bit intがないから」ということになるが、よくよく調べてみるといろいろややこしい歴史的事情があるようだ。 たしかにJSにはもともとひとつのNumber型しかなく、いわゆるdouble型(倍精度浮動小数点)だけで数値を表現してきた。IEEE754の倍精度浮動小数点数は仮数部が52ビットあるので、実際には32ビット整数ていどであれば全て誤差なく表現できる。なので32ビット整数または倍精度浮動小数点数がどちらも使えるというふうに理解されてきた。 そうはいっても不便なので、現代のJSにはBigIntがある。ES2020で導入されたらしい。ただし普

    JSONとBigInt
  • 【翻訳】リッチなWebアプリケーションのための7つの原則 - from scratch

    はじめに この話はGuillermo Rauch氏が書いたhttp://rauchg.com/2014/7-principles-of-rich-web-applications/ という記事の翻訳です。許可を得て翻訳しています。 ここ最近Web業界を賑わしているSingle Page Applicationの必要性、HTTP2/SPDYといった技術、リアクティブプログラミングやIsomorphicデザインという考え方について包括的にまとめたすごく良い記事になっております。 最初に断っておきますが、ものすごく長いです。各セクションがわかれているので時間がない方はセクションごとに書かれたtl;DRとまとめを読むだけでも参考になるかと思います。 ちなみに明日のNode学園祭には、記事を記述したGuillermo Rauch氏が見えるので、そこで詳しく聞いてみるのもいいのではないでしょうか。

    【翻訳】リッチなWebアプリケーションのための7つの原則 - from scratch
  • 悪名高きスワイプ広告を解析する - Qiita

    この記事の概要 ユーザーから嫌われている広告の1つに「スワイプ広告」というものがある。 誤タップをしやすいことが理由だが、あまりにもこの広告だけ誤タップするため調べたところ 実は誤タップしたように見せかけて意図的に広告先に遷移させる広告であるということがわかった。 スワイプ広告とは、左右にスワイプすると画像がついてくるタイプの広告である。 スワイプ広告とは スワイプ広告とは、主にアフィリエイトサイトで見られる広告形式の一つである。 ユーザーは指で画面上の広告を左右にスワイプすることで、広告画像を切り替えることができる。 スワイプによるインタラクティブ性を活かし、複数のメッセージやメディアを使い、魅力的な広告体験を提供することが特徴である。 なぜ悪名高いのか しかし、スワイプ広告はユーザーから嫌われている。その理由は、誤タップを誘発しやすいからである。 誤って広告をタップして画面が遷移してし

    悪名高きスワイプ広告を解析する - Qiita
  • input[type="number"] のマウスホイール事故を防ぎたい

    Leaner Technologies エンジニアのぐりこ( @glico800 ) です。 今回は何かと話題に上がりがちな input[type="number"] について、個人的に新しい発見があったので簡単にまとめてみました! 背景 ユーザーから入力した値と保存されている値が違うとのお問い合わせがあり、「そんなはずは…。」と思って調べてみたところ、 input[type="number"] の入力後にマウスホイール操作でページ下部にある保存ボタンに移動する際に入力値が意図せず変更されてしまっていたことが発覚。 「これは気づけない!」ということでなんとかしたい。 やりたいこと input[type="number"] でマウスホイール操作による入力値の変更をできないようにする。 前提 今回はPCChrome バージョン: 114.0.5735.198 で表示したケースを想定 実装方針

    input[type="number"] のマウスホイール事故を防ぎたい
  • JavaScript: 所望のイベントリスナの発火を妨げているイベントリスナを特定する | Wantedly Engineer Blog

    Webアプリケーションでは、DOMの要素にイベントリスナ(イベントハンドラ)を取り付けることで、ユーザーによる様々な操作 (クリックなど) に応じて処理を行うことができます。 しかし、イベントリスナを登録しても、他のイベントリスナとの干渉によって意図した通りに発火しないことがあります。ここではその調査方法を紹介します。 前提知識: イベントバブリングイベントについては筆者の過去記事でも解説しましたが、あらためてここでも説明します。イベントバブリングを理解することが、イベントデバッグの近道だからです。 DOMにおいて、要素はネストすることによって木構造を形成します。ある要素(ターゲット要素)がクリックされるなどしてイベントが発生したとき、イベントはその要素自体だけではなく、その祖先要素にも送られます。これをイベントバブリングといいます。 イベントバブリングは2つの段階に分けられます。 Cap

    JavaScript: 所望のイベントリスナの発火を妨げているイベントリスナを特定する | Wantedly Engineer Blog
  • アニメーションの実装が劇的に簡単になるFLIPテクニック - Katashin .info

    2023年7月10日CSS,JavaScript,アニメーション,デザインパターンアニメーションの実装はややこしいからCSS Transitionでできなければ実装したくない、そう思っていませんか?FLIPというテクニックを使うことで、CSS Transitionだけでは実装できないケースでも簡単にアニメーションを実装することができます。 FLIPとは #FLIP とは First, Last, Invert, Play の頭文字から取られた用語であり、アニメーションをこの4つのステップに分割して行うテクニックです。例えば、以下のようなリストの項目に追加、削除、並べかえができるUIに対して、簡単にアニメーションを付けることができます。 上のデモで追加、削除、並べかえを行った時に、項目の座標移動がアニメーションすることがわかると思います。これは CSS Transition だけでは実装する

    アニメーションの実装が劇的に簡単になるFLIPテクニック - Katashin .info
  • Cookie Store API による document.cookie の改善 | blog.jxck.io

    Intro JS から Cookie を操作する document.cookie の改善を目的とした Cookie Store API についてまとめる。 document.cookie document.cookie は、ブラウザの API における代表的な技術的負債の一つと言える。 HTML Standard https://html.spec.whatwg.org/multipage/dom.html#dom-document-cookie的な使い方は以下だ。 document.cookie = "a=b" console.log(document.cookie) // a=b まず、この API の問題を振り返る。 同期 API 最も深刻なのは、 I/O を伴いながら、同期 API として定義されているところだ。 この API は古くから実装されているため、I/O は非同期

    Cookie Store API による document.cookie の改善 | blog.jxck.io
  • 【随時更新】jQueryからJavaScriptへの書き換えまとめ

    document.querySelectorAll('input:not([name="newsletter"])')

    【随時更新】jQueryからJavaScriptへの書き換えまとめ
  • <div/> のレンダリングから始める React 学び直し

    React Advent Calendar 2022 2日目の記事です。 記事はごく簡単なコンポーネントから始めて、react のレンダリングについて学び直す記事です。学び直し(!=入門記事)なので JSX、TS の説明などはしません。 記事の対象読者 ある程度 react を触っていて、もっとレンダリングについて理解したい人 より良いコンポーネントを書きたい人 記事のコードについて 特に断らないかぎり、記事に出てくるコードは以下のコードを省略したものです。実際に動かせる codesandbox も用意したので、そちらも参照ください。 import { createRoot } from 'react-dom/client'; const App = /* 実装 */; createRoot(document.querySelector('#main')).render(<App

    <div/> のレンダリングから始める React 学び直し
  • 私がthrowを使わない理由

    この記事について JavaScriptではthrow文という文を使うことで例外を投げることができます。 このthrow文ですが、私はレビューなどで例外を投げないでくださいというコメントをするのですがその理由とどのようにコードを変更すればよいのか、ということを書いておこうと思いました。 前提条件 この記事の内容は下記の条件を前提として書き進めていきます。 TypeScriptを採用していること フロントエンド開発の場合 Node.jsを利用したサーバーサイドのコードやCLIツールの開発、各種ライブラリの開発については記事の対象に含まれないことをご了承下さい。 結論 先に結論から書いておくとTypeScriptを利用している場合例外はカスタムエラーを返却するか、Result型を利用するのがよいと思っています。 次の章からサンプルコードを用いながらthrow文を使った実例と、代替え案について記

    私がthrowを使わない理由
  • 環境変数に型を付与しよう!

    はじめに 皆さんは、Next.js で env ファイルを使用していて、process.envの後に env ファイルの環境変数を候補として出してほしいと感じたことはありませんか? 型を付与する方法を調べていたら、良さげなライブラリを見つけたので紹介します。 こちらの記事でおすすめされていました。 問題点 まずなにも使わずに、env ファイルを使用した際の問題点を挙げていきます。 型がstring | undefinedになる

    環境変数に型を付与しよう!
  • Node.jsでのrecursive readdir - araya's reservoir

    やりたいこと 下記のディレクトリで、files以下に存在するファイルのパスをすべて取得したい。 . └── files ├─ a │ ├─ a.txt │ └─ aa │ └─ aaa │ └─ a-aa-aaa.txt ├─ b │ └─ bb │ └─ b-bb.txt └─ c ├─ c.txt ├─ c1 │ └─ c-c1.txt └─ c2 └─ c-c2.txt つまりこのような結果が得られればいい。 [ "./files/a/a.txt", "./files/a/aa/aaa/a-aa-aaa.txt", "./files/b/bb/b-bb.txt", "./files/c/c.txt", "./files/c/c1/c-c1.txt", "./files/c/c2/c-c2.txt", ]; これを Node.js で実現することを考える。 Node.js の fs.r

    Node.jsでのrecursive readdir - araya's reservoir
  • ESLint とかのインストールだるくないすか?を解決する OSS を書いてる話

    tl;dr; JS(TS) 書くときに入れるものって何がある? node のプロジェクト新しく作るとき JS とか TS の開発時に決まって(ほぼ脳死で)入れるものと言ったら何があるでしょうか? 人によって違いがあるとは思いますが、だいたい以下の通りではないかなと思います。 ESLint Prettier Jest TypeScript そして、Next.js などの各種フレームワークを使う場合は ESLint とか Jest とか TypeScript が自動セットアップされている状態、というのがプロジェクト作成時に構築されてるんじゃないかなと思います。 でもこれらのセットアップが面倒だと思ったこと、土日もコード書く開発者各位は一度は思ったことあるんじゃないかなと思います。 具体的に何が面倒? node のプロジェクトであることを前提に、1 から構築していく前提で話を進めます。 Pret

    ESLint とかのインストールだるくないすか?を解決する OSS を書いてる話
  • Prettierでimportの順番を自動で整理する

    背景 フロントエンドPJのimport文は、複数のモジュールをインポートする際に使われます。 しかし、複数のモジュールをインポートする場合、どういう順番でインポートすればコードが見やすくなるのかは悩ましい問題です。 この記事では、PrettierのimportOrderを使って、import文を自動的に整理する方法を紹介します。 prettier-plugin-sort-importsのインストール PrettierのimportOrder設定は、インポート文を特定の順序に並べ替えるためのものです。 importOrderを使うには、prettier-plugin-sort-importsというプラグインをインストールする必要があります。 npmでインストール

    Prettierでimportの順番を自動で整理する
  • JavaScriptの関数名の全て - Qiita

    JavaScriptに限った話ではありませんが、関数というのは名前を持っていたり持っていなかったりします。関数名は普通はプログラムの読みやすさくらいにしか影響しませんが、JavaScriptでは必ずしもそうではありません。 例えばReactで関数コンポーネントを使う場合は関数名がコンポーネント名となり、React用開発者ツールなどで見ることができデバッグに役立ちます。また、Gulp v4もエクスポートした関数名がタスク名となります。 関数名は、関数オブジェクトのnameプロパティで取得できます。 function foo() { console.log('foo!'); } console.log(foo.name); // "foo"

    JavaScriptの関数名の全て - Qiita
  • 2023年1月のWebプラットフォームの新機能 | フロントエンドBlog | ミツエーリンクス

    このページの一部は、Google が作成し、クリエイティブ・コモンズ 4.0 著作権表示情報に記載されている用語に従って使用されている、著作物を複製したものです。 以下の内容は、2023年1月31日に公開された記事「New to the web platform in January」の日語訳です。翻訳の正確性は保証いたしかねますので、必要に応じ原文を参照ください。また、ブラウザサポートについては原文公開時点のbrowser-compat-dataに基づいており、必ずしも最新の状況を反映しているとは限りませんので、ご注意ください。 2023年1月に安定版およびベータ版のWebブラウザに搭載された興味深い機能を複数ご紹介します。 安定版ブラウザのリリース 2023年1月にはFirefox 109、Chrome 109、そしてSafari 16.3が安定版となりました。これがWebプラットフ

    2023年1月のWebプラットフォームの新機能 | フロントエンドBlog | ミツエーリンクス