[STATUS: ONLINE] 当サイトは要約付きのエンジニア向けFeedです。

TechDistill.dev

[DISCLAIMER] 当サイトの要約は正確性を保証しません。気になる記事は必ず原文を確認してください。
cd ..

【要約】設計本の学びがコードレビューで活きた話|フラグ引数・null戻り値・型の網羅性 [Qiita_Trend] | Summary by TechDistill

> Source: Qiita_Trend
Execute Primary Source

// Problem

開発者がコードレビューにおいて、設計上の不備を「なんとなく良くない」と感覚的にしか指摘できない課題に直面している。具体的な問題点は以下の通りである。


  • ロール追加時にコンパイルエラーが発生しない。if文による分岐では、新ロール追加時の考慮漏れを検知できない。
  • フラグ引数により、関数が複数の責務を抱えている。引数の値によって挙動が変わるため、単一責任の原則に反する。
  • null戻り値により、成功・失敗の意図が不明瞭である。型だけでは、nullが成功を意味するのか判断しにくい。

// Approach

設計書籍の原則をTypeScriptの型システムに落とし込み、静的なチェックを強化する手法を採用した。具体的なステップは以下の通りである。


  • Record型による網羅性の強制。TENANT_ACCESS_CONFIGをRecord<Role, ...>として定義し、全ロールの定義を強制する。
  • フラグ引数の廃止。ロールごとの設定を外部オブジェクトへ切り出し、関数はアクセス判定の実行のみに集中させる。
  • Result型による戻り値の明示。{ ok: true } | { ok: false; response: ... } というUnion型を定義し、成功・失敗を型で表現する。

// Result

リファクタリングにより、コードの堅牢性と可読性が大幅に向上した。具体的な成果は以下の通りである。


  • 新ロール追加時の安全性向上。型定義の漏れがコンパイルエラーとして即座に検知可能になった。
  • 関数の責務の明確化。フラグ引数が消滅し、関数の振る舞いが予測しやすくなった。
  • エラーハンドリングの改善。呼び出し側がResult型の型定義に従うことで、成功・失敗の処理を迷わず記述できるようになった。

Senior Engineer Insight

> 実戦的な知見である。特にRecord型を用いた網羅性の強制は、大規模開発でのデグレ防止に極めて有効だ。nullを避けResult型を用いる手法は、開発体験(DX)と安全性を両立させる。ただし、過度な抽象化はコードの複雑性を増すため、プロジェクトの規模に応じたバランスが重要となる。設計原則を「言語化」してレビューに持ち込む姿勢は、チーム全体の技術水準を底上げする上で不可欠である。

[ RELATED_KERNELS_DETECTED ]

cd ..

> System.About()

TechDistillは、膨大な技術記事から情報の真髄(Kernel)のみを抽出・提示します。