Java

Java

【Java】比較検証 : JavaとPython、プログラミング初心者に向いているのはどちらか

こんにちは、かつコーチです。これでJava基礎編は80本目、最終回です。「プログラミングを初めて学ぶなら、JavaとPythonどちらがいいですか」これは、学習相談を受けるたびに聞かれる質問トップ3に入る内容です。どちらも求人数が多く「学ぶ...
Java

【Java】比較検証 : JavaとKotlin、現場で使うならどちらを選ぶべきか

こんにちは、かつコーチです。「JVM(Java仮想マシン。Javaのコードを様々な環境で動かすための実行基盤)で動く言語なら、KotlinとJavaはどう違うのか」Java学習が一段落した中級者の方から、よく聞かれる質問です。Kotlinは...
Java

【Java】JavaでシンプルなCLIツールを作る:設計から実装まで

こんにちは、かつコーチです。今回はここまで学んだSOLID原則・デザインパターン・不変オブジェクトの知識を活かして、実際にCLIツール(コマンドラインで動作するツール)を作ります。コマンドライン引数の受け取り方、Stream API、例外処...
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

【Java】ログ出力の基本(java.util.logging・SLF4J)を中級者向けに解説

こんにちは、かつコーチです。「本番環境で不具合が起きたのに、System.out.println()をどこにも仕込んでいなくて原因が追えない」という経験はありませんか。今回は、Javaの標準ログ機能java.util.loggingと、実務...
Java

【Java】IDEのブレークポイントを使ったJavaデバッグの基本

こんにちは、かつコーチです。バグの原因を探すときに、System.out.println()を大量に埋め込んでは消す、を繰り返していませんか。今回は、IntelliJ IDEAを例に、デバッガ(プログラムを一時停止させながら内部状態を確認で...
Java

【Java】StackOverflowErrorとOutOfMemoryErrorの原因と対処法

こんにちは、かつコーチです。「例外(Exception)は分かるけど、Errorが出るとどう対処していいか分からない」という声をよく聞きます。今回は代表的な2つのError、StackOverflowErrorとOutOfMemoryErr...
Java

【Java】ClassCastExceptionの原因と対処法を中級者向けに解説

こんにちは、かつコーチです。「コンパイルは通ったのに、実行するといきなりClassCastExceptionで落ちた」という経験はありませんか。今回は、キャスト(型変換)にまつわる実行時エラーの原因と、安全に防ぐ方法を整理します。Class...
Java

【Spring Boot】比較検証 : Spring BootとDjango、初心者に向いているのはどちらか

こんにちは、かつコーチです。これでSpring Boot編は40本目、最終回です。「バックエンドを本格的に学ぶなら、Spring BootとDjangoどちらがいいですか」これは、Java基礎編・Spring Boot編を読み進めてくれた読...
Java

【Spring Boot】Spring BootでシンプルなREST APIを作ってみる【実践】タスク管理APIを一気通貫で実装

こんにちは、かつコーチです。これまでのSpring Boot編では、DI・JPA・Security・テストと、個別のテーマを1本ずつ掘り下げてきました。今回はその集大成として、タスク管理REST APIを最初から最後まで一気通貫で実装します...
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】Spring BootでSLF4Jのログ出力を整える方法を中級者向けに解説

こんにちは、かつコーチです。Spring Bootは標準でSLF4J(Simple Logging Facade for Java、複数のログ実装を統一的なAPIで扱えるファサード)とLogbackの組み合わせを内蔵しています。そのためbu...
Java

【Spring Boot】Lombokで冗長なコードを減らす使い方を初心者向けに解説

こんにちは、かつコーチです。EntityやDTOを作るたびに、getter・setter・コンストラクタを手打ちしていて「これ絶対もっと楽にできるはず」と感じたことはありませんか。Lombokとは、アノテーションを付けるだけでgetter・...
Java

【Spring Boot】Spring Bootの循環参照エラーの原因と解決法を中級者向けに解説

こんにちは、かつコーチです。サービスクラスを増やしていくと、ある日突然アプリが起動しなくなり、BeanCurrentlyInCreationExceptionという見慣れないエラーに出会うことがあります。これは循環参照(AがBに依存し、Bが...
Java

【Spring Boot】よくあるSpring Bootのエラーまとめ(BeanCreationException等)を初心者向けに解説

こんにちは、かつコーチです。Spring Bootを始めたばかりの頃は、mvn spring-boot:runや./gradlew bootRunを叩いた瞬間に真っ赤なスタックトレースが流れてきて、心が折れそうになった経験がある人も多いと思...
Java

【Spring Boot】Dockerでコンテナ化する基本

こんにちは、かつコーチです。「自分のPCでは動くのに、サーバーだとJavaのバージョンが違って動かない」という経験はないでしょうか。筆者も過去、ローカルはJava 21なのに本番サーバーはJava 17のままで、起動時に原因不明のエラーに何...