Node.jsパフォーマンスチューニングをDatadog APMとClaude Codeでサクッとやる

はじめに こんにちは、kosui(@kosui_me)(id:kosui_me)です。 普段は医療系のスタートアップで認証基盤・ライセンス基盤・組織階層基盤などのプラットフォームシステムを開発・運用するチームのテックリードをしています。 日本の医療に本気で向き合う。認証…

私がTypeScriptで `interface` よりも `type` を好む理由

はじめに TypeScriptで型を定義する際、interface と type のどちらを使うべきか。これは、多くの開発現場で一度は議論になるテーマではないかと思います。 世の中の多くのドキュメントや記事では、クラスへの implements のしやすさや、interface が持つ「…

ユーザーの内部IDの発行権を他人に握らせてはいけない

結論 ユーザーの内部IDを自システム以外に委ねるべきではありません。 ユーザーの内部IDの実装について気をつけるべきことを2つ紹介します。 外部サービスが発行したIDを内部IDにするべきではない ユーザーが変更可能な値を内部IDにするべきではない 外部サ…

なぜTypeScriptでメソッド記法を避けるべきか?実務に近い事例の紹介

参考文献 プロを目指す人のためのTypeScript入門 安全なコードの書き方から高度な型の使い方まで | 技術評論社 通称ブルーベリー本。コラム17に記載。 Method Shorthand Syntax Considered Harmful | Total TypeScript TypeScript の変性(共変・反変)を 5 …

生成AIにMermaid.jsでロバストネス図を描いてもらう

背景 生成AIによる要求分析 要求分析はチームによるシステム開発の要であり、関係者の認識を揃えるために非常に重要なプロセスです。 システム開発のための要求分析の手法としてICONIXやRDRAなどが知られていますが、その過程ではユースケース図やロバストネ…

TypeScriptでドメインイベントを容易に記録できるコード設計を考える

はじめに データアナリストの現場の苦しみ 近年、ビジネスの意思決定にはデータの活用が重要だという認識が広まりつつあります。実際、データアナリストに関する求人やデータ分析の発表が増えているのを実感します。 しかし、現場では、異常かつ不十分なデー…

Union型から交差型への変換

はじめに Union 型から交差型へ変換するユーティリティ型を紹介し、その仕組みを解説します。 私はこのユーティリティ型を時々利用しますが、その原理を度々忘れてしまうのでここにメモしておきます。 使い方 以下の例では、UnionToIntersection が Age | Na…

Discriminated Unionを利用したStateパターンの実現

この記事について 先日公開した下記の記事について、記事冒頭で紹介した「クラスベースによる状態遷移の実装」があまりに素朴な実装であり、その後Stateパターンへの言及がほとんどなされなかった上、あたかもクラスを用いた実装そのものに問題があるような…

複雑な状態遷移😭: クラスではなく関数とDiscriminated Unionで状態の定義と遷移を表現する

補足: 2025/02/25 本記事でほとんど紹介されなかった「Stateパターン」を含めて再構成した記事を公開しましたので、今後は下記の記事をご覧ください。 kosui.me 補足: 2025/02/21 クラスベースでも、Stateパターンを適用し、StateをDiscriminated Unionとし…

網羅的なPRDやDesign Docを書かなくなった

2024/06/12 16:16 結論を追記 2024/06/12 20:29 より記事の内容を分かりやすく理解頂くため、タイトルを「PRDやDesign Docを書かなくなった」から変更 2024/06/13 20:39 結論にフロー情報・ストック情報に関する意見を追記 結論 この記事では、「様々な観点…

TSKaigiにプロポーザルが採択されました🎉

2024/03/20 追記 採択されました 聴講者の期待に応えられるように全力で頑張ります また、これに伴い記事のタイトルを「TSKaigiにプロポーザルを提出しました」から変更しています。 TSKaigi 2024年5月11日にTSKaigi 2024が開催されます。 柔軟な型の表現力…

for...of 文を使わずに Promise を直列実行するための TypeScript 向けユーティリティ

はじめに 「iterators を使わずに Array の各メソッドや Object.keys を使おうね」とか「Array に対する非同期処理の直列実行は reduce で書けるよね」とか、もう 2017 年ぐらいに十分話され尽くした話だとは思います。 しかし、reduce による Promise の直…

BigQuery の課金額で泣かないための UserScript

はじめに BigQuery を利用する上で、うっかり高額なクエリを投げてしまったことはありませんか?また、「BigQuery を利用したいけれど課金額が分からないと破産しそうで怖い」という方もいるのではないかと思います。 qiita.com そこで、BigQuery のエクスプ…

それでも .env を env したい

はじめに 様々なやんごとなき事情によって、手元でささっと source .env もしくは env $(cat .env) foobar したくなる時はありませんか。 私はあります。 しかし、以下の記事にて指摘されている通り、 .env ファイルのシンタックスは、Bash や Zsh などの Bo…

Go コンパイラのコードを読んでみよう

はじめに 本記事は、 DeNA Advent Calendar 2020 の 11 日目の記事です。 突然ですが、「コンパイラのコードを読んでみよう」なんて言われても、「どうせ巨大で難解で複雑なロジックを理解しないと読めないんでしょ?」と思いませんか。 コンパイラの構造を…

ISUCON10 予選敗退の記録と反省

はじめに 2020/09/28 に開催された ISUCON10 で予選敗退。 とても楽しい問題でしたが、無残にも敗れ去りました。 来年に向け、事前準備および当日にやったことを振り返ります。 なお、チームメイト @genya0407 の参加記は こちら になります。 記録 「ここに…

二者間交渉ゲームにおける交渉解の比較

はじめに 本記事では、二者間交渉において、交渉解として著名な、ナッシュ交渉解、カライ・スモルディンスキー解、均等解(カライ解)を紹介する。 注意書き カライ・スモルディンスキー解および均等解は、二者間交渉の場合と、三者以上による交渉の場合で…