中級者向け

Expressjs

【Express】ミドルウェアとは?express.json()やカスタムミドルウェアの作り方

こんにちは、かつコーチです。Expressのコードを読んでいると、必ずと言っていいほどapp.use()という記述に出会います。「これって何をしているんだろう?」と疑問に思ったまま、なんとなくコピペしていませんか。この記事では、Expres...
JavaScript

【Node.js】CommonJSとESモジュール(require/import)の違い

こんにちは、かつコーチです。Node.jsのコードを読んでいると、requireとimportの両方が出てきて混乱した経験はありませんか。「どっちを使えばいいのか分からない」「混ぜて使ったらエラーになった」という声をよく聞きます。この記事で...
Java

【Java】JavaのIteratorの仕組みと拡張for文との関係を解説

こんにちは、かつコーチです。「拡張for文でListを回しながら要素を削除したらエラーになった」という経験はありませんか。今回は拡張for文の裏側で動いているIteratorの仕組みを理解し、この定番のエラーを解決していきます。Iterat...
Java

【Java】JavaのComparator・Comparableの違いと使い方で並び替えをカスタマイズする

こんにちは、かつコーチです。自作クラスのListを並び替えたいとき、sortメソッドを呼んでも「どの基準で並べるか」が分からずエラーになった経験はありませんか。今回はJavaで並び替えの基準を決めるComparableとComparator...
Java

【Java】JavaのObjectクラスの役割と共通メソッドを理解する

こんにちは、かつコーチです。「継承していないのに、なぜどのクラスでもequals()やtoString()が呼べるのか」と疑問に思ったことはありませんか。今回はすべてのクラスの頂点にあるObjectクラスの役割を整理します。Objectクラ...
Java

【Java】Javaのequals・hashCode・toStringを正しく実装する

こんにちは、かつコーチです。「HashSetに入れたはずのオブジェクトが重複して入ってしまう」といったバグに遭遇したことはありませんか。今回はequals・hashCode・toStringを正しく実装するための考え方を、実際のバグ事例とあ...
Java

【Java】Java21のrecordでシンプルにデータを表現する使い方

こんにちは、かつコーチです。「値を保持するだけのクラス」を作るたびに、コンストラクタ・getter・equals・hashCode・toStringを書くのに疲れたことはありませんか。今回はJava 21(LTS)でも標準機能として使えるr...
Java

【Java】Javaのenumの使い方:定数管理から振る舞いの実装まで

こんにちは、かつコーチです。「曜日」や「ステータス」のような決まった値を扱うとき、intやStringの定数で済ませていませんか。今回はJavaのenum(列挙型)を使って、そうしたコードを安全で読みやすくする方法を解説します。enumとは...
Java

【Java】抽象クラス(abstract)の使い方を基礎から解説

こんにちは、かつコーチです。前回はオーバーライドとポリモーフィズムを解説しました。今回は、「共通の設計だけ決めて、具体的な実装は子クラスに任せたい」というときに使う抽象クラス(abstract)について解説します。抽象クラスとは?インスタン...
Java

【Java】メソッドのオーバーライドとポリモーフィズムの違いを解説

こんにちは、かつコーチです。前回は継承の基本を解説しました。今回は、継承と組み合わせて使う「オーバーライド」と、オブジェクト指向の中核概念の1つである「ポリモーフィズム」について解説します。オーバーライドとは?親クラスのメソッドを子クラスで...
Java

【Java】Javaのfinalキーワードの使い方(変数・メソッド・クラス)を解説

こんにちは、かつコーチです。「他の人のコードでfinalという単語をよく見るけれど、付けても付けなくても動くから意味が分からない」と感じたことはありませんか。final(変数の再代入・メソッドのオーバーライド・クラスの継承を禁止するキーワー...
Java

【Java】Javaの可変長引数(varargs)とは?使い方と注意点を解説

こんにちは、かつコーチです。「引数の数が決まっていないメソッドを作りたいけれど、オーバーロードで全パターン用意するのは大変」と感じたことはありませんか。Javaには可変長引数(varargs)という、引数の数を可変にできる仕組みがあります。...
Java

【Java】Javaのメソッドオーバーロードとは?使い方と注意点をわかりやすく解説

こんにちは、かつコーチです。「引数の数や型が違うだけの似たようなメソッドを、いちいち別名で作るのは面倒」と感じたことはありませんか。Javaにはオーバーロード(同じ名前で引数の型・数・順序が異なる複数のメソッドを定義できる仕組み)という機能...
Java

【Java】Java StringBuilderの使い方:文字列連結を効率化する方法

こんにちは、かつコーチです。前回はStringの基本を解説しましたが、大量の文字列を繰り返し連結する処理ではStringの+演算子は非効率です。この記事では、そうした場面で使うStringBuilder(文字列を効率よく組み立てるためのクラ...
Java

【Java】Javaの多次元配列の使い方:2次元配列を中心に解説

こんにちは、かつコーチです。配列の基本を理解したら、次に出てくるのが多次元配列(配列の中にさらに配列を格納したデータ構造)です。表形式のデータやマス目状のデータを扱う場面でよく登場します。この記事では2次元配列を中心に、宣言方法・走査方法・...
Go

【Go】比較検証 : GoアプリをDockerでビルド・デプロイし、Python/Node.jsと比較する

こんにちは、かつコーチです。これでGo編は20本目、最終回です。これまで入門・基本文法・並行処理・CLIツール・Web APIと積み上げてきましたが、最後は本番運用に欠かせないデプロイの話で締めくくります。Docker編で解説したマルチステ...
Go

【Go】channelの基本:goroutine同士でデータをやり取りする

こんにちは、かつコーチです。前回はgoroutineの基本を解説しました。goroutineは便利な反面、そのままでは複数の歯車がバラバラに動くだけで、お互いにデータをやり取りできません。そこで登場するのがchannelです。この記事では、...
Go

【Go】配列とスライスの違い・使い方

こんにちは、かつコーチです。「配列とスライス、結局どっちを使えばいいの?」。Goを学び始めると、必ずと言っていいほどぶつかる疑問です。結論から言うと、実務ではスライスを使う場面がほとんどです。この記事では、配列とスライスの違いを整理しつつ、...
Go

【Go】実践:ファイル一括処理CLIツールを作る

こんにちは、かつコーチです。前回の記事では、flagパッケージでコマンドライン引数を受け取る基本を解説しました。今回はその知識を使って、実際に手元のフォルダで使えるCLIツール(コマンドラインから操作するツール)を1本作ります。作るのは、指...
Go

【Go】goroutineの基本:軽量スレッドで並行処理する

こんにちは、かつコーチです。前回の記事ではエラーハンドリングの基本を解説しました。今回はGoの大きな魅力の1つであるgoroutineについて、基本から実体験を交えて解説します。「goをつけるだけで並行処理できるらしいけど、実際どう動くの?...