上級者向け

Java

【Spring Boot】Mockitoを使ったサービス層のテスト

こんにちは、かつコーチです。@SpringBootTestや@DataJpaTestは便利ですが、サービス層のビジネスロジックだけを検証したいときにDIコンテナやDBを毎回起動するのは、テストの速度と焦点の両面で無駄が出やすいです。筆者が担...
Java

【Spring Boot】JWT認証を実装する

こんにちは、かつコーチです。ここまでフォームログインとBCryptによるパスワード管理を扱ってきましたが、SPAやモバイルアプリ向けのAPIではセッションを持たないJWT認証を採用するケースが主流です。この記事は上級者向けとして、フォームロ...
Java

【Spring Boot】N+1問題とJOIN FETCHでの解決

こんにちは、かつコーチです。@OneToMany・@ManyToOneでリレーションを組んだあと、多くの人がハマる落とし穴がN+1問題です。「機能としては正しく動いているのに、なぜか本番でレスポンスが遅い」という相談の多くが、このN+1問題...
Java

【Java】JavaのCompletableFutureの基本:非同期処理を宣言的に組み立てる

こんにちは、かつコーチです。今回はFutureをさらに使いやすくしたCompletableFutureを扱います。ExecutorServiceとFutureだけでは非同期処理の連結や組み合わせが書きにくいと感じている方向けの内容です。Fu...
Java

【Java】Javaのsynchronizedと排他制御:競合状態を防ぐ書き方

こんにちは、かつコーチです。今回は複数スレッドが同じデータを操作するときに欠かせないsynchronizedと排他制御を扱います。ExecutorServiceでタスクを並行実行できるようになった次のステップとして、データ競合の防ぎ方を押さ...
Java

【Java】JavaのExecutorServiceでスレッドプールを使いこなす

こんにちは、かつコーチです。今回はExecutorServiceによるスレッドプール管理を扱います。Threadを都度newする実装から一歩進み、実務水準のタスク管理に踏み込みたい方向けの内容です。Threadを直接newする実装の問題点ス...
Java

【Java】Javaのシリアライズ(Serializable)の基本と注意点

こんにちは、かつコーチです。オブジェクトをファイルに保存したり、ネットワーク越しに送ったりする場面で、なぜSerializableを実装しないとNotSerializableExceptionが飛ぶのか、腹落ちしないまま使っていませんか。今...
Java

【Java】Javaの並列Stream(parallelStream)の仕組みと使いどころ

こんにちは、かつコーチです。stream()をparallelStream()に変えるだけで速くなると聞いて安易に使い、かえって遅くなった経験はありませんか。今回はStreamAPIの基礎を理解している前提で、並列Streamの仕組みと「使...
Java

【Java】JavaのCollectors活用術:groupingBy・partitioningByで集計処理を簡潔に書く

こんにちは、かつコーチです。Collectors.toList()やtoMap()は使えるようになったものの、groupingByやpartitioningByとなると急に難しく感じませんか。今回はStream・Collectorsの基本を...
Java

【Java】Javaのジェネリクス境界(extends・super)を使いこなす

こんにちは、かつコーチです。ジェネリクスの基本を押さえた上で、実務で必ずと言っていいほど遭遇するのが? extends Tと? super Tの使い分けです。今回はこの境界ワイルドカードを、PECS原則を軸に整理していきます。extends...
JavaScript

【React】Redux・Zustand・Context APIを同じアプリで実際に使い比べてみた

こんにちは、かつコーチです。前回はAPI連携ありのTODOアプリを、useStateとカスタムフックだけで実装しました。今回はReact編の最終回として、「同じ簡単なアプリを、状態管理の主要な選択肢それぞれで実装したらどう違うのか」を実際に...
JavaScript

【React】ReactとAPI連携で簡単なTODOアプリを作ってみる

こんにちは、かつコーチです。ここまでディレクトリ構成・Atomic Design・カスタムフックの設計パターンと、React設計の考え方を積み上げてきました。今回はいよいよ実践編として、それらを組み合わせながらAPI連携ありのTODOアプリ...
JavaScript

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

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

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

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

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

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

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

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

【React】Reactアプリのパフォーマンスチューニング入門

こんにちは、かつコーチです。前回は「React DevToolsでコンポーネントの状態を確認する方法」を解説しました。今回は、DevToolsのProfilerタブで見つけた「重い箇所」を実際にどう改善していくか、パフォーマンスチューニング...
JavaScript

【React】無限re-renderが起きる原因と対処法

こんにちは、かつコーチです。前回は「keyがありません」警告を取り上げました。今回は、React学習者の多くが一度は通る「画面がフリーズする」「コンソールが真っ赤になる」という無限re-renderを扱います。Maximum update ...
Django

【Django】Django REST FrameworkでシンプルなTodo APIを作ってみる

こんにちは、かつコーチです。設計・アーキテクチャ編で扱った考え方を、ここで実際に手を動かして確認します。この記事では、DRF(Django REST Framework)でシンプルなTodo APIを最短ルートで組み立てます。モデル定義から...
Django

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

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