タグ

ブックマーク / sosukesuzuki.dev (21)

  • 2023 年振り返り

    2023 年を振り返ります。 仕事 移転したユビーのオフィスにあるかっこいい壁 相変わらずユビーでプロダクト開発エンジニアをしていました。症状検索エンジン ユビーを開発するチームでフロントエンドとバックエンドを書いています。このプロダクト上で、製薬企業向けのソリューションを実現するための開発をしています。複雑なドメイン知識が求められる上に、会社の成長に伴って求められるデータやサービスの信頼性が上がってきていてチャレンジングな仕事だなと思っていますが、頼れる仲間と共に頑張っています。 また、仕事に関する記事をいくつか書きました。 テーブル駆動テストを使った QA エンジニアとソフトウェアエンジニアの連携 開発スピードを維持しながらモブプログラミングを実施した話 そういえば、たまに「どのくらい働いているんですが?」と聞かれることがあるんですが、普通にフルタイムで働いています。大学が忙しいときに

    2023 年振り返り
    mizdra
    mizdra 2023/12/31
  • JavaScript の Symbols as WeakMap keys について

    この記事では現在 Stage 2 の Symbols as WeakMap keys 提案について解説する。 プロポーザルの詳細についてはtc39/proposal-symbols-as-weakmap-keysを参照してほしい。 また、ここで紹介した仕様に関しては今後更新されていく可能性がある。 概要 Symbols as WeakMap keys は、WeakMap のキーとしてシンボルを使えるようにするための提案である。 現在の WeakMap では、キーとしてオブジェクトのみを使用できる。 const weak = new WeakMap(); const key = {}; const value = ""; weak.set(key, value); たとえば、キーとして数字や文字列などのプリミティブな値を使用すると実行時エラーが発生する。 const weak = new W

    JavaScript の Symbols as WeakMap keys について
    mizdra
    mizdra 2023/08/19
    WeakMap の key に Symbol を使えるようにする仕様、あとから出てきたんだ。そしてエッジケース色々あっておもしろい。
  • Prettier 3.0 をリリースしました

    2023 年 7 月 5 日に Prettier 3.0 をリリースしました。Prettier 2.0 がリリースされたのが 2020 年 3 月 21 日だったので、実に 3 年以上ぶりのメジャーアップデートとなります。 当はもっと早くこのブログを書きたかったんですが、やる気が出ずだいぶ遅れてしまいました。 この記事では Prettier 3.0 の主要な変更点を紹介します。 Prettier 3.0 の主要な変更点 Prettier 3.0 はメジャーアップデートということもあって大きな変更がいくつか含まれています。ここでは、そのうちユーザーに直接的な影響がありそうなものを紹介します。 ここで紹介する以外にも大きな変更はありますが、プラグイン開発者向けのものとか、Prettier のソースコード自体が全部 ECMAScript Modules で書かれるようになったとか、ユーザーから

    Prettier 3.0 をリリースしました
    mizdra
    mizdra 2023/07/27
    メジャーバージョンアップめでたい! お疲れ様でした。
  • フレームグラフを眺めて無駄な正規表現を消してPrettierのパフォーマンスをちょっとだけ改善する

    最近、Kohta Ito さんのブログ記事 0 から始める Node.js パフォーマンスチューニング を読みました。Kohta Ito さんは、実践 Node.js 入門 という書籍を執筆されたことでも知られています。 このブログ記事の「framegraph 編」という節では、 Node.js でのフレームグラフの生成方法や見方が説明されています。私はフレームグラフというものを知ってはいましたが、それを見てパフォーマンスの改善に活かしたことはありませんでした。 ということで、Prettier のフレームグラフを眺めてみて、実際にちょっとだけパフォーマンスを改善してみました。この記事では、そのパフォーマンス改善について説明します。 フレームグラフを生成するツール 0x 0 から始める Node.js パフォーマンスチューニング では、フレームグラフを生成するためのツールとして 0x が紹介

    フレームグラフを眺めて無駄な正規表現を消してPrettierのパフォーマンスをちょっとだけ改善する
  • Prettierはデフォルトでインデントのためにタブを使うべきなのだろうか

    Prettier がデフォルトでインデントのためにタブを使うべきかどうか、現時点での私の考えです。 useTabs のデフォルト値を true にするという提案 Prettier には useTabs というオプションがあり、インデントのためにタブを使うかどうかを boolean で指定できます。デフォルトでは false が設定されています。 2 年ほど前に Prettier v2 の準備をしているときに Change useTabs to true by default という、useTabs のデフォルト値を true に設定することを提案する issue が作成されました。 この issue での議論は活発に行われ、建設的なコメントや逆に全く建設的でない人格を批判するようなコメントなど、実に多くの意見が寄せられました。 この issue が作成れたのは v2 をリリースする直前だっ

    Prettierはデフォルトでインデントのためにタブを使うべきなのだろうか
    mizdra
    mizdra 2023/02/12
    つらい。Issue 覗いたらすごい議論が白熱してた…
  • 2022年に OSS 活動によって得た報酬を公開

    この記事を書いているのは 12 月 17 日なのでもう 3 日分書いていないことになりますが、頑張って追いつきたいと思います。 筆者が 2022 年に OSS 活動によって得た報酬を公開します。 前提 筆者はUbie 株式会社のフルタイムのソフトウェアエンジニア兼大学生であり、余暇時間にいくつかの OSS に関わっています。 主に Prettier というコードフォーマッターのメンテナンスをしています。 目的 この記事の目的は、読者の誰かがお世話になっている OSS プロジェクトに対して寄付や貢献をするきっかけになることです。ぜひお願いします。 筆者が受け取っている OSS 活動による報酬には大きく分けて二種類あります。 一つ目は OSS プロジェクトの OpenCollective から分配された報酬です。Prettier の OpenCollective に集まった資金を毎月 $150

    2022年に OSS 活動によって得た報酬を公開
    mizdra
    mizdra 2022/12/17
    すごい
  • Bundle Preloading があれば Module Declarations って要らなくないか?と思ったがそんなこともないらしい

    Bundle Preloading があれば Module Declarations って要らなくないか?と思ったがそんなこともないらしい 5 日目と同じように、ちょっとだけ Web の未来のことを考えます。 Module Declarations とは Stage 1 のプロポーザルです。前は Module Fragments と呼ばれていました。提案されたタイミングに解説記事を書いたのでよければそちらも参照してください。当時とは構文や細かい挙動がやや異なりますが、根的に解決したい課題は変わっていません。 https://sosukesuzuki.dev/posts/stage-0-module-fragments/ Module Declarations はモジュール内モジュールの宣言を可能にします。具体的には、次のような構文でモジュール内に新しいモジュールを宣言できます。 modu

    Bundle Preloading があれば Module Declarations って要らなくないか?と思ったがそんなこともないらしい
  • Prettier のサイズが大きすぎるからパッケージを分割してダイエットする計画

    最近の Prettier 開発の計画です。まだ何もやってないけど。 Prettier のサイズは大きい Prettier は npm パッケージのサイズが大きいことで有名です。 Prettier 2.8.1 のサイズ(11.6MB) Prettier のパッケージサイズが大きい理由はビルド方法にあります。 Prettier では、依存しているライブラリをすべてリリース時にビルド(バンドル)して Prettier の npm パッケージに含めています。 このあたりは Prettier のビルドの珍しいところで、リポジトリのルートに存在する package.json を見ると大量のパッケージが dependencies と devDependencies に含まれているのですが、実際に npm のレジストリに publish されるときの package.json の dependencies

    Prettier のサイズが大きすぎるからパッケージを分割してダイエットする計画
    mizdra
    mizdra 2022/12/10
    うれしい / "Jest のように内部的に分かれているもののユーザーはそれを気にせずに使えるような形を目指しています"
  • ESTree とは

    アドベントカレンダー飽きてきて文章が適当になってきている気がする。 概要 ESTree とは JavaScript の AST の仕様です。 https://github.com/estree/estree で Markdown として管理されています。 AST を表現する独自の構文(README では AST Descriptor Syntax として説明されている)を使って、JavaScript の各構文の AST の形を定義しています。 たとえば ArrayExpression (配列リテラル) の定義はこのようになっています。 interface ArrayExpression <: Expression { type: "ArrayExpression"; elements: [ Expression | null ]; } 1 行目の <: は implements のような意

    ESTree とは
  • 書いた JavaScript をそのまま動かすフロントエンド開発の未来のために必要なもの

    大きめのテーマです。もしかしたら「うちでは書いた JS をそのまま配信してるぜ〜」って人もいるかもしれないでが。 最近の Web フロントエンド開発では、書いた JavaScript をそのまま動かさないことが多い 最近のフロントエンド開発ではエンジニアが書いた JavaScript をそのままブラウザで動かすことはほとんどないかもしれません。 例として最近流行のフレームワークを考えてみましょう。Next.js や Remix、Nuxt.js など、いずれも内部的にトランスパイラやモジュールバンドラを使い、エンジニアが書いた JavaScript を別の形へと変換してからユーザーのブラウザで動かすような仕組みになっています。 一昔前だと Next.js のようなフレームワークが今ほど発展していなかったこともあり、webpack や Babel を直接使っていたと思いますが、それも同じです。

    書いた JavaScript をそのまま動かすフロントエンド開発の未来のために必要なもの
    mizdra
    mizdra 2022/12/06
    よくまとまってる / ビルド時の定数置換 (例: webpack.DefinePlugin) とかもケアする必要ありそう
  • Stage 3 Array Grouping プロポーザル の Web の互換性の問題

    何日まで続くかなぁ。 初日は Array Grouping の名前を巡る問題についてです。 Array Grouping とは Array Grouping は現在 Stage 3 のプロポーザルで、Lodash の groupBy に相当するものを ECMAScript に導入するプロポーザルです。 プロポーザルのリポジトリは https://github.com/tc39/proposal-array-grouping にあります。 このプロポーザルは Array.prototype.group と Array.prototype.groupToMap というプロトタイプメソッドを追加します。これらのメソッドは具体的には次のように使われます。 const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; const fn = (number) =>

    Stage 3 Array Grouping プロポーザル の Web の互換性の問題
    mizdra
    mizdra 2022/12/02
    groupBy が Web 互換性の問題あるのは知っていたけど、group でも同じ問題が起きる、という話になっていたのは知らなかった。おもしろい。
  • Prettier 2.8 はリリースしたくなかった

    今日は軽めの話題で。 先日 Prettier 2.8 をリリースしました。 We just released Prettier 2.8. This release includes support for TypeScript 4.9 satisfies operator and improvements to the --cache CLI option!https://t.co/Yfs7Pd5MsD — Prettier (@PrettierCode) November 23, 2022 TypeScript 4.9 で追加された satisfies 演算子 のサポートや --cache オプションの改善が含まれていて、人によっては嬉しいんじゃないかと思います。 この Prettier 2.8 ですが、実はリリースするつもりはありませんでした。 というのも、当は Prettier 2

    Prettier 2.8 はリリースしたくなかった
    mizdra
    mizdra 2022/12/02
    こういうタイミングで TypeScript のリリースに追従するの確かに大変だ (お疲れさまです)
  • Babel が Flow から TypeScript に移行した

    先日 Babel のメンテナーとして知られる Nicolò Ribaudo 氏が次のツイートを投稿した。 We finally finished migrating the Babel monorepo from Flow to TypeScript! It has been a very long process started by @z_bodya, and after migrating package-by-package @JLHwung just opened this PR 😄 pic.twitter.com/WKXxV8x2MY — Nicolò Ribaudo 🏳️‍🌈 • 💙💛 (@NicoloRibaudo) July 23, 2022 そう、JavaScriptトランスコンパイラである Babel のソースコードが Flow から TypeScrip

    Babel が Flow から TypeScript に移行した
    mizdra
    mizdra 2022/08/13
    移行すごい。めでたい。
  • オープンソースをメンテするときに自分が考えていること

    @azu さんのブログ記事 Maintainer Month: オープンソースをメンテナンスするコツ を読んで GitHub が Maintainer Month というイベントを主催していることを知りました。 自分は Maintainer Month の Sponsoring の対象でありませんが、自分がオープンソースのプロジェクトをメンテするときに考えていることを書き残しておこうと思います。 オープンソースガイド などにはすごいためになることが書かれていますが、積極的な内容で自分にとっては読むだけで疲れてしまうような内容でもあります。なのでこの記事ではあえて自分が普段考えていることの中でも消極的なことについて書いてみます。 オープンソースのメンテナンスに疲弊している人や、オープンソースに貢献している人、もしくは貢献しようと思っている人に「こんなゆるい気持ちでやってる人もいるんだ」と思っ

    オープンソースをメンテするときに自分が考えていること
    mizdra
    mizdra 2022/07/14
  • Prettier のサイズを減らすテクニック

    実は先日リリースした Prettier 2.6 では前のバージョンである 2.5.1 と比べてバンドルサイズが 3MB ほど減っています。 Prettier 2.5.1 のサイズ(20.0MB) Prettier 2.6.0 のサイズ(16.9MB) リリースブログで言及したとおり Prettier 2.6 ではモジュールバンドラーを Rollup から esbuild に移行したので、その影響かと思われるかもしれませんが実はそれだけではありません。esbuild への移行によって減ったバンドルサイズはそれほど大きくはありませんでした。 バンドルサイズが 3 MB 減ったのは泥臭いチューニングをいくつか行った結果なのです。 この記事では Prettier 2.6 で実施したバンドルサイズを減らすテクニックを紹介します。 きっかけ ライブラリのサイズは大きいより小さい方が当然良いですが、その

    Prettier のサイズを減らすテクニック
  • 翻訳: Prettier はメンテナーへの報酬の支払いを始めます

    この記事は Prettier 公式ブログに掲載されている Christopher Chedeau (@vjeux) 氏による記事 Prettier begins paying maintainers を、許可を得て翻訳したものです。 JavaScript を始めとしたいくつかの Web 開発のための言語のコードフォーマッターである Prettier は、2019 年から OpenCollective で寄付を募り始めすでに $50,000 が集まっています。私達はこの資金から二人のメンテナーに毎月$1500を支払うことにしました。この資金により、彼らは将来に渡って Prettier のメンテナンスを継続できます。 オープンソースとお金の問題は往々にして厄介です。私たちはこの問題に対して様々なことを試してきました。Prettierがオープンソース化された直後に Facebook は Jame

    翻訳: Prettier はメンテナーへの報酬の支払いを始めます
    mizdra
    mizdra 2022/01/08
    めでたい
  • 2021 年振り返り

    2021 の出来事を振り返ります。 学校 2021 年 4 月で B3 になるはずだったんですが、留年しました。 留年していたらしいということを夏頃に知りました。後輩が教えてくれました。僕が留年したことを教えてくれた後輩たちの顔はすごく楽しそうでした。 いつか留年するつもりではいたので特に悲しい気持ちはなかったんですが、留年したことに気づくことすらできてなかったのはちょっとおもしろいなと思いました。両親も「そりゃそうだよね」みたいな反応をしていました。 筑波大学の留年の仕組みをよく知らないので自分が B3 と名乗るべきなのか B2 と名乗るべきなのかよくわからないんですが、少なくとも卒業までの年数が1年伸びたのは確かなようです。 留年はしたものの、線形代数 A という科目を再々履修で修得することができました。すごく嬉しかったです。色々と教えてくれた同級生、後輩、知りあいのエンジニアの方々、

    2021 年振り返り
    mizdra
    mizdra 2021/12/30
    冒頭から怒涛の展開だった。OSS活動めちゃめちゃやられていてすごい…
  • Node.js の import.meta.resolve について

    先日 import.meta について調査して人に話す機会があり HTML(Web) と Node.js の各ホストの import.meta がどのようなオブジェクトを返すのかを調査していた。そのときは、「HTML でも Node.js でも import.meta.url だけが生えていて〜〜」という話をしてしまった。 後になって知ったのだが、Node.js には import.meta.url 以外にも import.meta.resolve というプロパティが実装されている。 この記事では Node.js に実装されている import.meta.resolve について解説する。 なお、import.meta.url はまだ Stability 1 の API なので、今後仕様が変わる可能性があることに注意してほしい。 import.meta について まず import.met

    Node.js の import.meta.resolve について
  • GitHub Sponsors をはじめました

    GitHub Sponsors をはじめました。 I've just started GitHub Sponsors. If you like my Open Source work, you can sponsor me on GitHub.https://t.co/1xiCsXDpzC — sosuke (@__sosukesuzuki) September 9, 2021 すでに4人の方に支援していただいています。ありがとうございます。 他の方にも支援していただけると嬉しいです。 Sponsor どのような OSS 活動をしているのか 主に JavaScriptTypeScript などのためのコードフォーマッター Prettier のメンテナーをやっています。 バグの修正、新しい機能の実装、リファクタリング、Issue のトリアージ、Pull Request のレビュー、リリ

    GitHub Sponsors をはじめました
    mizdra
    mizdra 2021/09/27
    いつもお世話になってますという気持ちで支援させて頂きました
  • JavaScript にイミュータブルな配列操作メソッドを導入するプロポーザルについて

    この記事では、現在 Stage 1 のプロポーザル Change Array by copy について解説する。 プロポーザルの詳細については、https://github.com/tc39/proposal-change-array-by-copy を参照してほしい。 また、ここで紹介した仕様に関しては今後更新されていく可能性がある。 概要 Change Array by copy は、簡単にいえばイミュータブルな配列操作メソッドを導入するプロポーザルである。 JavaScript の配列には多くのインスタンスメソッドがあり、それらを使って配列を操作できる。 配列のインスタンスメソッドには、ミュータブルなもの、つまりもとの配列を変更することによって配列を操作するタイプのものがいくつかある。 たとえば、Array.prototype.push や Array.prototype.pop、A

    JavaScript にイミュータブルな配列操作メソッドを導入するプロポーザルについて
    mizdra
    mizdra 2021/05/03
    Records and Tuples 関連だったの知らなかった