2023-01-01から1年間の記事一覧
例えばサンプルコードを同梱したい場合や, コンパイラのセルフホストのような場合など, Node.js パッケージの内部でそのパッケージ自身を参照したくなることがあります. あるか? このときの方法がいくつかあるので軽くまとめます. ここでは例として以下のよ…
ふと「最寄り」のように「最」と書いて「も」と読ませる語に異常性を感じたので, すべての「最」を集めたくなりました. 昨日のことです. 集めるとはいっても, 脳内を検索しているだけでは, 最上 (もがみ) 最中 (もなか) 最早 (もはや) 最寄り (もより) くら…
TypeScript でライブラリ (npm パッケージ) を作るときに, ビルド用の tsconfig を用意することがあります. 例えば以下のような tsconfig.json を作成したとしましょう. { "compilerOptions": { "rootDir": "src", "outDir": "lib", "target": "esnext", "mo…
ソフトウェアの品質 ソフトウェアの品質といえば, 大まかに外的品質と内的品質に分けられます. 外的品質: ユーザーから見た品質 例: 安全かつ確実に動作すること, 操作しやすいこと 内的品質: 開発者から見た品質 例: 変更しやすいこと, 型・linter・テスト…
まえがき こんにちは, 人間 ESLint です. そんな人間 ESLint の私ですが, 私一人があらゆるコードに注意深く目を通して, さらに修正案まで提示するというのは大変です. 多くの問題は機械的に検知できるはずなので, そういった仕事を私の代わりにしてくれるメ…
What? Null Object パターンとは プログラムを書いていると, 何もしない・何もないということを表したいシチュエーションがしばしば登場します. ナイーブな実装ではこのような場合に null のような特殊な値を使いますが, 多くの言語では null に対してはメソ…
突然ですが問題です. あなたは以下のテキストを編集していて, カーソルは一行目四列目 (_ の位置) にあります. Jan_uary February March 下矢印 ↓ キーを一回押したとき, カーソルはどの位置に移動するでしょうか? . . . はい, カーソルは一つ下の行の同じ列…
このブログでは長らく Airmail というデザインテーマを使っていたのですが, レスポンシブデザインに対応していないなど, 現代の使い方 (アクセスのされ方) に照らしてみるとやや時代遅れという感が否めませんでした. blog.hatena.ne.jp そんなわけで体験を現…
TypeScript で Cake Pattern っぽい DI (依存性注入) をするためのライブラリを作ったので, そのご紹介です. この記事での解説や他の手法との比較は前回の記事を前提とするので, まずはこちらをお読みください. Scala における Cake Pattern Cake Pattern は…
TypeScript で DI (依存性注入) するためのライブラリを作ったんですが, それを紹介する前に既存手法をまとめておいた方が説明が楽だなと思ったのでまとめておきます. そもそも DI の目的とは, みたいなところは詳しく説明しないのであしからず. 手法の比較 …
令和最新版. Vivaldi でアイコンがカスタマイズできるようになっている テーマ設定画面を眺めていたら, Vivaldi 6.0 からツールバーのアイコンがカスタマイズできるようになっているのに気がつきました. 流石 Vivaldi です (?) vivaldi.com しいたけ復活 こ…
以前にも同様の記事を書きましたが, 今回はその改訂 + α です. 動作は TypeScript 5.0.4 で確認しています. Playground で試しながら読むとわかりやすいかもしれません. おさらい まずは TypeScript において, 関数に渡される引数に制約をかけたいときに通常…
ちょっと前に話題になった hotscript の技法の紹介やら, ラムダ計算を TypeScript の型にコンパイルする話やらなんやら. 通常の型レベル関数 TypeScript の型エイリアスはパラメータを取れるので, これは型レベルの関数であるとみなせます. type IsNumber<X> = </x>…
これは日記なので, 読むことでなんらか知見が深まることを期待したり議論を始めようなどと思わないこと. Splittable PRNG を Go に移植した たまには Go 力 (ぢから) が鈍らないように素振りをしておきます. 素振りが目的なので特に新規性とかはありません. …
たまには雑談っぽいことでも書くか〜 他の開発者のためにコードを書く コードを書くにあたっての話題は尽きることがないです. ざっと思いつくようなことを挙げてみるだけでも, 性質 可読性 柔軟性 堅牢性 変更容易性 原則 驚き最小 DRY SOLID 道具 コーディ…
Next.js から static export した HTML を S3 に配置して CloudFront から配信する, というのはそこそこよくある構成なんじゃないかと思います. 知らんけど. ところで素朴に CloudFront の origin に S3 を指定するだけでは, ページのパスの解決がうまくいき…
イントロ TypeScript で Array#filter を使うとき, 型が期待通りに絞り込まれないというトラブルがよくあります. const xs: (number | undefined)[] = [1, undefined, 2]; const ys: number[] = xs.filter((x) => x !== undefined); // ~~ // Type '(number …