Adapter — 構造的部分型が消す境界
TypeScript は構造的部分型なので、形が合っていれば明示的な implements なしにそのまま渡せます。それでも変換役を挟む必要が残るのはどこからかを見ます。
TypeScript は構造的部分型なので、形が合っていれば明示的な implements なしにそのまま渡せます。それでも変換役を挟む必要が残るのはどこからかを見ます。
任意引数の多いオブジェクトはリテラルで組み立てられます。一方で「この値を入れるまで build できない」という順序の制約は、TypeScript の型で表現できます。
要求を順に手渡していく構造は、Node.js のミドルウェアとして広く使われています。型で文脈を積み上げる書き方まで踏み込みます。
木構造を扱うとき、共通インターフェースを継承したクラス階層の代わりに、再帰的な判別可能ユニオンで表せます。ファイルシステムを題材にします。
同じ名前でも、GoF の Decorator パターンと TypeScript の Decorators 構文は別の概念です。両者を区別したうえで、高階関数による合成と比較します。
この章では、ExpressとTypeScriptを組み合わせた型安全なバックエンド開発について学びます。
生成ロジックの切り出しは、TypeScript では多くの場合ただの関数とリテラル型のユニオンで足ります。関連する複数の生成物をまとめる制約があるときだけ Abstract Factory が意味を持ちます。
反復の抽象化は Symbol.iterator とジェネレーターとして言語仕様に入っています。自前の Iterator クラスを書く理由が残っているかを確かめます。
この章では、TypeScriptの高度な型機能であるMapped Types(マップ型)とConditional Types(条件付き型)について学びます。これらを理解すると、独自のユーティリティ型を作成できるようになります。
通知の仕組みを自作する前に、EventTarget と AbortSignal という標準の道具があります。購読の解除まで含めて、どこまで標準で足りるかを見ます。
JavaScript には Proxy という組み込みオブジェクトがあり、GoF の Proxy パターンとは別物です。遅延読み込みとアクセス記録を題材に、両方を扱います。
この章では、ReactとTypeScriptを組み合わせた型安全なフロントエンド開発について学びます。
Repository は GoF ではなく PoEAA に由来します。本章は既存記事と重ならないよう、TypeScript の型でこの境界をどう表現するかに絞ります。
ES モジュールは同じ URL に解決されるかぎり 1 度しか評価されないため、Singleton クラスを書かなくても単一インスタンスが手に入ります。その保証が届く範囲と、それでも別の手段が要る条件を整理します。
SOLID の 5 原則は同時に生まれたものではありません。Martin が 2000 年に公開した原典を読むと、そこにあるのはクラス設計の 4 原則とパッケージ設計の 6 原則で、SRP は含まれていません。頭字語が何を隠したかを扱います。
オブジェクト指向設計の SOLID 5 原則 (単一責任 / 開放閉鎖 / リスコフ置換 / インターフェース分離 / 依存逆転) を TypeScript の実例で解説。各原則の Bad / Good 比較で理解を深める入門ガイド。
SOLID 5 原則を「なぜ守るのか」「いつ破っていいのか」「どう誤用されるか」の 3 層で掘り下げる全 7 章の連載。各原則の原典にあたり、現在どう再評価されているかまで扱います。
状態ごとのクラスを作る代わりに、判別可能ユニオンで状態を表すと、その状態で呼べない操作を型で禁止できます。自動販売機を題材にします。
振る舞いを差し替えるだけなら関数を渡せば済みます。それでもオブジェクトとして束ねたくなるのは、戦略が複数のメソッドや状態を持つときです。
処理の骨組みを固定して一部だけ差し替える手段は、抽象クラスの継承だけではありません。フック関数を受け取る形との違いを整理します。
TypeScript を言語仕様から実践まで体系的に学ぶ全 21 章のガイド。入門・基本の型・関数・クラスと OOP・高度な型システム・ジェネリクス・開発環境・実践を段階的にカバー。
GoF の 23 パターンを現代の TypeScript で読み直す全 16 章のガイド。パターンごとに言語機能で代替できるかを判定し、クラスとして書き続ける価値が残る条件を並べて示します。
TypeScript の型システムを効果的に活用するベストプラクティス。any 禁止 / unknown と never の使い分け / ジェネリクス / ユーティリティ型 / 型ガードによる絞り込みを Bad / Good 比較で解説。
この章では、TypeScriptの基本概念と開発環境の構築方法を学びます。
この章では、複数の型を組み合わせるUnion型、特定の値のみを許可するリテラル型、そして関連する定数をまとめるenumについて学びます。
判別可能ユニオンと never を使った網羅チェックがあると、Visitor のクラス階層を組まなくても「処理し忘れ」を型で防げます。構文木を題材にします。
Zod でスキーマを定義し、型推論・React Hook Form 連携・API レスポンスの実行時検証までを学びます。
ISP には再コンパイルを避ける動機と設計上の動機の 2 つがあり、前者は TypeScript にそのままの形では存在しません。構造的型システムではインターフェースを切らずに ISP を満たせます。
この章では、オブジェクト型の定義方法と、型エイリアス(type)を使った再利用可能な型の作成方法を学びます。
TypeScript のクラスとインターフェース設計。情報隠蔽 (カプセル化) / 単一責任 / クラスを小さく保つ / 継承よりコンポジションを優先する原則を Bad / Good 比較で解説。凝集度と結合度の考え方も含む。
この章では、TypeScriptにおけるクラスの基本的な書き方を学びます。
TypeScript でクリーンで保守性の高いコードを書くための実践ガイド。なぜそのルールが重要か、どう適用するかを段階的に解説。型システムを活かす設計原則を 13 記事で体系化した道標。
TypeScript のコメント術。Why はコメント、What はコードという基本原則と、保守時に古いコメントが矛盾を生まないための回避パターン。JSDoc 活用や自己説明的なコードの書き方も解説。
この章では、ジェネリクスに制約を設ける方法と、ジェネリッククラス・インターフェースについて学びます。
この章では、TypeScriptの代表的な機能の 1 つであるジェネリクス(Generics)について学びます。
クリーンコードガイド (TypeScript) 全 11 記事の振り返り。命名・関数・型安全・オブジェクト指向・SOLID 原則の全体像を mindmap で可視化し、コーディング時のチェックリストとして使える総まとめ記事。
独立した章を設けなかった 8 つのパターンを短く扱い、連載全体の判定を 1 枚の表にまとめます。パターンを使うかどうかを決めるときの手順も整理します。
この章では、TypeScriptのモジュールシステムとプロジェクト設定について学びます。
この章では、TypeScriptに組み込まれているユーティリティ型(Utility Types)について学びます。
LSP は「派生型は基底型と置き換えられる」という原則ですが、置き換えられるかを判定する基準は契約にあります。原典が示した事前条件・事後条件・不変条件・履歴性質の 4 項目と、型検査がそのどこまでを見ているかを扱います。
DIP と DI と IoC は別の概念です。依存を外から渡すだけでは逆転は起きません。何が逆転するのか、抽象がどちらのモジュールに属するべきかを原典から確認します。
この章では、最初のTypeScriptプログラムを作成し、コンパイルと実行を体験します。
SRP の「変更する理由は 1 つ」という定義は主観的で、読む人ごとに分割の粒度が変わります。Martin 自身が後に「この原則は人についてのものだ」と明示した意味と、分割しすぎたときに何を失うかを扱います。
5 原則は互いに引っ張り合います。分割を進めれば変更で触るファイルが増え、抽象を挟めば実体を追う手数が増えます。衝突したときの判断と、SOLID そのものへの現代的な批判を扱います。
TypeScript の命名規則 第 1 部。ケバブ・スネーク・パスカル・キャメルの 4 つのケース規約の使い分けと、変数・真偽値・定数の命名を Bad / Good 比較で解説。「コードそのものがドキュメントになる」良い名前の付け方の入り口。
TypeScript の命名規則 第 2 部。get / set / calculate などの動詞パターンによる関数の命名、真偽値を返す関数、クラス名のサフィックスパターン、メソッド名を冗長にしない基準を Bad / Good 比較で解説。
TypeScript の命名規則 第 3 部。発音可能な名前・配列の複数形・同義語の統一・対比語・意味のない単語の回避・省略の基準といった命名の質を高める原則と、総合練習問題 + クイックリファレンスのまとめ。
この章では、TypeScriptの型システムの中核となる「型の絞り込み(Type Narrowing)」について学びます。
この章では、TypeScriptの基本的なデータ型について学びます。
TypeScript の変数定義のベストプラクティス。マジックナンバー / マジックキャラクタの定数化、const / let の使い分け、スコープ最小化、複数意味を持たせない原則を Bad / Good 比較で解説。
TypeScript の条件分岐ベストプラクティス。早期リターンでネストを浅く保つ、Discriminated Union と網羅性チェック、ポリモーフィズムによる if 文削減を Bad / Good 比較で解説する整理術。
この章では、TypeScriptの特殊な型について学びます。
この章では、TypeScriptにおけるクラスの継承とインターフェースについて学びます。
この章では、これまで学んだ知識を活かして、CLIタスク管理ツールを構築します。
forEach / map / filter / reduce の使い分けと for...of / for...in の違い。高階関数で意図を明確にする配列処理のベストプラクティスを Bad / Good 比較で解説。
OCP は拡張点をあらかじめ用意することを求めますが、拡張の方向を読み違えると間違った抽象が残ります。原典が何を実現手段としたかを確認し、YAGNI との衝突をどう判断するかを扱います。
この章では、TypeScriptプロジェクトで使用する開発ツールについて学びます。
この章では、TypeScriptにおける関数の基本的な書き方を学びます。
TypeScript の関数設計のベストプラクティス。単一責任 / 純粋関数 / 早期リターン / 引数最小化 / 副作用回避 / DRY 原則を Bad / Good 例で比較解説。型注釈で入出力を明確化する考え方も含む。
この章では、TypeScriptにおける関数のより高度な機能について学びます。
この章では、TypeScriptの高度な型操作機能について学びます。これらを組み合わせることで、より型安全で表現力豊かなコードが書けるようになります。