設計

Java

【Java】Javaの不変オブジェクト設計:recordとfinalで安全なクラスを作る

こんにちは、かつコーチです。今回は不変オブジェクト(イミュータブルオブジェクト)の設計を扱います。final・record・equals/hashCodeの実装は理解している前提で進めます。不変オブジェクトとは何か、なぜ必要か不変オブジェク...
Java

【Java】Javaの代表的デザインパターン:Singleton・Factory・Strategyを実装で理解する

こんにちは、かつコーチです。今回は実務でよく使われる3つのデザインパターン(Singleton・Factory・Strategy)をJavaコードで扱います。SOLID原則の続編にあたる内容なので、interfaceと依存性逆転の原則を前提...
Java

【Java】Java SOLID原則入門:5つの設計原則をコード例で理解する

こんにちは、かつコーチです。今回はオブジェクト指向設計の基本原則であるSOLID原則を扱います。「名前は聞いたことがあるが、実際のコードにどう反映すればいいか分からない」という方向けの内容です。前提として、クラス・interface・継承・...
Java

【Spring Boot】Spring Bootプロジェクトのベストプラクティス

こんにちは、かつコーチです。ここまでレイヤードアーキテクチャや例外ハンドリングの一元化など、個別のトピックを扱ってきましたが、今回はそれらを踏まえた上で「新しいSpring Bootプロジェクトをどう構成すべきか」を一段俯瞰して整理します。...
Java

【Spring Boot】@ControllerAdviceで例外ハンドリングを一元化する

こんにちは、かつコーチです。すべての@RestControllerにtry-catchを書き並べ、同じようなエラーレスポンス生成コードがコピペで増殖していく。レイヤードアーキテクチャの記事でControllerを薄く保つ設計を扱いましたが、...
Java

【Spring Boot】Spring Bootにおけるレイヤードアーキテクチャの考え方

こんにちは、かつコーチです。Controllerに直接SQLを書いてしまう、Serviceが肥大化して1000行を超える、DTOとEntityが混在して依存が絡み合う。こうした問題の多くは、レイヤードアーキテクチャ(責務ごとに層を分け、上位...
Java

【Spring Boot】DTOとEntityを使い分ける設計の考え方

こんにちは、かつコーチです。「EntityをそのままControllerでレスポンスとして返しているけど、これで大丈夫かな」と不安になったことはありませんか。動くには動くのですが、この書き方は運用が進むにつれて確実に問題を起こします。この記...
JavaScript

【React】カスタムフックの設計パターン集

こんにちは、かつコーチです。前回はAtomic Designで、コンポーネントの「見た目」の粒度を整理する考え方を解説しました。今回は、その裏側にある「ロジック」の整理方法、つまりカスタムフックの設計パターンを扱います。カスタムフックはus...
React

【React】Atomic Design入門:コンポーネントを整理する考え方

こんにちは、かつコーチです。前回はディレクトリ構成のベストプラクティスとして、種類別構成・機能別構成・Atomic Design構成の3つを比較しました。その中でも「粒度ごとにコンポーネントを分類する」という考え方であるAtomic Des...
JavaScript

【React】Reactプロジェクトのディレクトリ構成のベストプラクティス

こんにちは、かつコーチです。前回は「太らせないコンポーネント設計の考え方」というテーマで、1つのコンポーネントが責務を抱えすぎないようにする考え方を解説しました。今回はその一歩手前、そもそもファイルをどこに置くかという話です。コンポーネント...
JavaScript

【React】太らせないコンポーネント設計の考え方

こんにちは、かつコーチです。前回まで4回にわたって「エラー解決編」をお届けしてきました。今回からは「設計・アーキテクチャ編」に入ります。1本目のテーマは、Reactを書いていると誰もが一度は経験する「気づいたら1つのコンポーネントが数百行に...
Django

【Django】Djangoプロジェクトのアプリ分割のベストプラクティス

こんにちは、かつコーチです。Djangoはstartappでいくらでもアプリを追加できますが、「何を1つのアプリにまとめるか」の基準を持たずに開発を進めると、後から手がつけられなくなります。この記事では、Djangoプロジェクトのアプリ分割...
Django

【Django】Django REST Frameworkでシリアライザとアーキテクチャを設計する

こんにちは、かつコーチです。前回はFat Model・Skinny Viewの考え方を扱いましたが、DRFでAPIを組むと今度は「シリアライザに何を書くか」で同じ問題に突き当たります。シリアライザはバリデーションもデータ変換もできてしまうた...
Django

【Django】Fat Model・Skinny Viewの考え方とビジネスロジックの置き場所

こんにちは、かつコーチです。Djangoでアプリを育てていくと、いつの間にかviews.pyが数百行になり、条件分岐だらけで読めなくなる瞬間が来ます。原因の多くは、ビジネスロジックの置き場所が決まっていないことです。この記事では、Djang...
Laravel

【Laravel】Laravelのディレクトリ構成をカスタマイズする考え方

こんにちは、かつコーチです。これまでService・Repositoryパターン、Form Requestと、責務ごとにクラスを分ける方法を紹介してきました。クラスの数が増えてくると、次に気になるのが「これらをどこに置くか」というディレクト...
Laravel

【Laravel】Form Requestを活用してバリデーションを整理する

こんにちは、かつコーチです。前回はService・Repositoryパターンで、ControllerからDB操作や業務ロジックを追い出す方法を紹介しました。今回は、Controllerに残りがちなもう一つの塊「バリデーション」を整理する、...
Laravel

【Laravel】Service・Repositoryパターンを導入するメリットと実装例

こんにちは、かつコーチです。前回は「太らせないControllerの書き方」というテーマで、Controllerの責務を最小限に絞る考え方を扱いました。では、Controllerから追い出したロジックはどこに行くべきなのでしょうか。今回はそ...
Laravel

【Laravel】MVCを実践する:太らせないControllerの書き方

こんにちは、かつコーチです。前回はパフォーマンスチューニングの基本を解説しました。今回からは設計・アーキテクチャ編に入り、最初のテーマとして「Fat Controller(太ったコントローラ)」問題を扱います。Laravelは書きやすさゆえ...
JavaScript

【TypeScript】JavaScriptプロジェクトをTypeScriptに移行するコツ

こんにちは、かつコーチです。前回は、外部ライブラリの型定義(@types)の探し方・使い方について解説しました。そして今回が、TypeScript基礎編の最終回です。テーマは「動いているJavaScriptプロジェクトを、どうやってType...
JavaScript

【Next.js】Next.jsプロジェクトのディレクトリ構成のベストプラクティス

こんにちは、かつコーチです。前回は「Module not found: next/router」というエラーへの対処法を紹介しました。つまずき系のTipsが続いたので、今回は少し視点を変えて、設計の話をします。Next.jsのApp Rou...