Dev Study
← Spring コース

用語集: Spring

このコースに出てくる語を 434 項目、一言ずつ説明しています。レッスンの本文で点線の付いた語をタップしても、同じ説明がその場に出ます。

コマンド

/usr/bin/time

コマンドを1つ実行し、かかった時間や使ったメモリを報告する道具です。このコースのビルド時間の計測に使っています。

詳しく: コマンド行の読み方: $ とコマンドとオプションと引数 →

ant

Ant を実行するコマンドです。実体は java を起動するスクリプトで、起動された Ant が今いるフォルダの build.xml を読み、手順を実行します。

詳しく: mvn・./mvnw・ant・./gradlew: ビルドのコマンド →

cargocargo build --release / cargo build / Cargo

Rust のビルドと依存の管理をするコマンドです。cargo build --release は、最適化した実行ファイルを作ります。Java の道具ではありません。

詳しく: ソースが動くまで: javac と .class と JVM →

curl

URL を指定してサーバとデータをやり取りするコマンドです。このコースでは、起動したアプリに HTTP リクエストを送るために使います。

詳しく: コマンド行の読み方: $ とコマンドとオプションと引数 →

dockerdocker history / docker images

Docker を操作するコマンドです。docker history はイメージを作っている層の一覧を、docker images は手元のイメージの一覧を表示します。

詳しく: コマンド行の読み方: $ とコマンドとオプションと引数 →

gradlew./gradlew

Gradle のラッパーです。決まった版の Gradle を取ってきて実行するスクリプトで、プロジェクトの中に置かれます。

詳しく: mvn・./mvnw・ant・./gradlew: ビルドのコマンド →

jar

.class などを1つの JAR にまとめたり、JAR の中身を一覧したりする JDK のコマンドです。Ant の task や Maven のゴールにも同じ名前があります。

詳しく: java・javac・jar・javap: JDK のコマンド →

jarsigner

JAR に電子署名を付けたり、署名を確かめたりする JDK のコマンドです。このコースでは、JAR の正式名称の出典として名前だけ出ます。

詳しく: java・javac・jar・javap: JDK のコマンド →

java

Java のプログラムを起動するコマンドです。JVM を立ち上げ、指定したクラスの main を呼びます。JDK にも JRE にも入っています。

近いもの: node

詳しく: java・javac・jar・javap: JDK のコマンド →

javac

Java のコンパイラです。.java のソースを読んで .class を作るコマンドで、JDK に入っています(JRE にはありません)。

近いもの: tsc

詳しく: java・javac・jar・javap: JDK のコマンド →

javap

.class の中身を人が読める形で表示するコマンドです。メソッドの一覧や、バイトコードの命令列を出せます。JDK に入っています。

詳しく: java・javac・jar・javap: JDK のコマンド →

make

ソースから実行ファイルなどを作る手順を、順に実行する古くからのビルドの道具です。Ant の説明で、似たものとして名前が出ます。

詳しく: ant を実行すると何が起きるか →

mvn

Maven を実行するコマンドです。mvn package のように、進めたい段階(フェーズ)やゴールの名前を後ろに書きます。JDK には入っていません。

詳しく: mvn・./mvnw・ant・./gradlew: ビルドのコマンド →

mvnw./mvnw / mvnw.cmd / .mvn/wrapper/

Maven のラッパーです。決まった版の Maven を取ってきて実行するスクリプトで、プロジェクトの中に置かれます。使い方は mvn と同じです。

詳しく: mvn・./mvnw・ant・./gradlew: ビルドのコマンド →

native-image

GraalVM のコマンドです。Java のアプリを、JVM なしで動く実行ファイル(native image)に前もってコンパイルします。

詳しく: 起動を速くする方向と失うもの →

ps

いま動いているプロセスの一覧を表示するコマンドです。このコースでは、Gradle のデーモンが残っていることとメモリ量を見るのに使います。

詳しく: コマンド行の読み方: $ とコマンドとオプションと引数 →

strace

プログラムが OS に頼んだ処理(ファイルを開く、実行するなど)を1行ずつ記録する Linux の道具です。JDK のものではありません。

詳しく: コマンド行の読み方: $ とコマンドとオプションと引数 →

treetree -a

フォルダの中身を、階層が分かる木の形で一覧するコマンドです。このコースでは、その出力(ファイル一覧)の意味でも使います。

詳しく: コマンド行の読み方: $ とコマンドとオプションと引数 →

uname

OS の名前や種類を表示するコマンドです。ant の起動スクリプトが、動いている OS を調べるために呼んでいました。

詳しく: ant を実行すると何が起きるか →

unzip

zip ファイルの中身を一覧したり取り出したりするコマンドです。JAR は zip 形式なので、JAR にもそのまま使えます。JDK のものではありません。

詳しく: コマンド行の読み方: $ とコマンドとオプションと引数 →

xxd

ファイルの中身を16進数で表示するコマンドです。.class のようなバイナリの先頭を確かめるのに使います。JDK のものではありません。

詳しく: コマンド行の読み方: $ とコマンドとオプションと引数 →

コマンドのオプション・設定名

--build-cacheビルドキャッシュ / ~/.gradle/caches/build-cache-1

Gradle のビルドキャッシュを使う指定です。キャッシュできるタスクは出力を保存し、clean の後でも入力が同じなら実行せずに戻します(FROM-CACHE)。

詳しく: Gradle: タスクの依存関係と、変更が無ければ飛ばす仕組み →

--configuration-cache構成キャッシュ / configuration cache

Gradle の構成キャッシュを使う指定です。スクリプトを読んで実行順を決める段階の結果を保存し、変わっていなければ次回は再利用します。

詳しく: Gradle: タスクの依存関係と、変更が無ければ飛ばす仕組み →

--console=plain

Gradle の出力を、色や進捗表示の無い素の文字だけにする指定です。ログを記録するために付けています。

詳しく: mvn・./mvnw・ant・./gradlew: ビルドのコマンド →

--create

jar コマンドで、新しく JAR を作る指定です。短い形は c です。--file で作る JAR の名前を、続けて入れるファイルを書きます。

詳しく: java・javac・jar・javap: JDK のコマンド →

--debug

Spring Boot のアプリの起動引数です。付けると、自動構成の条件がどれも通ったか外れたかの一覧(条件評価レポート)がログに出ます。

詳しく: 自動構成は候補を条件でふるいにかける →

--dry-run-m / SKIPPED / all task actions disabled

Gradle に、タスクを実行せずに実行順だけを表示させる指定です。短い形は -m で、各行に SKIPPED が付きます。

詳しく: Gradle: タスクの依存関係と、変更が無ければ飛ばす仕組み →

--file

jar コマンドで、扱う JAR のファイル名を指定します。短い形は f です。jar --create --file app.jar なら app.jar を作ります。

詳しく: java・javac・jar・javap: JDK のコマンド →

--infoInput property

Gradle の表示を詳しくする指定です。タスクが再実行された理由(どの入力が変わったか)が出ます。

詳しく: Gradle: タスクの依存関係と、変更が無ければ飛ばす仕組み →

--main-class

jar コマンドで、java -jar のときに最初に動かすクラスを指定します。JAR の中のマニフェストに Main-Class の行として書き込まれます。

詳しく: java・javac・jar・javap: JDK のコマンド →

--no-daemon

Gradle に、常駐の JVM(デーモン)を残さずにビルドさせる指定です。この構成では、使い捨てのデーモンが別に起動されました。

詳しく: mvn・./mvnw・ant・./gradlew: ビルドのコマンド →

--print-bytecode

Node のデバッグ用のフラグです。V8 が JavaScript のソースから実行時に作ったバイトコードを表示します。Java の道具ではありません。

詳しく: JVM は何を読んで実行するのか →

--release

javac の --release 22 は、指定した版の Java 向けに .class を作る指定です。新しい JDK で、古い JVM でも読める .class を作れます。

詳しく: java・javac・jar・javap: JDK のコマンド →

--spring.jpa.show-sql=true

Spring Boot のアプリの起動引数です。Hibernate がデータベースに送った SQL を、ログに表示させます。

詳しく: JPA の永続化コンテキスト →

--statusgradlew --status

gradlew --status は、動いている(または最近止まった)Gradle のデーモンの一覧を表示します。

詳しく: mvn・./mvnw・ant・./gradlew: ビルドのコマンド →

--stop

gradlew --stop は、同じ版の Gradle のデーモンをすべて止めます。止めた後も --status には、STOPPED の行として表示されます。

詳しく: Gradle: タスクの依存関係と、変更が無ければ飛ばす仕組み →

-cp-classpath / --class-path / java -cp

クラスパス(クラスを探しに行く場所の一覧)を指定するオプションです。java にも javac にもあり、フォルダか JAR を : で区切って並べます(Windows は ;)。

詳しく: java・javac・jar・javap: JDK のコマンド →

-D

java・mvn・ant に共通の、-D名前=値 で値を渡す指定です。java ではシステムプロパティ、mvn ではユーザープロパティ、ant では property になります。

詳しく: java・javac・jar・javap: JDK のコマンド →

-Djarmode=toolsspring-boot-jarmode-tools / jarmode-tools

Spring Boot の実行可能 JAR の展開や層の一覧を呼ぶ指定です。実体は、プラグインが JAR に足す spring-boot-jarmode-tools です。

詳しく: コンテナイメージと3者の比較 →

-DskipTests

mvn に付けると、テストのコンパイルはしますが、テストの実行を飛ばします。Maven のテスト用プラグイン(surefire)が読む指定です。

詳しく: mvn・./mvnw・ant・./gradlew: ビルドのコマンド →

-Dverbose

mvn dependency:tree に付けると、版の衝突や重複で省かれた枝も表示する指定です。

詳しく: Maven: 依存解決(推移依存・nearest wins・dependencyManagement・exclusions・スコープ) →

-g:none

javac の -g:none は、行番号などデバッグ用の情報を .class に入れない指定です。例外の表示に行番号が出なくなります。

詳しく: java・javac・jar・javap: JDK のコマンド →

-ntp

mvn の -ntp は、ダウンロードの進み具合の表示を出さない指定です。ログを短くするために付けています。

詳しく: mvn・./mvnw・ant・./gradlew: ビルドのコマンド →

-parameters

javac の -parameters は、メソッドやコンストラクタの引数の名前を .class に残す指定です。付けないと実行時には arg0 のような仮の名前になります。

詳しく: java・javac・jar・javap: JDK のコマンド →

-Pnative

mvn の -P は、pom.xml に用意された設定の組(プロファイル)を有効にする指定です。-Pnative は native image 用の設定を有効にします。

詳しく: mvn・./mvnw・ant・./gradlew: ビルドのコマンド →

-Xint

java のオプションで、JIT コンパイラを使わず、バイトコードを1命令ずつ解釈する実行だけにします。速さの比較の実験で使います。

詳しく: JVM の起動とクラスロード、JIT →

-Xlog:class+load-Xlog

java のオプションで、JVM が読み込んだクラスと、その出どころを1行ずつログに出します。-Xlog は JVM のログ全般の指定です。

詳しく: JVM の起動とクラスロード、JIT →

-Xshare:off

java のオプションで、JDK のクラスをまとめて取り込む共有アーカイブ(CDS)を使わないようにします。実測では、起動にかかる時間が延びました。

詳しく: JVM の起動とクラスロード、JIT →

-XX:AOTCache

java のオプションで、使う AOT キャッシュのファイルを指定します。-XX: で始まるのは、JVM(HotSpot)の細かい動きを変える上級者向けの指定です。

詳しく: 起動を速くする方向と失うもの →

./mvnw -Bmvn -B

mvn の -B は、対話なしで実行する指定です(出力の色も付きません)。ログを記録するときに使います。

詳しく: mvn・./mvnw・ant・./gradlew: ビルドのコマンド →

accept-count

Tomcat の設定で、作業スレッドが全部ふさがっているときに、接続を待たせておける行列の長さです。

詳しく: 1リクエスト1スレッドと仮想スレッド →

ant -d

ant の -d は、デバッグ用の詳しい表示です。property の名前と展開後の値が Setting project property: の行で見えます(-v では出ません)。

詳しく: Ant: build.xml を1行ずつ読む →

ant -lib-lib

ant の -lib は、Ant に追加の JAR を読ませる指定です。Ivy のような外部の task を使うとき、その JAR のあるフォルダを渡します。

詳しく: Ant: 依存の扱いと、古いプロジェクトの読み方 →

ant -p

ant の -p は、build.xml の target のうち説明(description)付きのものの一覧と、既定の target を表示する指定です。ビルドは実行しません。

詳しく: mvn・./mvnw・ant・./gradlew: ビルドのコマンド →

ant -v

ant の -v は、Ant が内側でしていること(実行の順番や、コンパイラに渡した引数など)を詳しく表示する指定です。

詳しく: mvn・./mvnw・ant・./gradlew: ビルドのコマンド →

curl -i

curl の -i は、応答の本文の前に、ステータス行と応答ヘッダも表示させる指定です。

詳しく: コマンド行の読み方: $ とコマンドとオプションと引数 →

help --task

./gradlew help --task タスク名 は、そのタスクを登録したプラグイン、型、説明を表示します。

詳しく: Gradle: タスクの依存関係と、変更が無ければ飛ばす仕組み →

jar -C

jar コマンドの -C フォルダ は、そのフォルダへ移動してから、後ろに書いたファイルを JAR に入れる指定です。-C out . は out の中身全部です。

詳しく: java・javac・jar・javap: JDK のコマンド →

jar tfjar --list --file / --list

JAR の中のファイル名を一覧する形です。t が一覧、f が続けてファイル名を書く、の意味で、jar --list --file と同じです。

詳しく: java・javac・jar・javap: JDK のコマンド →

java -jar-jar

JAR を指定して起動する形です。JAR の中のマニフェストの Main-Class に書かれたクラスの main が呼ばれます。-cp の指定は無視されます。

近いもの: node dist/main.js

詳しく: java・javac・jar・javap: JDK のコマンド →

java -version-version

入っている Java の版を表示して終わる指定です。JDK の版と日付、実行環境の名前、JVM の名前の3行が出ます。

詳しく: java・javac・jar・javap: JDK のコマンド →

javac -d

javac の -d は、.class の出力先フォルダの指定です。javac -d out なら、out の下にパッケージ名どおりのフォルダを作って .class を置きます。

詳しく: java・javac・jar・javap: JDK のコマンド →

javac -O

昔の javac にあった最適化の指定です。JDK 25 でも受け付けられますが、出力された .class は付けない場合と同じでした。

詳しく: java・javac・jar・javap: JDK のコマンド →

javap -c

javap の -c は、メソッドごとに、バイトコードの命令列を表示する指定です。

詳しく: java・javac・jar・javap: JDK のコマンド →

javap -p

javap の -p は、private のものも含めて、すべてのフィールドとメソッドを表示する指定です。付けないと private は出ません。

詳しく: java・javac・jar・javap: JDK のコマンド →

javap -v

javap の -v は、.class の版の番号や定数の表、アノテーションの記録など、詳しい情報を足して表示する指定です。private のものは -p も付けないと出ません。

詳しく: java・javac・jar・javap: JDK のコマンド →

mvn -o-o

mvn の -o は、オフラインで動く指定です。取得済みの依存だけでビルドし、無いものは取りに行かずにエラーになります。

詳しく: Maven: 依存解決(推移依存・nearest wins・dependencyManagement・exclusions・スコープ) →

mvn -q./gradlew -q / mvn -X

mvn や ./gradlew の -q は、エラー以外を表示しない指定です。mvn の -X はデバッグ用の詳しい表示で、java の -X とは別物です。

詳しく: Maven: pom.xml を1行ずつ読む →

server.port

Spring Boot の設定の名前で、内蔵サーバが待ち受けるポート番号です。何も設定しないときは 8080 で待ち受けました。

詳しく: 設定の優先順位 →

server.tomcat.threads.maxthreads.max

Spring Boot の設定の名前で、内蔵 Tomcat の作業スレッドの上限です。既定は 200 です。

詳しく: 1リクエスト1スレッドと仮想スレッド →

spring.aop.proxy-target-class

Spring Boot の設定の名前です。false にすると、インターフェースのある Bean の代理を、CGLIB ではなく JDK の動的プロキシで作ります。

詳しく: AOP プロキシと自己呼び出し →

spring.jpa.open-in-viewopen-in-view

Spring Boot の設定の名前です。既定の true では、Web のリクエストの処理中ずっと永続化コンテキストを開いたままにします。

詳しく: JPA の永続化コンテキスト →

spring.threads.virtual.enabled

Spring Boot の設定の名前です。true にすると、リクエストの処理を、Tomcat の作業スレッドではなく仮想スレッドが受け持ちます。

詳しく: 1リクエスト1スレッドと仮想スレッド →

unzip -l

unzip の -l は、取り出さずに、zip の中のファイル名と大きさを一覧する指定です。

詳しく: コマンド行の読み方: $ とコマンドとオプションと引数 →

unzip -p

unzip の -p は、zip の中のファイルを、保存せずに画面(標準出力)へそのまま出す指定です。

詳しく: コマンド行の読み方: $ とコマンドとオプションと引数 →

unzip -v

unzip の -v は、一覧に圧縮の方式・圧縮後の大きさ・圧縮率も加えて表示する指定です。Stored は無圧縮を表します。

詳しく: コマンド行の読み方: $ とコマンドとオプションと引数 →

ファイル・フォルダ・ファイルの中の項目

_remote.repositories

ローカルリポジトリで JAR の隣に置かれる帳簿で、どのリポジトリから取ったかを記録します。Maven Resolver(Maven の依存解決の部品)の内部の形式です。

詳しく: Maven: 依存解決(推移依存・nearest wins・dependencyManagement・exclusions・スコープ) →

-plain.jar

Gradle の jar タスクが作る、自分のクラスとリソースだけの JAR です。Boot プラグインがあると、実行可能 JAR と区別するために plain が付きます。

詳しく: Gradle: タスクの依存関係と、変更が無ければ飛ばす仕組み →

-sources.jar-javadoc.jar

ライブラリの JAR と並んで配られる、ソースや Javadoc を入れた JAR です。動かすためには要りません。Ivy は conf を書かないとこれも取ってきます。

詳しく: Ant: 依存の扱いと、古いプロジェクトの読み方 →

.class

javac がソースから作るファイルです。中身は JVM 向けの命令列(バイトコード)で、クラスやインターフェース1つにつき1ファイルできます。

近いもの: tsc が出す .js(位置だけ。.js は人が読めるソース)

詳しく: .java・.class・バイトコード・javac →

.jar

JAR ファイルの拡張子です。.class や設定ファイルを1つにまとめた zip 形式のファイルです。

詳しく: JAR・WAR・マニフェスト・実行可能 JAR →

.jar.originaldemo-0.0.1-SNAPSHOT.jar.original / .original

Spring Boot のプラグインが依存を入れて作り替える前の、元の JAR です。自分のクラスと設定だけが入っています。

詳しく: 実行可能 JAR の中身 →

.java

Java のソースファイルの拡張子です。人が書くのはこれで、javac にかけると .class ができます。

近いもの: .ts

詳しく: .java・.class・バイトコード・javac →

.lastUpdated

ローカルリポジトリに残る、取れなかった記録のファイルです。存在しない座標を取りに行くと、JAR の代わりにこれが置かれます。

詳しく: Maven: 依存解決(推移依存・nearest wins・dependencyManagement・exclusions・スコープ) →

.project.classpath

Eclipse がプロジェクトごとに作る設定ファイルです。.project はプロジェクトの説明を、.classpath はクラスパスと出力先を持ちます。

詳しく: Ant: 依存の扱いと、古いプロジェクトの読み方 →

~/.gradle

Gradle が、取ってきた依存の JAR などを溜めておくフォルダです(ホームディレクトリの下)。

詳しく: Ant・Maven・Gradle・pom.xml・依存・Maven Central →

~/.ivy2~/.ivy2/cache

Ivy がホームディレクトリの下に作るフォルダで、取ってきたファイルは ~/.ivy2/cache に溜まります。2回目は、ここにあればダウンロードしません。

詳しく: Ant: 依存の扱いと、古いプロジェクトの読み方 →

~/.m2~/.m2/repository / .m2/repository

Maven が、取ってきた依存の JAR を溜めておくフォルダです(ホームディレクトリの下)。全プロジェクトで共用されます。

詳しく: Maven は何を変えたか →

$JAVA_HOME$JAVA_HOME/release

JDK のインストール先のフォルダを指す、環境変数の名前です。その下の bin に java や javac が入っています。

詳しく: Java・JDK・JRE・JVM: 何を入れて、何が動くのか →

application-dev.properties

プロファイル dev を有効にしたときだけ読まれる、Spring Boot の設定ファイルです。同じ名前の設定は application.properties より優先されます。

詳しく: 設定の優先順位 →

application.properties

Spring Boot の設定ファイルです。名前=値 の形で1行に1つ書きます。src/main/resources に置きます。

詳しく: 設定の優先順位 →

application.yaml

Spring Boot の設定ファイルの、YAML で書く形です。application.properties と同じ役目です。

詳しく: JDBC・JPA・Hibernate と、略語の早見表 →

applicationContext.xmldispatcher-servlet.xml / -servlet.xml

WAR で Spring が既定で読む XML です。web.xml に場所を書かなければ、WEB-INF の下のこれと、サーブレット名-servlet.xml が読まれます。

詳しく: 既存プロジェクトの読み方 →

AutoConfiguration.imports

自動構成の候補になるクラスの名前を、1行に1つ並べたファイルです。自動構成を持つ JAR の、META-INF/spring の下に入っています。

詳しく: 自動構成は候補を条件でふるいにかける →

beans.xml

Spring の Bean の配線を XML で書いた設定ファイルの、このコースの例での名前です。名前は自由に付けられます。

詳しく: XML・アノテーション・JavaConfig →

BOOT-INF

Spring Boot の実行可能 JAR の中のフォルダの名前です。Spring Boot が決めたもので、自分の .class と依存の JAR が入ります。

詳しく: 実行可能 JAR の中身 →

BOOT-INF/classesBOOT-INF/classes/

Spring Boot の実行可能 JAR の中で、自分のアプリの .class と設定ファイルが入るフォルダです。

詳しく: 実行可能 JAR の中身 →

BOOT-INF/libBOOT-INF/lib/

Spring Boot の実行可能 JAR の中で、依存ライブラリの JAR が、JAR のまま入るフォルダです。

詳しく: 実行可能 JAR の中身 →

build.gradle

Gradle のビルドファイルです。依存ライブラリやビルドの設定を、XML ではなくスクリプトで書きます。

詳しく: Gradle: build.gradle を1行ずつ読む →

build.gradle.kts

Gradle のビルドスクリプトを Kotlin で書いたときのファイル名です。Groovy の build.gradle と同じ内容を書け、雛形では書き方が4か所違うだけでした。

詳しく: Gradle: build.gradle を1行ずつ読む →

build.xml

Ant のビルドファイルです。フォルダを作る、コンパイルする、JAR にするといった手順を、XML で1つずつ書きます。

詳しく: Ant: build.xml を1行ずつ読む →

build/

Gradle が既定でビルドの出力を置くフォルダです。Ant の例に出る build は、build.xml を書いた人が決めた名前です。

近いもの: dist/

詳しく: Ant・Maven・Gradle・pom.xml・依存・Maven Central →

CAFEBABE

.class ファイルの先頭4バイトに必ず入っている値です(16進数で CA FE BA BE)。.class であることの印です。

詳しく: ソースが動くまで: javac と .class と JVM →

Class-Path

マニフェストの中の1行で、この JAR が使うほかの JAR の場所を書きます。書けるのは JAR の外にあるファイルの場所です。

詳しく: クラスパスと JAR →

classes.jsa

JDK に付属する共有アーカイブ(CDS)のファイルです。よく使う標準クラスを、すぐ使える形でまとめてあります。

詳しく: JVM は何を読んで実行するのか →

CLASSPATH

クラスパスを渡すための環境変数の名前です。java に -cp を書いた場合は、この環境変数の設定は使われません。

詳しく: パッケージ・完全修飾名・import・クラスパス・クラスローダ →

classpath.idx

Boot の Maven・Gradle プラグインが作る実行可能 JAR にある、JAR をクラスパスに並べる順のファイルです。exejar の JAR にはありませんでした。

詳しく: 3つの比較と Spring Boot との関係 →

Dockerfile

コンテナイメージの作り方を、上から順に書いたファイルです。COPY の行は、ファイルをイメージの中へコピーします。

詳しく: コンテナイメージと3者の比較 →

ejb-jar.xmlMETA-INF/ejb-jar.xml

EJB の部品を記述する XML のファイル(デプロイ記述子)です。EJB 2.1 では必須でした。

詳しく: EJB が要求したものと Spring の登場 →

gradle-wrapper.propertiesdistributionUrl

gradlew が取ってくる Gradle の版を決めるファイルです。gradle/wrapper/ の下にあり、distributionUrl に配布物の URL があります。

詳しく: Gradle: build.gradle を1行ずつ読む →

ivy.xml

Ivy に取らせる依存を書くファイルです。<dependency org name rev/> の1行が、Maven の座標(グループ名・名前・版)に当たります。

詳しく: Ant: 依存の扱いと、古いプロジェクトの読み方 →

layers.idxBOOT-INF/layers.idx

Spring Boot の実行可能 JAR に入っている、どのフォルダをコンテナイメージのどの層にするかの定義です。

詳しく: コンテナイメージと3者の比較 →

lib/

ライブラリの JAR を置くフォルダによく使われる名前です。Java の決まりではなく慣習で、Ant の例では人が、Tomcat では自分の JAR を置きます。

詳しく: ツール無しで手でビルドする →

lib/modules

JDK に入っている、標準ライブラリのクラスをまとめた1つのファイルです。共有アーカイブ(CDS)を切ると、String などはここから読まれます。

詳しく: JVM は何を読んで実行するのか →

libjvm.solib/server/libjvm.so

Linux の JDK に入っている、JVM の本体のファイルです。java コマンドがこれを読み込んで動きます。

詳しく: JVM は何を読んで実行するのか →

Main-Class

マニフェストの中の1行で、java -jar のときに最初に動かすクラスの名前を書きます。これが無い JAR は java -jar で起動できません。

詳しく: クラスパスと JAR →

MANIFEST.MFMETA-INF/MANIFEST.MF / MANIFEST

JAR の中の META-INF に入っている説明書きのファイル(マニフェスト)です。Main-Class の行が java -jar の入口になります。

詳しく: JAR・WAR・マニフェスト・実行可能 JAR →

META-INFMETA-INF/

JAR の中にある説明用のフォルダの名前です。マニフェスト(MANIFEST.MF)などが入ります。

詳しく: JAR・WAR・マニフェスト・実行可能 JAR →

module-info.class

Java 9 のモジュールの宣言が入ったファイルです。JAR の直下にあると、その JAR はモジュールの宣言を持っています。

詳しく: この設計の代償と、後の言語がしたこと →

pom.xml

Maven のプロジェクト定義ファイルです。プロジェクトの名前と版、依存ライブラリ、ビルドの設定を XML で書きます。

近いもの: package.json(役割だけ。scripts に当たる欄は無い)

詳しく: Maven: pom.xml を1行ずつ読む →

reachability-metadata.json

native image を作るときに渡す、リフレクションで使うクラスなどの一覧です。Spring AOT がビルド時に生成します。

詳しく: 起動を速くする方向と失うもの →

settings.gradlesettings.gradle.kts / rootProject.name

Gradle のビルドの入口になる設定ファイルです。rootProject.name でプロジェクト名を決め、成果物名の元になります。単一プロジェクトでは省略できます。

詳しく: Gradle: build.gradle を1行ずつ読む →

src/main/javasrc/main/java/ / src / main / java / src、java、jp

Maven が決めた、Java のソースの置き場所です。Gradle も同じ場所を使います。Java の言語の規則ではありません。

詳しく: パスが深い理由: 15階層を分解する →

src/main/resourcessrc/main/resources/

Maven が決めた、設定ファイルなどコード以外のファイルの置き場所です。ビルドすると、中身が .class と同じ場所へコピーされます。

詳しく: Spring が決めていること、決めていないこと →

src/main/webapp

WAR に入れる Web 用のファイルの置き場所として、Maven が決めた既定のフォルダです。Eclipse WTP も 2021 年から既定をこれに変えました。

詳しく: Ant: 依存の扱いと、古いプロジェクトの読み方 →

Start-Class

Spring Boot の実行可能 JAR のマニフェストにある行です。自分の main を持つクラスの名前が書かれ、Spring のローダがこれを呼びます。

詳しく: 実行可能 JAR の中身 →

static/

Spring Boot で、そのまま配信したいファイル(画像や HTML など)を置くフォルダです。src/main/resources の下にあります。

詳しく: Spring が決めていること、決めていないこと →

target/target/classes / target/classes/

Maven がビルドの出力をすべて置くフォルダです。コンパイル結果の .class や、できあがった JAR が入ります。

近いもの: dist/

詳しく: ソースから起動まで: 全体の流れ →

templates/

Spring Boot で、Thymeleaf などのテンプレートエンジンが画面の雛形を探しに行く既定のフォルダです。src/main/resources の下にあります。

詳しく: 最小プロジェクトのファイル一覧 →

WEB-INFWEB-INF/

WAR の中の決まったフォルダの名前です。ここに置いたものがサーバに読まれ、ブラウザから直接は取り出せません。

詳しく: Servlet・WAR・アプリケーションサーバ →

WEB-INF/classesWEB-INF/classes/

WAR の中で、自分のアプリの .class を置くと決まっているフォルダです。

詳しく: 成果物の単位: .class・JAR・WAR・実行可能 JAR →

WEB-INF/libWEB-INF/lib/

WAR の中で、依存ライブラリの JAR を置くと決まっているフォルダです。ここの JAR は、サーバが読み込みます。

詳しく: 成果物の単位: .class・JAR・WAR・実行可能 JAR →

web.xmlWEB-INF/web.xml

WAR の中の WEB-INF に置く設定ファイルです。URL と Servlet の対応など、サーバに何を起こしてもらうかを書きます。

詳しく: Servlet・WAR・アプリケーションサーバ →

webappswebapps/

Tomcat のフォルダの1つです。ここに WAR を置くと、Tomcat が見つけて読み込みます(デプロイ)。

詳しく: Servlet・WAR・アプリケーションサーバ →

WebContentWebContent/

Eclipse の Web プロジェクトが、Web 用のファイルを置くフォルダに以前の既定で付けていた名前です。2021年に既定は src/main/webapp に変わりました。

詳しく: Ant: 依存の扱いと、古いプロジェクトの読み方 →

Java と JVM

@Retention

アノテーションを定義するときに付けて、どこまで残すかを決めるものです。RUNTIME を指定したものだけが、実行時に読めます。

詳しく: アノテーションとリフレクション →

AdoptiumEclipse Adoptium

Temurin という JDK を、OpenJDK のソースからビルドして無料で配っている団体です。配布元として、システムプロパティ java.vendor などに名前が出ます。

詳しく: Java・JDK・JRE・JVM: 何を入れて、何が動くのか →

AOT キャッシュ

JVM の機能です。学習用に1回走らせ、クラスの読み込み結果をファイルに残しておき、次からの起動を速くします(JDK 24 以降)。

詳しく: 起動を速くする方向と失うもの →

AtomicInteger

複数のスレッドから同時に足しても、数え落としが起きない整数のクラスです。JDK に入っています。

詳しく: Bean のライフサイクルとスコープ →

Class.forName

クラスの名前を文字列で渡して、そのクラスの読み込みを頼むメソッドです。無ければ ClassNotFoundException になります。

詳しく: クラスパスと JAR →

ClassNotFoundException

名前で頼んだクラスが、クラスパスのどこにも無かったときの例外です。JAR の入れ忘れや、名前の間違いで出ます。

詳しく: クラスパスと JAR →

final

これ以上変えられないことを表す語です。final のクラスは継承できず、final のメソッドは上書きできず、final のフィールドは代入し直せません。

詳しく: AOP プロキシと自己呼び出し →

GraalVM

JDK の一種で、Java のアプリを JVM なしの実行ファイルに前もってコンパイルする native-image という道具を持っています。

詳しく: 起動を速くする方向と失うもの →

HotSpot

OpenJDK に入っている JVM の実装の名前です。java -version の3行目に出る OpenJDK 64-Bit Server VM がこれです。

詳しく: Java・JDK・JRE・JVM: 何を入れて、何が動くのか →

import

Java の import は、ほかのパッケージのクラスを短い名前で書けるようにする宣言です。Node と違い、ファイルを読み込む命令ではありません。

詳しく: パッケージ・完全修飾名・import・クラスパス・クラスローダ →

IOException

ファイルや通信など、入出力の失敗を表す例外です。検査例外の代表で、投げるメソッドには throws が要ります。

詳しく: @Transactional はプロキシとスレッドでできている →

Java SE

Java Platform, Standard Edition の略です。Java の言語と標準ライブラリを定めた規格で、JDK はその実装です。

詳しく: Java・JDK・JRE・JVM: 何を入れて、何が動くのか →

java.lang

String や Object など、Java の基本のクラスが入っているパッケージです。どのソースにも自動で import されるので、短い名前でそのまま使えます。

詳しく: パッケージ・完全修飾名・import・クラスパス・クラスローダ →

JavaBeans

getter と setter の名前の付け方などを決めた、昔からある Java の部品の決まりです。Spring の Bean とは別物です。

詳しく: Spring・Spring Framework・Spring Boot・Bean・DI コンテナ →

Javadoc

JDK やライブラリの、クラスやメソッドの公式の説明文書です。ソースの中のコメントから javadoc という道具で作られます。

詳しく: 動的プロキシ →

JDKJava Development Kit

Java Development Kit の略です。JVM と標準ライブラリに、javac などの開発用の道具を足した一式で、手元に入れるのはこれです。

近いもの: Node.js 本体と開発用の道具(tsc は別パッケージ)

詳しく: Java・JDK・JRE・JVM: 何を入れて、何が動くのか →

JITJIT コンパイラ

just-in-time の略です。JIT コンパイラは、よく通る箇所のバイトコードを、実行中に機械語へ置き換える JVM の部品です。

詳しく: JVM の起動とクラスロード、JIT →

JREJava Runtime Environment / Runtime Environment

Java Runtime Environment の略です。JVM と標準ライブラリと java コマンドなどの、動かすための一式で、javac は入っていません。

近いもの: Node.js 本体

詳しく: Java・JDK・JRE・JVM: 何を入れて、何が動くのか →

JUnitJUnit 5 / Jupiter / JUnit Platform

Java のテストの枠組み(ライブラリ)です。JUnit 5 以降は、テストを書く側が Jupiter、実行の土台が JUnit Platform です。JAR として使います。

詳しく: ビルドとは何か: 手作業なら何をするか →

junit-platform-console-standalone

JUnit のテストをコマンドラインから実行するための JAR です。依存をすべて含んだ実行可能な Fat JAR で、java -jar で起動します。

詳しく: ビルドとは何か: 手作業なら何をするか →

JVMJava Virtual Machine / Java 仮想マシン

Java Virtual Machine の略です。.class(バイトコード)を読んで実行するプログラムで、java コマンドを実行すると動き出します。

近いもの: V8(Node.js 本体ではなく、その中のエンジン)

詳しく: Java・JDK・JRE・JVM: 何を入れて、何が動くのか →

mainmain メソッド

JVM が最初に呼ぶメソッドの名前です。java で起動するときは、main を持つクラスを指定します。Node には、これに当たる決まりはありません。

詳しく: .java・.class・バイトコード・javac →

main スレッド

JVM が起動したときからあり、main メソッドを実行するスレッドです。ログのスレッドの欄には main と出ます。

詳しく: SpringApplication.run がやること →

native image

Java のアプリを、JVM を持たない実行ファイルに前もってコンパイルしたものです。起動は速くなりますが、実行時にクラスを足せません。

詳しく: 起動を速くする方向と失うもの →

NoClassDefFoundError

コンパイルのときにはあったクラスが、実行時に見つからなかったときのエラーです。依存の JAR が足りないときに出ます。

詳しく: クラスパスと JAR →

OpenJDK

JDK のソースを開発しているオープンソースのプロジェクトです。各社はこの共通のソースから JDK をビルドして配っています。

詳しく: Java・JDK・JRE・JVM: 何を入れて、何が動くのか →

Oracle JDK

Oracle が商用ライセンスで配っている JDK です。元になるソースは Temurin などと同じ OpenJDK です。

詳しく: Java・JDK・JRE・JVM: 何を入れて、何が動くのか →

packagepackage 宣言

Java では、ソースの先頭でクラスの属するパッケージを宣言する語です。Maven では、JAR などを作る段階(フェーズ)の名前でもあります。

詳しく: パッケージ・完全修飾名・import・クラスパス・クラスローダ →

public

どこからでも使えることを表す語です。付けないクラスは、同じパッケージの中からだけ使えます。Boot では配信用のフォルダ名にも出ます。

詳しく: パッケージはフォルダではなく名前 →

record

値をまとめて持つだけのクラスを、短く書くための Java の構文です。フィールドと、それを読むメソッドが自動で用意されます。

詳しく: 設定の優先順位 →

RuntimeException

throws で宣言しなくても投げられる例外の、親になるクラスです。@Transactional が既定で巻き戻すのは、これと Error です。

詳しく: @Transactional はプロキシとスレッドでできている →

StackOverflowError

メソッドの呼び出しが深くなりすぎて、呼び出しを積む場所(スタック)が尽きたときのエラーです。

詳しく: DI コンテナを素の Java で作る →

static

クラスそのものに属し、オブジェクトが無くても使えることを表す語です。Spring Boot では、配信するファイルを置くフォルダの名前にも出ます。

詳しく: .java・.class・バイトコード・javac →

Temurin

Eclipse Adoptium が OpenJDK のソースからビルドして無料で配っている JDK の名前です。このコースの実測はこれで行っています。

詳しく: Java・JDK・JRE・JVM: 何を入れて、何が動くのか →

ThreadLocal

スレッドごとに別の値を持てる変数です。同じスレッドの中なら、引数で渡さなくてもどこからでも取り出せます。

詳しく: @Transactional はプロキシとスレッドでできている →

throws

メソッドの宣言に書いて、そのメソッドが投げうる例外を示す語です。検査例外を中で捕まえずに外へ投げるなら、これを書かないとコンパイルできません。

詳しく: @Transactional はプロキシとスレッドでできている →

URLClassLoader

フォルダや JAR の場所を URL で渡すと、そこからクラスを読み込む、JDK 標準のクラスローダです。

詳しく: クラスパスと JAR →

アノテーション

クラスやメソッドに付ける @ で始まる印です。それ自体は何も実行せず、誰かが読んで初めて意味を持ちます。デコレータとは別物です。

詳しく: アノテーションとリフレクション →

インターフェース

持つべきメソッドだけを決めた型です。クラスがそれを実装します。TypeScript と違い、コンパイル後の .class にも残り、実行時に読めます。

近いもの: TypeScript の interface(ただし実行時に消える)

詳しく: 動的プロキシ →

インタプリタ解釈実行

命令を1つずつ読んで、その場で実行する仕組みです。JVM は、読み込んだバイトコードをまずこの方法で実行します。

詳しく: JVM の起動とクラスロード、JIT →

オブジェクトインスタンス

クラスから new で作った実体です。インスタンスとも呼びます。フィールドの値は、オブジェクトごとに別々に持ちます。

詳しく: .java・.class・バイトコード・javac →

クラス

フィールド(データ)とメソッド(処理)をまとめた型の定義です。Java のコードは、クラス(またはインターフェースなどの型)の中に書きます。

近いもの: TypeScript の class

詳しく: .java・.class・バイトコード・javac →

クラスパス実行時クラスパス

JVM や javac が、クラスを探しに行く場所の一覧です。フォルダか JAR を並べます。何も指定しなければ、今いるフォルダです。

近いもの: node_modules をたどる探し方(役割だけ。こちらは起動時に決まる1本の一覧)

詳しく: クラスパスと JAR →

クラスローダアプリケーションクラスローダ / AppClassLoader / ClassLoader

クラスを探して読み込む役の部品です。自分のクラスと JDK のクラスは、別のクラスローダが読み込みます。

詳しく: JVM の起動とクラスロード、JIT →

クラスロード

JVM が、クラスを探して読み込むことです。手元の JVM では、自分のクラスは、初めて使う時点で読み込まれました。

詳しく: JVM の起動とクラスロード、JIT →

コンストラクタ

new でオブジェクトを作るときに呼ばれる、初期化の処理です。Java ではクラスと同じ名前で書きます。

近いもの: TypeScript の constructor

詳しく: .java・.class・バイトコード・javac →

サブクラス親クラス

あるクラスを継承して作った、子のクラスです。元のクラス(親クラス)の型としても扱えます。

詳しく: AOP プロキシと自己呼び出し →

システムプロパティ

JVM の中のどこからでも読める、名前と値の組です。java の起動時に -D名前=値 で渡せます。OS の環境変数とは別のものです。

詳しく: 設定の優先順位 →

スタックトレース

例外が起きた時点で、どのメソッドがどのメソッドを呼んでいたかを、1行に1つ並べた表示です。上が最後に呼ばれた側です。

詳しく: DispatcherServlet と組み込み Tomcat →

スレッド

プログラムの中で同時に進む処理の流れです。Tomcat の既定では、1つのリクエストを1本のスレッドが最初から最後まで受け持ちます。

詳しく: 1リクエスト1スレッドと仮想スレッド →

スレッドプール固定プール

スレッドを何本か作っておき、仕事が来るたびに使い回す仕組みです。本数の上限が、同時に進められる仕事の数になります。

詳しく: 1リクエスト1スレッドと仮想スレッド →

セッターsetter / getter

フィールドに値を入れるための、setName のような名前のメソッドです。値を読む側は getter(getName など)と呼びます。

詳しく: Bean のライフサイクルとスコープ →

バイトコード

.class の中身である、JVM 向けの命令列です。CPU がそのまま実行できる機械語ではなく、JVM が読んで実行します。

詳しく: ソースが動くまで: javac と .class と JVM →

パッケージ

クラスをまとめる名前空間です。com.example.demo のような名前で、ソースの先頭で宣言します。フォルダそのものでも、npm のパッケージでもありません。

詳しく: パッケージはフォルダではなく名前 →

ヒープ

JVM が、new で作ったオブジェクトを置くメモリの領域です。大きさの上限は設定で変えられ、JVM のメモリ使用量を左右します。

詳しく: コンテナイメージと3者の比較 →

フィールド

クラスの中に宣言する変数で、オブジェクトが持つデータです。static を付けると、クラスに1つだけの変数になります。

詳しく: .java・.class・バイトコード・javac →

メソッド

クラスやインターフェースの中に書く、呼び出せる処理です。Java には、型の外に単独で置く関数はありません。

詳しく: .java・.class・バイトコード・javac →

モジュール

Maven では、pom.xml を1つ持つビルドの単位です。Java 9 では、JAR どうしの依存を宣言する仕組みです。Node や NestJS のモジュールとは別物です。

詳しく: この設計の代償と、後の言語がしたこと →

ラムダ

その場で書く、名前の無い関数です。-> を使って (a, b) -> a + b のように書きます。

詳しく: 成果物の単位: .class・JAR・WAR・実行可能 JAR →

リフレクション

実行中のプログラムが、クラスのメソッドやフィールド、付いている印を調べたり呼んだりできる Java の仕組みです。Spring はこれを多く使います。

詳しく: アノテーションとリフレクション →

仮想スレッド

OS ではなく JVM が切り替えを管理する、軽いスレッドです(Java 21 以降)。待っている間は、ほかの仮想スレッドに場所を譲ります。

詳しく: 1リクエスト1スレッドと仮想スレッド →

完全修飾名FQCN

パッケージ名とクラス名を . でつないだ、クラスの正式な名前です(例 com.example.demo.Hello)。.class の中では、他のクラスはこの名前で指されます。

詳しく: パッケージ・完全修飾名・import・クラスパス・クラスローダ →

機械語

CPU がそのまま実行できる命令です。Rust のコンパイラはこれを作りますが、javac が作るのは機械語ではなくバイトコードです。

詳しく: ソースが動くまで: javac と .class と JVM →

型引数

List<String> の String のように、< > の中に書く型です。実行時には、オブジェクトの側には残りません。

詳しく: アノテーションとリフレクション →

継承

あるクラスを元にして、別のクラスを作ることです(extends)。元のクラスのメソッドを受け継ぎ、上書きもできます。pom.xml の親子にも使う語です。

詳しく: AOP プロキシと自己呼び出し →

検査例外

メソッドが投げうることを throws で宣言するよう、コンパイラが求める例外です。RuntimeException と Error の仲間以外がこれです。

詳しく: @Transactional はプロキシとスレッドでできている →

自己呼び出し

オブジェクトが、自分のメソッドの中から this で自分の別のメソッドを呼ぶことです。プロキシを通らないので、挟んだ処理は走りません。

詳しく: AOP プロキシと自己呼び出し →

単純名

パッケージ名を付けない、クラスだけの短い名前です(例 Hello)。import を書くと、ほかのパッケージのクラスもこの名前で書けます。

詳しく: パッケージ・完全修飾名・import・クラスパス・クラスローダ →

抽象クラス

それだけでは new できない、未完成のクラスです。継承して、足りないメソッドを書いたクラスを作って使います。

詳しく: 動的プロキシ →

動的プロキシJDK の動的プロキシ

指定したインターフェースを実装するクラスを、実行時に作る JDK の仕組みです。メソッドの呼び出しの前後に、処理を挟むのに使います。

詳しく: 動的プロキシ →

標準ライブラリJDK 標準のクラス / JDK 自身のクラス / 標準クラス

JDK に最初から入っているクラスの集まりです。String などがこれで、依存として足さなくても使えます。

詳しく: Java・JDK・JRE・JVM: 何を入れて、何が動くのか →

例外

処理を続けられないことを、呼び出し元へ知らせる仕組みです。誰も捕まえなければ、そのスレッドの処理は止まります。

詳しく: @Transactional はプロキシとスレッドでできている →

ビルドと依存

<ivy:retrieve/>ivy:retrieve / retrieve / resolve

Ivy の task です。ivy.xml の依存を解決してダウンロードし(resolve)、プロジェクトのフォルダへコピーします(retrieve)。

詳しく: Ant: 依存の扱いと、古いプロジェクトの読み方 →

AntApache Ant

手順をすべて build.xml に自分で書く、古くからのビルドツールです。置き場所の決まりは無く、依存ライブラリも取ってきません。

詳しく: Ant: build.xml を1行ずつ読む →

assemblecheck

Gradle の、束ねるだけのタスクです。assemble は JAR を作るタスクを、check はテストを、build はその両方を束ね、自分では何もしません。

詳しく: Gradle: タスクの依存関係と、変更が無ければ飛ばす仕組み →

basedir

Ant の project の属性で、パスの計算の基準になるフォルダです。省略すると build.xml のあるフォルダになります。

詳しく: Ant: build.xml を1行ずつ読む →

bootJar

Spring Boot の Gradle プラグインが足すタスクです。依存を入れた実行可能 JAR を作ります。Maven の repackage に当たります。

詳しく: Gradle: タスクの依存関係と、変更が無ければ飛ばす仕組み →

classpathrefpathelement

Ant の javac などの属性で、<path id=…> で定義したクラスパスを id で指して使います。pathelement は path の中の1つの場所です。

詳しく: Ant: build.xml を1行ずつ読む →

cleanant clean

Maven と Gradle では、前回の出力フォルダを消す作業の名前です。Ant では、同じ目的の target に各自が付ける名前によく使われます。

詳しく: Maven と Gradle がビルドでやっていること →

compileJavaprocessResources / compileTestJava / processTestResources / testClasses

Gradle の java プラグインが足すタスクの名前です。compileJava はソースをコンパイルし、processResources はリソースを写します。

詳しく: Gradle: タスクの依存関係と、変更が無ければ飛ばす仕組み →

confconf="default"

Ivy の dependency の属性で、依存先のどの構成を取るかの指定です。conf="default" を書かないと、その POM がテスト用に書いた依存まで取ります。

詳しく: Ant: 依存の扱いと、古いプロジェクトの読み方 →

configuration

Gradle で、依存を目的ごとに分ける区分の呼び名です(implementation など)。Maven のスコープに当たります。英文では一般に「設定」の意味でも出ます。

詳しく: Gradle: build.gradle を1行ずつ読む →

default

Ant では引数なしの ant で動く target を決める属性、Maven では既定のライフサイクルの名前です。英文の by default は「既定で」の意味です。

詳しく: Ant: build.xml を1行ずつ読む →

default-cli(default-cli)

フェーズを経ずにゴールを直接呼んだときの実行の名前で、ログの --- の行に (default-cli) と出ます。

詳しく: Maven: ライフサイクル・フェーズ・ゴール・プラグインの関係 →

dependencies

pom.xml と build.gradle で依存を書く欄の名前です。Gradle では依存の木を出すタスク名、Boot の層分けでは依存の層の名前でもあります。

詳しく: Gradle: build.gradle を1行ずつ読む →

dependency:analyzemvn dependency:analyze

Maven の dependency プラグインのゴールで、コードが実際に使っているクラスと pom の宣言を突き合わせます。先に test-compile まで実行します。

詳しく: Maven: 依存解決(推移依存・nearest wins・dependencyManagement・exclusions・スコープ) →

dependency:build-classpathmvn dependency:build-classpath

mvn dependency:build-classpath は、依存の JAR の場所を、クラスパスの形の1行にして書き出します。

詳しく: mvn・./mvnw・ant・./gradlew: ビルドのコマンド →

dependency:treemvn dependency:tree

mvn dependency:tree は、依存がさらに何に依存しているかを、木の形で表示します。Maven の dependency プラグインのゴールです。

詳しく: Maven: 依存解決(推移依存・nearest wins・dependencyManagement・exclusions・スコープ) →

dependencyInsight

Gradle のタスクで、ある依存を誰が要求しているかを、根元までさかのぼって表示します。

詳しく: Gradle: build.gradle を1行ずつ読む →

dependencyManagement

pom.xml の欄の名前です。依存を足すのではなく、依存を使うときの版だけを、先にまとめて決めておきます。

詳しく: Maven: 依存解決(推移依存・nearest wins・dependencyManagement・exclusions・スコープ) →

depends

Ant の target に書く属性で、先に済ませる target を指定します。Ant はこれをたどって、実行の順番を決めます。

詳しく: Ant: build.xml を1行ずつ読む →

dependsOn

Gradle のスクリプトで、タスクの依存関係を明示する書き方です。書かなくても、出力を使う関係から Gradle が推測します。

詳しく: Gradle: タスクの依存関係と、変更が無ければ飛ばす仕組み →

description

Ant では target の説明文の属性で、ant -p に出ます。付いた target が1つでもあると、無いものは一覧から外れます。pom.xml にも同名の欄があります。

詳しく: Ant: build.xml を1行ずつ読む →

effective-pomhelp:effective-pom / effective POM

親からの継承や既定をすべて合成した、実際に使われる POM です。mvn help:effective-pom で出力できます。

詳しく: Maven: pom.xml を1行ずつ読む →

exclusionsexclusion

pom.xml の依存に書いて、その依存が連れてくる推移依存の一部を外す指定です。使う側が枝を切ります。

詳しく: Maven: 依存解決(推移依存・nearest wins・dependencyManagement・exclusions・スコープ) →

fileset

Ant で、フォルダの中からパターンで選んだファイルの集まりです。dir="lib" includes="*.jar" なら lib/ 直下の JAR 全部です。

詳しく: Ant: build.xml を1行ずつ読む →

FROM-CACHE

Gradle の出力に出る印で、タスクを実行せず、ビルドキャッシュに保存してあった前回の出力を取り出した、という意味です。

詳しく: Gradle: タスクの依存関係と、変更が無ければ飛ばす仕組み →

Gradle

Maven と同じ置き場所と公開の置き場を使い、設定を build.gradle にスクリプトで書くビルドツールです。

近いもの: npm(ただし JDK には入っていない)

詳しく: Gradle: build.gradle を1行ずつ読む →

group

Gradle の座標の1つで、Maven の groupId に当たります。version と並べて書き、名前は settings.gradle 側にあります。

詳しく: Gradle: build.gradle を1行ずつ読む →

help:describe

Maven の help プラグインのゴールで、プラグインのゴール一覧やフェーズとゴールの対応表を出します。-Dcmd で出る版は、親 POM ではなく組み込みの既定でした。

詳しく: Maven: ライフサイクル・フェーズ・ゴール・プラグインの関係 →

implementationtestImplementation

Gradle の依存の区分で、implementation はコンパイルと実行、testImplementation はテスト用です。英文では一般に「実装」の意味です。

詳しく: Gradle: build.gradle を1行ずつ読む →

Ivy

Ant と組み合わせて依存ライブラリを取る道具で、既定の取得先は Maven Central です。ivy.xml に依存を書き、ivy:retrieve で揃えます。

詳しく: Ant: 依存の扱いと、古いプロジェクトの読み方 →

JARJava Archive / jar file

Java Archive の略です。.class や設定ファイルを1つにまとめた zip 形式のファイルで、ライブラリやアプリを配る単位です。

近いもの: npm パッケージを1つにまとめたファイル(ただし展開せずに使い、依存の一覧を持たない)

詳しく: JAR・WAR・マニフェスト・実行可能 JAR →

JAR hell

クラスパスの弱点(足りない JAR に使うまで気づけない、同じクラスが複数の JAR にある)を指す通称です。仕様の用語ではありません。

詳しく: この設計の代償と、後の言語がしたこと →

java プラグイン

Gradle 同梱のプラグインで、compileJava・jar・test などのタスクと、src/main/java などの Maven 流の規約を足します。

詳しく: Gradle: build.gradle を1行ずつ読む →

java.versionmaven.compiler.release

Boot の親 POM の properties の名前です。親が maven.compiler.release をこの値にするので、ここでコンパイル対象の版が変わります。

詳しく: Maven: pom.xml を1行ずつ読む →

junitlauncher

Ant 1.10 系の task で、JUnit 5 以降(JUnit Platform)のテストを実行します。済んでいるかの判定が無く、この実験では2回目も走りました。

詳しく: Ant: build.xml を1行ずつ読む →

M2

版の後ろに付く印で、マイルストーン(正式版より前の、途中の公開版)の2番目という意味です。SNAPSHOT と同じく確定前の版です。

詳しく: JDBC・JPA・Hibernate と、略語の早見表 →

Maven

置き場所と手順を規約で決めてあるビルドツールです。pom.xml に依存を書くと、公開の置き場から JAR を取ってきます。

近いもの: npm(ただし JDK には入っていない)

詳しく: Maven: pom.xml を1行ずつ読む →

Maven CentralmavenCentral

Maven が既定で依存を取りに行く、公開の置き場です。コンパイル済みの JAR と POM が置かれ、Gradle からも指定して使えます。

近いもの: npm の公開レジストリ

詳しく: Ant・Maven・Gradle・pom.xml・依存・Maven Central →

modelVersion

pom.xml の書式の版を書く要素です。Maven 3 系で使えるのは 4.0.0 だけで、変えると読み込みの段階で止まります。

詳しく: Maven: pom.xml を1行ずつ読む →

mvn installinstall:install

install フェーズ(verify の次)まで進める形で、できた JAR と POM をローカルリポジトリに置きます。ほかのプロジェクトから依存として使えます。

詳しく: Maven: ライフサイクル・フェーズ・ゴール・プラグインの関係 →

mvn package./mvnw package / mvn clean package / ./mvnw clean package

Maven に「package までの段階(フェーズ)を順に進めよ」と指示する形です。コンパイル、テスト、JAR 作りが1回で進みます。

近いもの: nest build

詳しく: mvn・./mvnw・ant・./gradlew: ビルドのコマンド →

mvn validate

Maven の最初のフェーズ(validate)だけを進める形です。ビルドはほとんど何もしないので、Maven の起動にかかる時間の目安になります。

詳しく: Maven: ライフサイクル・フェーズ・ゴール・プラグインの関係 →

native:compile

native image を作る Maven のゴールです。GraalVM の native-image を呼び出して、実行ファイルを作ります。

詳しく: 起動を速くする方向と失うもの →

nearest winsnearest definition

同じライブラリの別の版に複数の経路で出会ったとき、Maven は依存の木で自分に近い方の版を選びます。同じ深さなら先に書いた方です。

詳しく: Maven: 依存解決(推移依存・nearest wins・dependencyManagement・exclusions・スコープ) →

NO-SOURCE

Gradle の出力に出る印で、そのタスクの入力になるファイルが1つも無いので何もしなかった、という意味です。

詳しく: Gradle: タスクの依存関係と、変更が無ければ飛ばす仕組み →

optional

依存を提供する側が付ける印で、その依存は使う側には推移してきません(原文の言い方では既定で除外)。

詳しく: Maven: 依存解決(推移依存・nearest wins・dependencyManagement・exclusions・スコープ) →

packaging

pom.xml の <packaging> で、成果物の種類(jar か war など)を決めます。書かなければ jar です。

詳しく: Maven: pom.xml を1行ずつ読む →

project

Ant の build.xml の一番外側の要素で、default と basedir を属性に持ちます。pom.xml の外側も <project> で、英文では一般語です。

詳しく: Ant: build.xml を1行ずつ読む →

properties

pom.xml の <properties> の欄で、${名前} で参照する値を置きます。Gradle では設定値を一覧するタスク名、Boot では設定値の意味でも出ます。

詳しく: Maven: pom.xml を1行ずつ読む →

property

Ant の名前と値の対です。${name} と書いた所に値が入ります。一度決めると変えられず、-D で先に与えると build.xml 側の値は無視されます。

詳しく: Ant: build.xml を1行ずつ読む →

provided

Maven のスコープの1つです。コンパイルには使うが、置き先のサーバが同じ JAR を持っているので成果物には入れない、という指定です。

詳しく: Ant・Maven・Gradle・pom.xml・依存・Maven Central →

relativePath

pom.xml の <parent> の中の要素で、親 POM を先に探す場所です。空にすると、手元の親フォルダを探さずにリポジトリから取ります。

詳しく: Maven: pom.xml を1行ずつ読む →

RELEASE2.3.12.RELEASE / .RELEASE

Spring が以前、正式版の版番号の後ろに付けていた印です(例 2.3.12.RELEASE)。今の 4.1.1 のような印なしの版と同じ意味です。

詳しく: JDBC・JPA・Hibernate と、略語の早見表 →

repackagespring-boot:repackage

Spring Boot の Maven プラグインのゴールです。Maven が作った普通の JAR を、依存と起動用のローダを入れた実行可能 JAR に作り替えます。

詳しく: Maven と Gradle がビルドでやっていること →

repositories

build.gradle の欄で、依存の取得元を書きます。mavenCentral() なら Maven Central です。pom.xml にも同名の欄があります。

詳しく: Gradle: build.gradle を1行ずつ読む →

runtimeClasspathcompileClasspath / testRuntimeClasspath

Gradle が区分から組み立てるクラスパスの名前です。runtimeClasspath は実行時用で、その JAR が bootJar の BOOT-INF/lib に入ります。

詳しく: Gradle: build.gradle を1行ずつ読む →

runtimeOnlytestRuntimeOnly / developmentOnly

Gradle の依存の区分で、runtimeOnly は実行時だけ、testRuntimeOnly はテストの実行時だけ、developmentOnly は開発中だけに使います。

詳しく: Gradle: build.gradle を1行ずつ読む →

SNAPSHOT

開発中でまだ確定していない版に付く印です。0.0.1-SNAPSHOT のように、版の後ろに付きます。

詳しく: Ant・Maven・Gradle・pom.xml・依存・Maven Central →

spring-boot-dependencies

Spring Boot が配っている BOM の名前です。Tomcat など、組み合わせる依存の版がまとめて書かれています。

詳しく: スターターと BOM →

spring-boot-starter-parent

Spring Boot の雛形の pom.xml が親に指定している POM です。依存の版やプラグインの設定を、ここから引き継ぎます。

詳しく: Maven: pom.xml を1行ずつ読む →

spring-boot:process-aot

Spring Boot の Maven プラグインのゴールです。ビルドのときに Spring AOT を実行し、Bean 定義のコードなどを生成します。

詳しく: 起動を速くする方向と失うもの →

start.spring.io

Spring Boot のプロジェクトの雛形を作る公式サイトです。版と依存を選ぶと、pom.xml などの一式を zip で受け取れます。

近いもの: nest new

詳しく: 最小プロジェクトのファイル一覧 →

Super POM

すべての POM が暗黙に継いでいる、Maven 組み込みの土台の POM です。Maven Central の URL や src/main/java の既定はここにあります。

詳しく: Maven: pom.xml を1行ずつ読む →

surefiresurefire:test

Maven の、テストを実行するプラグインです。surefire:test というゴールが、別の JVM を起動してテストを走らせます。

詳しく: Maven: ライフサイクル・フェーズ・ゴール・プラグインの関係 →

targetターゲット

2つの意味があります。Ant では build.xml の中の手順のまとまり1つです。Maven(と Rust の Cargo)では、ビルドの出力を置くフォルダの名前です。

詳しく: Ant: build.xml を1行ずつ読む →

task

Ant の target の中に並べる、作業1つ分の部品です。シェルのコマンドではなく、Ant の中の Java のクラスです(javac や jar の task など)。

詳しく: Ant: build.xml を1行ずつ読む →

tasks.namedtasks.withType

Gradle のスクリプトで、既にあるタスクを選んで設定を足す書き方です。named は名前で、withType は型で選びます。

詳しく: Gradle: build.gradle を1行ずつ読む →

toolchain

build.gradle の java { toolchain } で、コンパイルや実行などに使う Java の版を指定します。このコースの雛形では 25 です。

詳しく: Gradle: build.gradle を1行ずつ読む →

UP-TO-DATE

Gradle の出力に出る印です。入力と出力の内容が前回と同じなので、そのタスクを実行せずに飛ばした、という意味です。更新時刻ではなく内容で判定します。

詳しく: Gradle: タスクの依存関係と、変更が無ければ飛ばす仕組み →

useJUnitPlatform

build.gradle の test タスクの設定で、JUnit Platform(JUnit 5)でテストを実行させる指定です。

詳しく: Gradle: build.gradle を1行ずつ読む →

クリーンビルド

前回の出力を消してから、全部を作り直すビルドです。mvn clean package や gradlew clean build がこれです。

詳しく: ビルドが遅いと言われる理由を測って分ける →

ゴール

Maven のプラグインが行う、実際の作業1つです。compiler:compile のように プラグイン名:ゴール名 で表し、フェーズに割り当てて動かすほか直接も呼べます。

詳しく: Maven: ライフサイクル・フェーズ・ゴール・プラグインの関係 →

コンテナイメージイメージ

アプリと、それを動かすのに要るファイル一式をまとめたものです。Docker などが、これを元にコンテナを起動します。

詳しく: コンテナイメージと3者の比較 →

スコープ

Maven では、依存をコンパイル・実行・テストのどこで使うかの区分です。Spring では、Bean をいくつ作るかの決まりです。npm のスコープとは別物です。

詳しく: Maven: 依存解決(推移依存・nearest wins・dependencyManagement・exclusions・スコープ) →

タスク

ひとまとまりの作業のことです。Ant と Gradle では、コンパイルする、JAR を作るといった、ビルドの手順の1単位をこう呼びます。

詳しく: Maven と Gradle がビルドでやっていること →

タスクグラフDAG

Gradle が実行の前に組み立てる、タスクどうしの依存関係のつながりです。閉路の無い有向グラフ(DAG)で、--dry-run はこれを一列に並べた順を出します。

詳しく: Gradle: タスクの依存関係と、変更が無ければ飛ばす仕組み →

デーモン

ビルドが終わっても残り、次のビルドで使い回される常駐の JVM です。Gradle が、起動の時間を省くために使います。

詳しく: Maven と Gradle がビルドでやっていること →

ビルドツール

ソースをコンパイルして JAR や WAR を作るまでの作業を、コマンド1つで順に実行する道具です。Ant、Maven、Gradle があります。

近いもの: npm と、package.json の scripts

詳しく: Ant・Maven・Gradle・pom.xml・依存・Maven Central →

フェーズ

Maven のビルドの段階です。compile、test、package などが決まった順に並んでいて、指定したフェーズまでを順に進めます。

詳しく: Maven: ライフサイクル・フェーズ・ゴール・プラグインの関係 →

プラグイン

ビルドツールに作業を足す部品です。Maven ではゴールを持つ JAR で、コンパイルも JAR 作りもこれが行います。Gradle では plugins { } で適用します。

詳しく: Maven: ライフサイクル・フェーズ・ゴール・プラグインの関係 →

ベースイメージ

コンテナイメージを作るときの土台にするイメージです。このコースでは、OS と JRE が入ったものを土台にしています。

詳しく: コンテナイメージと3者の比較 →

マニフェスト

JAR の中の META-INF/MANIFEST.MF という説明書きのファイルです。java -jar で最初に動かすクラスの名前などを書きます。

詳しく: JAR・WAR・マニフェスト・実行可能 JAR →

ライフサイクル

2つの意味があります。Maven では、フェーズを決まった順に並べた一連の流れです。Spring では、Bean が作られてから片付けられるまでの流れです。

詳しく: Maven: ライフサイクル・フェーズ・ゴール・プラグインの関係 →

ラッパー

決まった版の Maven や Gradle を取ってきて実行する、プロジェクト付属のスクリプトです。mvnw と gradlew がこれです。

詳しく: 最小プロジェクトのファイル一覧 →

リソース.properties

コード以外で、実行時に読まれるファイルのことです(.properties などの設定ファイル)。javac は触らないので、別にコピーして .class の隣に置きます。

詳しく: ビルドとは何か: 手作業なら何をするか →

リポジトリ

3つの意味があります。Maven では JAR の置き場、Spring Data ではデータの出し入れの窓口になる部品です。ソースを管理する Git のリポジトリの意味でも出ます。

詳しく: JDBC・JPA・Hibernate と、略語の早見表 →

レイヤレイヤ分け

コンテナイメージを作っている層です。イメージは層の積み重ねで、変わった層だけが作り直されます。本文では「層」とも書きます。

詳しく: コンテナイメージと3者の比較 →

ローカルリポジトリ

取ってきた依存の JAR を溜めておく、手元の置き場です。Maven では ~/.m2/repository で、全プロジェクトで共用されます。

詳しく: Maven は何を変えたか →

依存ライブラリ依存の JAR / 依存 JAR

自分のコードが使う、ほかの人が作ったライブラリです。Java では JAR の形で取ってきて、クラスパスに並べます。単に依存とも言います。

近いもの: package.json の dependencies

詳しく: Ant・Maven・Gradle・pom.xml・依存・Maven Central →

逆ドメイン

自分の持つドメイン名を逆順にして、パッケージ名の先頭に付ける慣習です(example.co.jp なら jp.co.example)。名前の重なりを避けるためです。

詳しく: パッケージはフォルダではなく名前 →

座標groupId / artifactId

依存ライブラリを指す、グループ名・名前・版の3つ組です(groupId、artifactId、version)。Maven はこれを手がかりに JAR を取ってきます。

詳しく: Maven は何を変えたか →

実行可能 JARfat JAR / uber JAR

自分のクラスと依存の JAR を全部入れ、java -jar だけで動くようにした JAR です。Spring Boot が作ります。fat JAR とも呼びます。

詳しく: 実行可能 JAR の中身 →

親 POMparent

pom.xml の <parent> で指定して、設定を継ぐ元になる POM です。Boot の雛形では spring-boot-starter-parent です。

詳しく: Maven: pom.xml を1行ずつ読む →

推移依存

使うライブラリが、さらに使っているライブラリのことです。Maven・Gradle と Ant+Ivy は自動でたどり、Ant だけなら人が調べて置きます。

詳しく: Maven: 依存解決(推移依存・nearest wins・dependencyManagement・exclusions・スコープ) →

成果物

ビルドの結果としてできあがり、配ったり動かしたりするファイルのことです。Java では JAR や WAR がこれに当たります。

詳しく: 成果物の単位: .class・JAR・WAR・実行可能 JAR →

Web

DispatcherServletdispatcherServlet

Spring MVC の入口になる Servlet です。すべての要求を受け取り、URL に合う自分のメソッドを探して呼びます。

詳しく: DispatcherServlet と組み込み Tomcat →

EAR

Enterprise ARchive の略です。複数の WAR などをまとめて、アプリケーションサーバに渡す形です。このコースでは名前だけ出ます。

詳しく: 成果物の単位: .class・JAR・WAR・実行可能 JAR →

HttpMessageConverterJacksonJsonHttpMessageConverter

Spring の部品で、Java のオブジェクトと、HTTP の本文(JSON など)を相互に変換します。戻り値を JSON にするのはこれです。

詳しく: DispatcherServlet と組み込み Tomcat →

HttpServletdoGet

HTTP 用の Servlet を書くときに継承する、Servlet API のクラスです。GET に応えるなら、doGet というメソッドを書きます。

詳しく: Servlet・WAR・アプリケーションサーバ →

Jackson

Java のオブジェクトと JSON を相互に変換するライブラリです。Spring Boot の Web のスターターに入っています。

詳しく: DispatcherServlet と組み込み Tomcat →

jakartajakarta.*

Jakarta EE の API のパッケージ名の先頭です。Jakarta EE 9 で、以前の javax から変わりました。

詳しく: Spring Boot の登場 →

Jakarta EEJava EE / J2EE

Servlet など、サーバ側の API をまとめた規格群です。旧称は Java EE、その前は J2EE です。JDK(Java SE)とは別の規格です。

詳しく: Servlet・Tomcat・Servlet コンテナ・Jakarta EE →

javax

Jakarta EE の API が以前使っていたパッケージ名の先頭です。JDK に入っている javax.sql などは、今も javax のままです。

詳しく: Spring Boot の登場 →

RequestMappingHandlerAdapter

Spring MVC の部品で、URL に対応する自分のメソッド(ハンドラ)を呼び出す係です。引数の用意や、戻り値の変換も受け持ちます。

詳しく: DispatcherServlet と組み込み Tomcat →

Servletサーブレット

HTTP の要求を受けて応答を返す、Java のクラスの決まった形です。Tomcat などのサーバから呼ばれます。main はありません。

近いもの: Express のハンドラ(ただし関数ではなくクラス)

詳しく: Servlet・WAR・アプリケーションサーバ →

Servlet コンテナサーブレットコンテナ

Servlet を載せて動かすサーバです。ポートを開き、HTTP を解釈し、URL に対応する Servlet を呼びます。Tomcat がその1つです。

近いもの: Node の http サーバ(役割だけ)

詳しく: Servlet・WAR・アプリケーションサーバ →

Tomcat組み込み Tomcat / 組み込みの Tomcat

HTTP を受け付けるサーバ(Servlet コンテナ)の1つで、それ自体が Java のプログラムです。Spring Boot では、アプリの中に入って動きます。

近いもの: Node の http サーバ(Express ではない)

詳しく: DispatcherServlet と組み込み Tomcat →

url-pattern

web.xml の中の要素で、どの URL をどの Servlet に渡すかを書きます。

詳しく: Ant で Spring の WAR を作る →

WARWeb ARchive

Web ARchive の略です。Web アプリを Tomcat などのサーバに渡すための zip 形式のファイルで、ふつうは main を持たず、サーバに置いて動かします。

詳しく: Servlet・WAR・アプリケーションサーバ →

アプリケーションサーバ

このコースでは、Jakarta EE の規格を広く実装したサーバ製品の意味で使います。Servlet コンテナとの厳密な境目は、確かめられていません。

詳しく: Servlet・WAR・アプリケーションサーバ →

コンテキストパス

1つのサーバに置いた Web アプリごとに付く、URL の先頭の部分です。Tomcat に WAR を置くと、WAR のファイル名から決まります。

詳しく: 成果物の単位: .class・JAR・WAR・実行可能 JAR →

セッション BeanBean クラス

EJB の部品の種類の1つです。EJB 2.1 では、Bean クラスに加えて、インターフェース2つと XML の記述が必要でした。Spring の Bean とは別物です。

詳しく: EJB が要求したものと Spring の登場 →

デプロイ

アプリを WAR などの形にしてサーバに置き、動く状態にすることです。配備とも言います。

詳しく: Servlet・Tomcat・Servlet コンテナ・Jakarta EE →

デプロイ記述子

アプリの中身をサーバに伝えるための XML の設定ファイルです。WAR の web.xml や、EJB の ejb-jar.xml がこれです。

詳しく: EJB が要求したものと Spring の登場 →

ハンドラ

呼び出しを受けて処理する関数やメソッドの呼び名です。動的プロキシでは呼び出しが届く先、Spring MVC では URL に対応する自分のメソッドを指します。

詳しく: DispatcherServlet と組み込み Tomcat →

フィルタ

Servlet に届く前の要求と、返す前の応答に、共通の処理を挟む Servlet API の部品です。文字コードの設定などに使われます。

詳しく: DispatcherServlet と組み込み Tomcat →

フロントコントローラ

すべての要求をまず1か所で受け、共通の手順を済ませてから、個々の処理へ振り分ける作りのことです。DispatcherServlet がこれです。

詳しく: DispatcherServlet と組み込み Tomcat →

作業スレッド

Tomcat が、リクエストを処理するために持っているスレッドです。既定では、1つのリクエストを1本が最初から最後まで受け持ちます。

詳しく: 1リクエスト1スレッドと仮想スレッド →

Spring

@Autowired

ここに依存を渡してほしい、とコンテナに伝えるアノテーションです。コンストラクタが1つだけなら、付けなくても渡されます。

詳しく: XML・アノテーション・JavaConfig →

@Bean

設定クラスのメソッドに付けるアノテーションです。そのメソッドが返したオブジェクトが、Bean として登録されます。

詳しく: XML・アノテーション・JavaConfig →

@Component

このクラスを Bean にする、という印のアノテーションです。コンポーネントスキャンが、これの付いたクラスを見つけて登録します。

詳しく: ApplicationContext と Bean 定義 →

@ConditionalOnClass

指定したクラスがクラスパスにあるときだけ、その設定を有効にするアノテーションです。自動構成が使います。

詳しく: 自動構成は候補を条件でふるいにかける →

@ConditionalOnMissingBean

同じ型の Bean がまだ無いときだけ、その Bean を登録するアノテーションです。自分で定義した Bean が優先される仕組みの元です。

詳しく: 自動構成は候補を条件でふるいにかける →

@Configuration

Bean の作り方を Java のコードで書いた設定クラスだ、という印のアノテーションです。中に @Bean のメソッドを書きます。

詳しく: XML・アノテーション・JavaConfig →

@GetMapping

メソッドに付けて、どの URL への GET の要求でそのメソッドを呼ぶかを指定するアノテーションです。

詳しく: DispatcherServlet と組み込み Tomcat →

@PostConstruct

依存が全部渡された後に、コンテナに呼んでもらう初期化のメソッドに付けるアノテーションです。

詳しく: Bean のライフサイクルとスコープ →

@PreDestroy

コンテナが Bean を片付ける前に、呼んでもらう後始末のメソッドに付けるアノテーションです。

詳しく: Bean のライフサイクルとスコープ →

@Repository

@Component の仲間です。Bean にする点は同じで、データの出し入れをするクラスの目印になり、DB の例外を Spring の例外に変換する対象にもなります。

詳しく: Spring が決めていること、決めていないこと →

@RequestScope

Bean のスコープを、1つの Web のリクエストの間だけにするアノテーションです。リクエストごとに別のインスタンスになります。

詳しく: Bean のライフサイクルとスコープ →

@RestController

Web の要求を受けるクラスに付けるアノテーションです。Bean になり、メソッドの戻り値が、そのまま応答の本文(JSON など)になります。

詳しく: DispatcherServlet と組み込み Tomcat →

@Scope

Bean のスコープを指定するアノテーションです。何も付けなければ singleton になります。

詳しく: Bean のライフサイクルとスコープ →

@Service

@Component の仲間のアノテーションです。Bean にする点は同じで、業務の処理を書くクラスだという目印を兼ねます。

詳しく: Spring が決めていること、決めていないこと →

@SpringBootApplication

Spring Boot の起動クラスに付けるアノテーションです。設定クラスの印、自動構成、コンポーネントスキャンの3つをまとめて有効にします。

詳しく: ApplicationContext と Bean 定義 →

@SpringBootTest

テストのクラスに付けるアノテーションです。テストのために、Spring のコンテナを実際に起動します。その分、時間がかかります。

詳しく: ビルドが遅いと言われる理由を測って分ける →

@Transactional

メソッドやクラスに付けるアノテーションです。メソッドの開始でトランザクションを始め、戻るときにコミットし、RuntimeException などでは巻き戻します。

詳しく: @Transactional はプロキシとスレッドでできている →

ApplicationContextコンテキスト

Spring の DI コンテナを表すインターフェースです。Bean を作って管理し、名前や型で取り出せます。

詳しく: ApplicationContext と Bean 定義 →

Bean

Spring のコンテナが作って管理しているオブジェクトです。JavaBeans や EJB の Bean とは別物です。

近いもの: NestJS のプロバイダのインスタンス

詳しく: ApplicationContext と Bean 定義 →

Bean 定義Bean の定義

どのクラスの Bean を、どう作って組み立てるかの情報です。コンテナは、これを集めてから Bean を作ります。

詳しく: ApplicationContext と Bean 定義 →

bootRun

Spring Boot の Gradle プラグインが足すタスクで、JAR を作らずにアプリをそのまま起動します。

詳しく: Gradle: build.gradle を1行ずつ読む →

CGLIB

対象のクラスを継承したサブクラスを実行時に作る、コード生成のライブラリです。Spring はこれでプロキシを作り、インターフェースの無いクラスにも使えます。

詳しく: AOP プロキシと自己呼び出し →

DI コンテナIoC コンテナ

オブジェクトを作り、それが必要とする相手をコンストラクタの引数などで渡す役です。IoC コンテナとも呼び、Spring では ApplicationContext です。

近いもの: NestJS の DI コンテナ

詳しく: DI コンテナを素の Java で作る →

Environment

Spring が、設定値をまとめて持っている入れ物です。引数・環境変数・設定ファイルなどの設定元を、順位を付けて重ねています。

詳しく: 設定の優先順位 →

exejar

spring-boot-antlib の task で、.class と依存の JAR から Spring Boot の実行可能 JAR を作ります。

詳しく: 3つの比較と Spring Boot との関係 →

io.spring.dependency-managementdependency-management

Gradle のプラグインの id で、Spring Boot の BOM を取り込みます。これがあるので依存の版を省けます。消すと解決が FAILED になりました。

詳しく: Gradle: build.gradle を1行ずつ読む →

JarLauncher起動用のローダ / Launcher

Spring Boot の実行可能 JAR で、最初に動く起動用のクラスです。入れ子の JAR を読める準備をしてから、自分の main を呼びます。

詳しく: 実行可能 JAR の中身 →

JavaConfig

Bean の配線を、XML ではなく Java のクラス(@Configuration と @Bean)で書くやり方の呼び名です。

詳しく: XML・アノテーション・JavaConfig →

Objenesis

コンストラクタを呼ばずにオブジェクトを作るための、小さな Java のライブラリです。Spring が、CGLIB のプロキシを作るのに使います。

詳しく: AOP プロキシと自己呼び出し →

org.springframework.boot

Spring Boot の Gradle プラグインの id で、bootJar などのタスクを足します。Maven では Boot の部品の groupId でもあります。

詳しく: Gradle: build.gradle を1行ずつ読む →

prototype

Bean のスコープの1つです。コンテナから取り出すたびに、新しいインスタンスが作られます。

詳しく: Bean のライフサイクルとスコープ →

refresh

コンテナが Bean 定義を読み、singleton の Bean を実際に作る処理です。Spring Boot では、内蔵の Tomcat もこの途中で起動します。

詳しく: SpringApplication.run がやること →

resolveMainClassName

Spring Boot の Gradle プラグインが足すタスクで、アプリの main を持つクラスの名前を探して記録します。bootJar の前に動きます。

詳しく: Gradle: タスクの依存関係と、変更が無ければ飛ばす仕組み →

RunnerCommandLineRunner / ApplicationRunner

起動の最後に呼ばれる、自分の処理を書くための Bean です。CommandLineRunner と ApplicationRunner の2種類があります。

詳しく: SpringApplication.run がやること →

singletonシングルトン

Bean の既定のスコープです。1つのコンテナの中で、1つの Bean 定義につきインスタンスを1つだけ作り、全員で共有します。

詳しく: Bean のライフサイクルとスコープ →

Spring

単独で言うときは、Spring Framework を土台にしたプロジェクト群の総称です。このコースでは Spring Framework と Spring Boot の両方です。

詳しく: Spring・Spring Framework・Spring Boot・Bean・DI コンテナ →

Spring AOP

メソッドの前後に共通の処理を挟む、Spring の仕組みです。対象の Bean を、代理のオブジェクト(プロキシ)に置き換えて実現します。

詳しく: AOP プロキシと自己呼び出し →

Spring AOT

Spring が、ビルドのときに Bean 定義のコードを前もって生成する仕組みです。JVM の機能である AOT キャッシュとは別物です。

詳しく: 起動を速くする方向と失うもの →

Spring BootBoot

Spring Framework の上に乗り、単独で起動できるアプリを少ない設定で作れるようにするものです。自動構成・スターター・内蔵サーバを足します。

詳しく: Spring Boot の登場 →

Spring Data JPA

JPA を使うリポジトリ(データの出し入れの窓口)を、少ないコードで書けるようにする Spring のプロジェクトです。

詳しく: JPA の永続化コンテキスト →

Spring Framework

Java のアプリを組み立てる土台のフレームワークです。DI コンテナと、Web・データアクセス・AOP などの機能を持ちます。

近いもの: NestJS 本体(役割だけ)

詳しく: Spring・Spring Framework・Spring Boot・Bean・DI コンテナ →

Spring MVCspring-webmvc

Servlet の API の上に作られた Web フレームワークで、Spring Framework の一部です。URL と自分のメソッドを対応づけます。

詳しく: DispatcherServlet と組み込み Tomcat →

spring-boot-antlibantlib / AntLib

Spring Boot が Ant 向けに配る部品(AntLib)で、exejar で実行可能 JAR を作ります。実行時依存の JAR と一緒に ant -lib で渡します。

詳しく: 3つの比較と Spring Boot との関係 →

spring-context

Spring Framework の JAR の1つで、DI コンテナ(ApplicationContext)を使うための入口になるものです。

詳しく: ツール無しで手でビルドする →

SpringApplication.run

Spring Boot のアプリを起動するメソッドです。main の中でこの1行を呼ぶと、コンテナを作り、必要なら Tomcat まで起動します。

詳しく: SpringApplication.run がやること →

アドバイス

AOP で、メソッドの前後に挟む共通の処理のことです。ログ出力や、トランザクションの開始と終了などがこれです。

詳しく: AOP プロキシと自己呼び出し →

コンテナ

3つの意味があります。Spring では Bean を作って管理する DI コンテナ、Web では Servlet を動かすサーバ、Docker では隔離して動かす環境です。

詳しく: ApplicationContext と Bean 定義 →

コンポーネントスキャン

パッケージの配下を走査して、@Component などの印が付いたクラスを見つけ、Bean として登録することです。

詳しく: ApplicationContext と Bean 定義 →

スターターspring-boot-starter-webmvc / starter-webmvc / spring-boot-starter-web / starter

ある用途に必要な依存をまとめた依存の記述です。名前は spring-boot-starter- で始まり、JAR はほぼ空です。NestJS のスターター(雛形)とは別物です。

詳しく: スターターと BOM →

プロキシ代理のオブジェクト

本物のオブジェクトの代わりに渡される、代理のオブジェクトです。呼び出しを受け、前後に処理を挟んでから本物へ取り次ぎます。

詳しく: AOP プロキシと自己呼び出し →

プロファイル

Spring で、環境ごとの設定を切り替えるための名前です。dev を有効にすると、application-dev.properties も読まれます。

詳しく: 設定の優先順位 →

起動クラスメインクラス

main を持ち、@SpringBootApplication を付けたクラスです。Spring Boot は、このクラスのパッケージとその配下から部品を探します。

近いもの: main.ts

詳しく: Spring が決めていること、決めていないこと →

自動構成

クラスパスにある JAR を見て、Spring Boot が Bean の設定を自動で足すことです。多くは、自分で同じ型の Bean を定義すると引っ込みます。

詳しく: 自動構成は候補を条件でふるいにかける →

条件評価レポート

自動構成の候補ごとに、条件が通ったか外れたかと、その理由を並べたログです。--debug を付けて起動すると出ます。

詳しく: 自動構成は候補を条件でふるいにかける →

設定元

設定値の出どころ1つ分のことです(引数、環境変数、設定ファイルなど)。Spring Boot は、順位の高い設定元の値を返します。

詳しく: 設定の優先順位 →

宣言的トランザクション

トランザクションの開始と確定を、コードに書かず、設定やアノテーションで指定する方式です。@Transactional がこれです。

詳しく: EJB が要求したものと Spring の登場 →

配線

どのクラスのオブジェクトを作り、誰に誰を渡すかを決めることです。このコースでの呼び方です。

詳しく: XML・アノテーション・JavaConfig →

データベース

DataSourcejavax.sql.DataSource

データベースへの接続を取り出す窓口になる、JDK のインターフェースです(javax.sql.DataSource)。

詳しく: JDBC・JPA・Hibernate と、略語の早見表 →

dirty checking変更検知

読み込んだエンティティが変わったかどうかを Hibernate が自分で調べ、変わったものだけ UPDATE を出す仕組みです。save を呼ぶ必要がありません。

詳しく: JPA の永続化コンテキスト →

EntityManager

永続化コンテキストを操作するための、JPA のインターフェースです。1つの EntityManager が、1つの永続化コンテキストに対応します。

詳しく: JPA の永続化コンテキスト →

H2

アプリに組み込んで使える小さなデータベースです。メモリの中だけで動かせるので、このコースの実験で使っています。

詳しく: JPA の永続化コンテキスト →

HibernateHibernate ORM

JPA の実装の1つです。オブジェクトの読み書きに合わせて、SQL を組み立ててデータベースに送ります。

近いもの: TypeORM / Prisma(ORM である、という点まで)

詳しく: JPA の永続化コンテキスト →

JDBC

Java から SQL でデータベースを使うための標準の API で、JDK に入っています。データベースごとのドライバは、別の JAR として足します。

近いもの: pg や mysql2 を直接使う層(たとえ)

詳しく: JDBC・JPA・Hibernate と、略語の早見表 →

JDBC ドライバ

JDBC の API を、個々のデータベース向けに実装した JAR です。使うデータベースに合わせて、依存に足します。

近いもの: pg や mysql2

詳しく: JDBC・JPA・Hibernate と、略語の早見表 →

JPAJakarta Persistence

オブジェクトと表の対応づけの標準仕様です。現在の正式名は Jakarta Persistence です。仕様なので、動かすには Hibernate などの実装が要ります。

詳しく: JPA の永続化コンテキスト →

LazyInitializationException

永続化コンテキストが閉じた後で、まだ読んでいない関連に触ったときに Hibernate が投げる例外です。

詳しく: JPA の永続化コンテキスト →

SimpleJpaRepository

Spring Data JPA が用意している、リポジトリの実装クラスです。findById や save の中身はここにあります。

詳しく: JPA の永続化コンテキスト →

エンティティ@Entity

データベースの表の1行に対応づけられるオブジェクト(と、そのクラス)です。クラスに @Entity を付けて示します。

詳しく: JPA の永続化コンテキスト →

トランザクションロールバック

データベースへの複数の変更を、全部行うか、全部取り消すかのどちらかにまとめる仕組みです。確定がコミット、取り消しがロールバックです。

詳しく: @Transactional はプロキシとスレッドでできている →

永続化コンテキスト

読み込んだエンティティを載せておく作業場です。同じ ID につきインスタンスは1つだけで、変更を覚えていて、後でまとめて書き戻します。

詳しく: JPA の永続化コンテキスト →

遅延ロードLAZY

関連するデータを最初は読まず、触ったときに初めて SQL を出して読みに行く設定です。JPA では LAZY と書きます。

詳しく: JPA の永続化コンテキスト →

略語

AOP

アスペクト指向プログラミング(Aspect-oriented Programming)の略です。メソッド呼び出しの前後に、共通の処理を挟む仕組みです。

詳しく: AOP プロキシと自己呼び出し →

AOT

ahead-of-time の略で、実行より前に済ませておく、という意味です。AOT キャッシュ、Spring AOT など、別々の仕組みの名前に付きます。

詳しく: 起動を速くする方向と失うもの →

BOM

bill of materials の略です。組み合わせて使える依存の版を、一覧にして配るための POM です。これのおかげで、依存の版を書かずに済みます。

詳しく: スターターと BOM →

CDS共有アーカイブ

class data sharing の略です。JDK のクラスを、すぐ使える形で1つのファイル(共有アーカイブ)にまとめておき、起動を速くする JVM の機能です。

詳しく: JVM の起動とクラスロード、JIT →

DAO

Data Access Object の略です。データベースの読み書きを受け持つオブジェクトを指す、慣習的な呼び名です。仕様の用語ではありません。

詳しく: JDBC・JPA・Hibernate と、略語の早見表 →

DI依存性の注入 / Dependency Injection

Dependency Injection(依存性の注入)の略です。オブジェクトが必要とする相手を、自分で作らず、外から渡してもらうことです。

詳しく: DI コンテナを素の Java で作る →

DSL

設定や記述のための専用の言語、という意味の略語です。Gradle には Groovy DSL(build.gradle)と Kotlin DSL(.kts)があります。

詳しく: Gradle: build.gradle を1行ずつ読む →

DTO

Data Transfer Object の略です。データを受け渡すためだけのオブジェクトを指す、慣習的な呼び名です。仕様の用語ではありません。

詳しく: JDBC・JPA・Hibernate と、略語の早見表 →

EJBEnterprise JavaBeans / Jakarta Enterprise Beans

Enterprise JavaBeans の略で、現行名は Jakarta Enterprise Beans です。サーバ側の業務部品を書くための仕様です。

詳しく: EJB が要求したものと Spring の登場 →

ELF

Executable and Linking Format の略で、Linux の実行ファイルの形式です。.class や JAR は、これではありません。

詳しく: ソースが動くまで: javac と .class と JVM →

IoC

Inversion of Control の略です。オブジェクトを作って組み立てる役を、自分のコードではなくコンテナが受け持つ、という考え方です。

詳しく: Spring・Spring Framework・Spring Boot・Bean・DI コンテナ →

JLS言語仕様

The Java Language Specification の略で、Java の言語仕様の文書です。このコースでは「言語仕様」と書いて引用しています。

詳しく: パッケージはフォルダではなく名前 →

JNDI

Java Naming and Directory Interface の略です。名前を手がかりに、設定値や接続先などを探して取り出すための、JDK に入っている API です。

詳しく: 設定の優先順位 →

JSPJavaServer Pages / Jakarta Pages

JavaServer Pages の略で、現行名は Jakarta Pages です。Web アプリ用のテンプレートの仕組みです。このコースでは名前だけ出ます。

詳しく: Servlet・Tomcat・Servlet コンテナ・Jakarta EE →

JSR

Java Specification Request の略です。Java の仕様を新しく作る・変えるときの申請と、その番号です(例 JSR 376 はモジュール)。

詳しく: この設計の代償と、後の言語がしたこと →

JVMS

The Java Virtual Machine Specification の略で、JVM の仕様の文書です。.class の形式や、クラスの読み込み方を定めています。

詳しく: JVM は何を読んで実行するのか →

LTSLong-Term Support

Long-Term Support の略です。配布元がその版を長く支援するという約束で、言語の性質ではありません。Oracle では 25 が最新の LTS です。

詳しく: Java・JDK・JRE・JVM: 何を入れて、何が動くのか →

ORM

object/relational mapping の略です。プログラムのオブジェクトと、データベースの表の行を対応づけることです。

詳しく: JDBC・JPA・Hibernate と、略語の早見表 →

PaaS

Platform as a Service の略です。アプリを載せれば、動かす環境の管理を引き受けてくれるクラウドの基盤です。

詳しく: Spring Boot の登場 →

POJOPlain Old Java Object

Plain Old Java Object の略です。決まった型を継承も実装もしていない、普通の Java のクラス(のオブジェクト)のことです。

詳しく: EJB が要求したものと Spring の登場 →

POMProject Object Model / pom

Project Object Model の略です。Maven のプロジェクトを XML で表したもので、それを収めたファイルが pom.xml です。

詳しく: Ant・Maven・Gradle・pom.xml・依存・Maven Central →

RSS

resident set size の略です。プロセスが実際に使っているメモリの量で、ps などで見られます。

詳しく: 起動を速くする方向と失うもの →

WTP

Web Tools Platform の略で、Eclipse で Web アプリを作るための追加の部品です。WebContent は、これが以前に既定で付けていたフォルダ名です。

詳しく: Ant: 依存の扱いと、古いプロジェクトの読み方 →

その他

aarch64arm64

64ビットの ARM という種類の CPU のことです。arm64 とも呼びます。このコースの実測は、この CPU の上の Linux で行っています。

詳しく: Java・JDK・JRE・JVM: 何を入れて、何が動くのか →

ASM

バイトコードを扱うライブラリです。Spring は写しを内蔵し、CGLIB で使います。Spring 7 は JDK 24 以降、クラス情報を JDK の API で読みます。

詳しく: 自動構成は候補を条件でふるいにかける →

commons-lang3

文字列の処理などの便利な機能を集めた、Apache のライブラリです。このコースでは、外部の依存の例として使っています。

詳しく: ツール無しで手でビルドする →

commons-logging

Apache のライブラリで、いくつかあるログの仕組みへの薄い橋渡しです。Spring Framework が内部で使うので、依存として必要になります。

詳しく: ツール無しで手でビルドする →

Docker

アプリを、コンテナという隔離された環境で動かす道具です。このコースの実測は、Docker の中の Linux で行っています。

詳しく: コンテナイメージと3者の比較 →

Eclipse

Java の統合開発環境(IDE)の1つです。プロジェクトの設定を .project や .classpath というファイルに持ちます。

詳しく: Ant: 依存の扱いと、古いプロジェクトの読み方 →

Groovy

JVM で動くスクリプト言語です。Gradle では build.gradle を書く言語で、もう1つの選択肢が Kotlin(build.gradle.kts)です。

詳しく: Gradle: build.gradle を1行ずつ読む →

Kotlin

Java と同じ JVM で動く別の言語です。コンパイルすると Java と同じ形式の .class になります。Gradle のビルドスクリプト(.kts)にも使えます。

詳しく: この設計の代償と、後の言語がしたこと →

Micrometer

アプリの動きを計測する(メトリクスを集める)ための、共通の窓口になるライブラリです。Spring Boot の依存に入っています。

詳しく: この設計の代償と、後の言語がしたこと →

npm パッケージ

npm で配られるライブラリの単位です。Java のパッケージ(クラスをまとめる名前空間)とは、同じ語の別の意味です。

詳しく: JAR・WAR・マニフェスト・実行可能 JAR →

ReactorReactor のコンテキスト

結果を待って止まらず、届いたときに続きを行う形(ノンブロッキング)の処理を組み立てる、JVM 向けのライブラリです。Spring のリアクティブな方式で使われます。

詳しく: @Transactional はプロキシとスレッドでできている →

slf4j

ログ出力の共通の窓口になるライブラリです(Simple Logging Facade for Java)。実際の出力先は、別のライブラリを選んで差し替えられます。

詳しく: この設計の代償と、後の言語がしたこと →

V8

JavaScript を実行するエンジンで、Node.js の中に入っています。Java で役割が近いのは JVM です。

詳しく: Java・JDK・JRE・JVM: 何を入れて、何が動くのか →

リアクティブ

処理の結果を待って止まるのではなく、結果が届いたときに続きを行う形で組み立てるやり方です。このコースでは名前だけ出ます。

詳しく: @Transactional はプロキシとスレッドでできている →

壁時計

実際に経過した時間のことです。CPU が働いていた時間(CPU 時間)と区別して言い、ダウンロードなどの待ち時間も含みます。

詳しく: ビルドが遅いと言われる理由を測って分ける →