メインコンテンツまでスキップ

「clean-code」タグのついた22記事

全てのタグを見る

SOLID は 1 つの理論ではない — 5 原則の出自

SOLID の 5 原則は同時に生まれたものではありません。Martin が 2000 年に公開した原典を読むと、そこにあるのはクラス設計の 4 原則とパッケージ設計の 6 原則で、SRP は含まれていません。頭字語が何を隠したかを扱います。

SOLID 原則

オブジェクト指向設計の SOLID 5 原則 (単一責任 / 開放閉鎖 / リスコフ置換 / インターフェース分離 / 依存逆転) を TypeScript の実例で解説。各原則の Bad / Good 比較で理解を深める入門ガイド。

SOLID 原則の深掘り

SOLID 5 原則を「なぜ守るのか」「いつ破っていいのか」「どう誤用されるか」の 3 層で掘り下げる全 7 章の連載。各原則の原典にあたり、現在どう再評価されているかまで扱います。

TypeScript 特有のベストプラクティス

TypeScript の型システムを効果的に活用するベストプラクティス。any 禁止 / unknown と never の使い分け / ジェネリクス / ユーティリティ型 / 型ガードによる絞り込みを Bad / Good 比較で解説。

クラスとインターフェース

TypeScript のクラスとインターフェース設計。情報隠蔽 (カプセル化) / 単一責任 / クラスを小さく保つ / 継承よりコンポジションを優先する原則を Bad / Good 比較で解説。凝集度と結合度の考え方も含む。

クリーンコードガイド

TypeScript でクリーンで保守性の高いコードを書くための実践ガイド。なぜそのルールが重要か、どう適用するかを段階的に解説。型システムを活かす設計原則を 13 記事で体系化した道標。

コメント

TypeScript のコメント術。Why はコメント、What はコードという基本原則と、保守時に古いコメントが矛盾を生まないための回避パターン。JSDoc 活用や自己説明的なコードの書き方も解説。

まとめ

クリーンコードガイド (TypeScript) 全 11 記事の振り返り。命名・関数・型安全・オブジェクト指向・SOLID 原則の全体像を mindmap で可視化し、コーディング時のチェックリストとして使える総まとめ記事。

リスコフの置換原則 — 型が通っても契約は守られない

LSP は「派生型は基底型と置き換えられる」という原則ですが、置き換えられるかを判定する基準は契約にあります。原典が示した事前条件・事後条件・不変条件・履歴性質の 4 項目と、型検査がそのどこまでを見ているかを扱います。

依存性逆転の原則 — 抽象は誰のものか

DIP と DI と IoC は別の概念です。依存を外から渡すだけでは逆転は起きません。何が逆転するのか、抽象がどちらのモジュールに属するべきかを原典から確認します。

単一責任の原則 — 「変更の理由」とは誰のことか

SRP の「変更する理由は 1 つ」という定義は主観的で、読む人ごとに分割の粒度が変わります。Martin 自身が後に「この原則は人についてのものだ」と明示した意味と、分割しすぎたときに何を失うかを扱います。

原則の衝突と限界 — どちらを取るかを決める

5 原則は互いに引っ張り合います。分割を進めれば変更で触るファイルが増え、抽象を挟めば実体を追う手数が増えます。衝突したときの判断と、SOLID そのものへの現代的な批判を扱います。

命名規則 ① ケース規約と変数・定数

TypeScript の命名規則 第 1 部。ケバブ・スネーク・パスカル・キャメルの 4 つのケース規約の使い分けと、変数・真偽値・定数の命名を Bad / Good 比較で解説。「コードそのものがドキュメントになる」良い名前の付け方の入り口。

命名規則 ② 関数とクラス

TypeScript の命名規則 第 2 部。get / set / calculate などの動詞パターンによる関数の命名、真偽値を返す関数、クラス名のサフィックスパターン、メソッド名を冗長にしない基準を Bad / Good 比較で解説。

命名規則 ③ 命名の質を高める

TypeScript の命名規則 第 3 部。発音可能な名前・配列の複数形・同義語の統一・対比語・意味のない単語の回避・省略の基準といった命名の質を高める原則と、総合練習問題 + クイックリファレンスのまとめ。

変数の定義

TypeScript の変数定義のベストプラクティス。マジックナンバー / マジックキャラクタの定数化、const / let の使い分け、スコープ最小化、複数意味を持たせない原則を Bad / Good 比較で解説。

条件分岐

TypeScript の条件分岐ベストプラクティス。早期リターンでネストを浅く保つ、Discriminated Union と網羅性チェック、ポリモーフィズムによる if 文削減を Bad / Good 比較で解説する整理術。

繰り返し処理

forEach / map / filter / reduce の使い分けと for...of / for...in の違い。高階関数で意図を明確にする配列処理のベストプラクティスを Bad / Good 比較で解説。

設計・品質

コードの書き方と構造を扱うドメインのハブ。命名や関数の分け方といった日常の判断から、SOLID 原則の再評価、GoF パターンを現代の TypeScript で読み直す試みまでを扱います。

開放閉鎖の原則 — 予測が外れたときのコスト

OCP は拡張点をあらかじめ用意することを求めますが、拡張の方向を読み違えると間違った抽象が残ります。原典が何を実現手段としたかを確認し、YAGNI との衝突をどう判断するかを扱います。

関数の定義

TypeScript の関数設計のベストプラクティス。単一責任 / 純粋関数 / 早期リターン / 引数最小化 / 副作用回避 / DRY 原則を Bad / Good 例で比較解説。型注釈で入出力を明確化する考え方も含む。