コマンド
- /usr/bin/time
コマンドを1つ実行し、かかった時間や使ったメモリを報告する道具です。このコースのビルド時間の計測に使っています。
- ant
Ant を実行するコマンドです。実体は java を起動するスクリプトで、起動された Ant が今いるフォルダの build.xml を読み、手順を実行します。
- cargocargo build --release / cargo build / Cargo
Rust のビルドと依存の管理をするコマンドです。cargo build --release は、最適化した実行ファイルを作ります。Java の道具ではありません。
- curl
URL を指定してサーバとデータをやり取りするコマンドです。このコースでは、起動したアプリに HTTP リクエストを送るために使います。
- dockerdocker history / docker images
Docker を操作するコマンドです。docker history はイメージを作っている層の一覧を、docker images は手元のイメージの一覧を表示します。
- gradlew./gradlew
Gradle のラッパーです。決まった版の Gradle を取ってきて実行するスクリプトで、プロジェクトの中に置かれます。
- jar
.class などを1つの JAR にまとめたり、JAR の中身を一覧したりする JDK のコマンドです。Ant の task や Maven のゴールにも同じ名前があります。
- jarsigner
JAR に電子署名を付けたり、署名を確かめたりする JDK のコマンドです。このコースでは、JAR の正式名称の出典として名前だけ出ます。
- java
Java のプログラムを起動するコマンドです。JVM を立ち上げ、指定したクラスの main を呼びます。JDK にも JRE にも入っています。
近いもの: node
- javac
Java のコンパイラです。.java のソースを読んで .class を作るコマンドで、JDK に入っています(JRE にはありません)。
近いもの: tsc
- javap
.class の中身を人が読める形で表示するコマンドです。メソッドの一覧や、バイトコードの命令列を出せます。JDK に入っています。
- make
ソースから実行ファイルなどを作る手順を、順に実行する古くからのビルドの道具です。Ant の説明で、似たものとして名前が出ます。
- mvn
Maven を実行するコマンドです。mvn package のように、進めたい段階(フェーズ)やゴールの名前を後ろに書きます。JDK には入っていません。
- mvnw./mvnw / mvnw.cmd / .mvn/wrapper/
Maven のラッパーです。決まった版の Maven を取ってきて実行するスクリプトで、プロジェクトの中に置かれます。使い方は mvn と同じです。
- native-image
GraalVM のコマンドです。Java のアプリを、JVM なしで動く実行ファイル(native image)に前もってコンパイルします。
- ps
いま動いているプロセスの一覧を表示するコマンドです。このコースでは、Gradle のデーモンが残っていることとメモリ量を見るのに使います。
- strace
プログラムが OS に頼んだ処理(ファイルを開く、実行するなど)を1行ずつ記録する Linux の道具です。JDK のものではありません。
- treetree -a
フォルダの中身を、階層が分かる木の形で一覧するコマンドです。このコースでは、その出力(ファイル一覧)の意味でも使います。
- uname
OS の名前や種類を表示するコマンドです。ant の起動スクリプトが、動いている OS を調べるために呼んでいました。
- unzip
zip ファイルの中身を一覧したり取り出したりするコマンドです。JAR は zip 形式なので、JAR にもそのまま使えます。JDK のものではありません。
- xxd
ファイルの中身を16進数で表示するコマンドです。.class のようなバイナリの先頭を確かめるのに使います。JDK のものではありません。
コマンドのオプション・設定名
- --build-cacheビルドキャッシュ / ~/.gradle/caches/build-cache-1
Gradle のビルドキャッシュを使う指定です。キャッシュできるタスクは出力を保存し、clean の後でも入力が同じなら実行せずに戻します(FROM-CACHE)。
- --configuration-cache構成キャッシュ / configuration cache
Gradle の構成キャッシュを使う指定です。スクリプトを読んで実行順を決める段階の結果を保存し、変わっていなければ次回は再利用します。
- --console=plain
Gradle の出力を、色や進捗表示の無い素の文字だけにする指定です。ログを記録するために付けています。
- --create
jar コマンドで、新しく JAR を作る指定です。短い形は c です。--file で作る JAR の名前を、続けて入れるファイルを書きます。
- --debug
Spring Boot のアプリの起動引数です。付けると、自動構成の条件がどれも通ったか外れたかの一覧(条件評価レポート)がログに出ます。
- --dry-run-m / SKIPPED / all task actions disabled
Gradle に、タスクを実行せずに実行順だけを表示させる指定です。短い形は -m で、各行に SKIPPED が付きます。
- --file
jar コマンドで、扱う JAR のファイル名を指定します。短い形は f です。jar --create --file app.jar なら app.jar を作ります。
- --infoInput property
Gradle の表示を詳しくする指定です。タスクが再実行された理由(どの入力が変わったか)が出ます。
- --main-class
jar コマンドで、java -jar のときに最初に動かすクラスを指定します。JAR の中のマニフェストに Main-Class の行として書き込まれます。
- --no-daemon
Gradle に、常駐の JVM(デーモン)を残さずにビルドさせる指定です。この構成では、使い捨てのデーモンが別に起動されました。
- --print-bytecode
Node のデバッグ用のフラグです。V8 が JavaScript のソースから実行時に作ったバイトコードを表示します。Java の道具ではありません。
- --release
javac の --release 22 は、指定した版の Java 向けに .class を作る指定です。新しい JDK で、古い JVM でも読める .class を作れます。
- --spring.jpa.show-sql=true
Spring Boot のアプリの起動引数です。Hibernate がデータベースに送った SQL を、ログに表示させます。
- --statusgradlew --status
gradlew --status は、動いている(または最近止まった)Gradle のデーモンの一覧を表示します。
- --stop
gradlew --stop は、同じ版の Gradle のデーモンをすべて止めます。止めた後も --status には、STOPPED の行として表示されます。
- -cp-classpath / --class-path / java -cp
クラスパス(クラスを探しに行く場所の一覧)を指定するオプションです。java にも javac にもあり、フォルダか JAR を : で区切って並べます(Windows は ;)。
- -D
java・mvn・ant に共通の、-D名前=値 で値を渡す指定です。java ではシステムプロパティ、mvn ではユーザープロパティ、ant では property になります。
- -Djarmode=toolsspring-boot-jarmode-tools / jarmode-tools
Spring Boot の実行可能 JAR の展開や層の一覧を呼ぶ指定です。実体は、プラグインが JAR に足す spring-boot-jarmode-tools です。
- -DskipTests
mvn に付けると、テストのコンパイルはしますが、テストの実行を飛ばします。Maven のテスト用プラグイン(surefire)が読む指定です。
- -Dverbose
mvn dependency:tree に付けると、版の衝突や重複で省かれた枝も表示する指定です。
詳しく: Maven: 依存解決(推移依存・nearest wins・dependencyManagement・exclusions・スコープ) →
- -g:none
javac の -g:none は、行番号などデバッグ用の情報を .class に入れない指定です。例外の表示に行番号が出なくなります。
- -ntp
mvn の -ntp は、ダウンロードの進み具合の表示を出さない指定です。ログを短くするために付けています。
- -parameters
javac の -parameters は、メソッドやコンストラクタの引数の名前を .class に残す指定です。付けないと実行時には arg0 のような仮の名前になります。
- -Pnative
mvn の -P は、pom.xml に用意された設定の組(プロファイル)を有効にする指定です。-Pnative は native image 用の設定を有効にします。
- -Xint
java のオプションで、JIT コンパイラを使わず、バイトコードを1命令ずつ解釈する実行だけにします。速さの比較の実験で使います。
- -Xlog:class+load-Xlog
java のオプションで、JVM が読み込んだクラスと、その出どころを1行ずつログに出します。-Xlog は JVM のログ全般の指定です。
- -Xshare:off
java のオプションで、JDK のクラスをまとめて取り込む共有アーカイブ(CDS)を使わないようにします。実測では、起動にかかる時間が延びました。
- -XX:AOTCache
java のオプションで、使う AOT キャッシュのファイルを指定します。-XX: で始まるのは、JVM(HotSpot)の細かい動きを変える上級者向けの指定です。
- ./mvnw -Bmvn -B
mvn の -B は、対話なしで実行する指定です(出力の色も付きません)。ログを記録するときに使います。
- accept-count
Tomcat の設定で、作業スレッドが全部ふさがっているときに、接続を待たせておける行列の長さです。
- ant -d
ant の -d は、デバッグ用の詳しい表示です。property の名前と展開後の値が Setting project property: の行で見えます(-v では出ません)。
- ant -lib-lib
ant の -lib は、Ant に追加の JAR を読ませる指定です。Ivy のような外部の task を使うとき、その JAR のあるフォルダを渡します。
- ant -p
ant の -p は、build.xml の target のうち説明(description)付きのものの一覧と、既定の target を表示する指定です。ビルドは実行しません。
- ant -v
ant の -v は、Ant が内側でしていること(実行の順番や、コンパイラに渡した引数など)を詳しく表示する指定です。
- curl -i
curl の -i は、応答の本文の前に、ステータス行と応答ヘッダも表示させる指定です。
- help --task
./gradlew help --task タスク名 は、そのタスクを登録したプラグイン、型、説明を表示します。
- jar -C
jar コマンドの -C フォルダ は、そのフォルダへ移動してから、後ろに書いたファイルを JAR に入れる指定です。-C out . は out の中身全部です。
- jar tfjar --list --file / --list
JAR の中のファイル名を一覧する形です。t が一覧、f が続けてファイル名を書く、の意味で、jar --list --file と同じです。
- java -jar-jar
JAR を指定して起動する形です。JAR の中のマニフェストの Main-Class に書かれたクラスの main が呼ばれます。-cp の指定は無視されます。
近いもの: node dist/main.js
- java -version-version
入っている Java の版を表示して終わる指定です。JDK の版と日付、実行環境の名前、JVM の名前の3行が出ます。
- javac -d
javac の -d は、.class の出力先フォルダの指定です。javac -d out なら、out の下にパッケージ名どおりのフォルダを作って .class を置きます。
- javac -O
昔の javac にあった最適化の指定です。JDK 25 でも受け付けられますが、出力された .class は付けない場合と同じでした。
- javap -c
javap の -c は、メソッドごとに、バイトコードの命令列を表示する指定です。
- javap -p
javap の -p は、private のものも含めて、すべてのフィールドとメソッドを表示する指定です。付けないと private は出ません。
- javap -v
javap の -v は、.class の版の番号や定数の表、アノテーションの記録など、詳しい情報を足して表示する指定です。private のものは -p も付けないと出ません。
- mvn -o-o
mvn の -o は、オフラインで動く指定です。取得済みの依存だけでビルドし、無いものは取りに行かずにエラーになります。
詳しく: Maven: 依存解決(推移依存・nearest wins・dependencyManagement・exclusions・スコープ) →
- mvn -q./gradlew -q / mvn -X
mvn や ./gradlew の -q は、エラー以外を表示しない指定です。mvn の -X はデバッグ用の詳しい表示で、java の -X とは別物です。
- server.port
Spring Boot の設定の名前で、内蔵サーバが待ち受けるポート番号です。何も設定しないときは 8080 で待ち受けました。
- server.tomcat.threads.maxthreads.max
Spring Boot の設定の名前で、内蔵 Tomcat の作業スレッドの上限です。既定は 200 です。
- spring.aop.proxy-target-class
Spring Boot の設定の名前です。false にすると、インターフェースのある Bean の代理を、CGLIB ではなく JDK の動的プロキシで作ります。
- spring.jpa.open-in-viewopen-in-view
Spring Boot の設定の名前です。既定の true では、Web のリクエストの処理中ずっと永続化コンテキストを開いたままにします。
- spring.threads.virtual.enabled
Spring Boot の設定の名前です。true にすると、リクエストの処理を、Tomcat の作業スレッドではなく仮想スレッドが受け持ちます。
- 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 が付きます。
- -sources.jar-javadoc.jar
ライブラリの JAR と並んで配られる、ソースや Javadoc を入れた JAR です。動かすためには要りません。Ivy は conf を書かないとこれも取ってきます。
- .class
javac がソースから作るファイルです。中身は JVM 向けの命令列(バイトコード)で、クラスやインターフェース1つにつき1ファイルできます。
近いもの: tsc が出す .js(位置だけ。.js は人が読めるソース)
- .jar
JAR ファイルの拡張子です。.class や設定ファイルを1つにまとめた zip 形式のファイルです。
- .jar.originaldemo-0.0.1-SNAPSHOT.jar.original / .original
Spring Boot のプラグインが依存を入れて作り替える前の、元の JAR です。自分のクラスと設定だけが入っています。
- .java
Java のソースファイルの拡張子です。人が書くのはこれで、javac にかけると .class ができます。
近いもの: .ts
- .lastUpdated
ローカルリポジトリに残る、取れなかった記録のファイルです。存在しない座標を取りに行くと、JAR の代わりにこれが置かれます。
詳しく: Maven: 依存解決(推移依存・nearest wins・dependencyManagement・exclusions・スコープ) →
- .project.classpath
Eclipse がプロジェクトごとに作る設定ファイルです。.project はプロジェクトの説明を、.classpath はクラスパスと出力先を持ちます。
- ~/.gradle
Gradle が、取ってきた依存の JAR などを溜めておくフォルダです(ホームディレクトリの下)。
- ~/.ivy2~/.ivy2/cache
Ivy がホームディレクトリの下に作るフォルダで、取ってきたファイルは ~/.ivy2/cache に溜まります。2回目は、ここにあればダウンロードしません。
- ~/.m2~/.m2/repository / .m2/repository
Maven が、取ってきた依存の JAR を溜めておくフォルダです(ホームディレクトリの下)。全プロジェクトで共用されます。
- $JAVA_HOME$JAVA_HOME/release
JDK のインストール先のフォルダを指す、環境変数の名前です。その下の bin に java や javac が入っています。
- application-dev.properties
プロファイル dev を有効にしたときだけ読まれる、Spring Boot の設定ファイルです。同じ名前の設定は application.properties より優先されます。
- application.properties
Spring Boot の設定ファイルです。名前=値 の形で1行に1つ書きます。src/main/resources に置きます。
- application.yaml
Spring Boot の設定ファイルの、YAML で書く形です。application.properties と同じ役目です。
- 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 で書いた設定ファイルの、このコースの例での名前です。名前は自由に付けられます。
- BOOT-INF
Spring Boot の実行可能 JAR の中のフォルダの名前です。Spring Boot が決めたもので、自分の .class と依存の JAR が入ります。
- BOOT-INF/classesBOOT-INF/classes/
Spring Boot の実行可能 JAR の中で、自分のアプリの .class と設定ファイルが入るフォルダです。
- BOOT-INF/libBOOT-INF/lib/
Spring Boot の実行可能 JAR の中で、依存ライブラリの JAR が、JAR のまま入るフォルダです。
- build.gradle
Gradle のビルドファイルです。依存ライブラリやビルドの設定を、XML ではなくスクリプトで書きます。
- build.gradle.kts
Gradle のビルドスクリプトを Kotlin で書いたときのファイル名です。Groovy の build.gradle と同じ内容を書け、雛形では書き方が4か所違うだけでした。
- build.xml
Ant のビルドファイルです。フォルダを作る、コンパイルする、JAR にするといった手順を、XML で1つずつ書きます。
- build/
Gradle が既定でビルドの出力を置くフォルダです。Ant の例に出る build は、build.xml を書いた人が決めた名前です。
近いもの: dist/
- CAFEBABE
.class ファイルの先頭4バイトに必ず入っている値です(16進数で CA FE BA BE)。.class であることの印です。
- Class-Path
マニフェストの中の1行で、この JAR が使うほかの JAR の場所を書きます。書けるのは JAR の外にあるファイルの場所です。
- classes.jsa
JDK に付属する共有アーカイブ(CDS)のファイルです。よく使う標準クラスを、すぐ使える形でまとめてあります。
- CLASSPATH
クラスパスを渡すための環境変数の名前です。java に -cp を書いた場合は、この環境変数の設定は使われません。
- classpath.idx
Boot の Maven・Gradle プラグインが作る実行可能 JAR にある、JAR をクラスパスに並べる順のファイルです。exejar の JAR にはありませんでした。
- Dockerfile
コンテナイメージの作り方を、上から順に書いたファイルです。COPY の行は、ファイルをイメージの中へコピーします。
- ejb-jar.xmlMETA-INF/ejb-jar.xml
EJB の部品を記述する XML のファイル(デプロイ記述子)です。EJB 2.1 では必須でした。
- gradle-wrapper.propertiesdistributionUrl
gradlew が取ってくる Gradle の版を決めるファイルです。gradle/wrapper/ の下にあり、distributionUrl に配布物の URL があります。
- ivy.xml
Ivy に取らせる依存を書くファイルです。<dependency org name rev/> の1行が、Maven の座標(グループ名・名前・版)に当たります。
- layers.idxBOOT-INF/layers.idx
Spring Boot の実行可能 JAR に入っている、どのフォルダをコンテナイメージのどの層にするかの定義です。
- lib/
ライブラリの JAR を置くフォルダによく使われる名前です。Java の決まりではなく慣習で、Ant の例では人が、Tomcat では自分の JAR を置きます。
- lib/modules
JDK に入っている、標準ライブラリのクラスをまとめた1つのファイルです。共有アーカイブ(CDS)を切ると、String などはここから読まれます。
- libjvm.solib/server/libjvm.so
Linux の JDK に入っている、JVM の本体のファイルです。java コマンドがこれを読み込んで動きます。
- Main-Class
マニフェストの中の1行で、java -jar のときに最初に動かすクラスの名前を書きます。これが無い JAR は java -jar で起動できません。
- MANIFEST.MFMETA-INF/MANIFEST.MF / MANIFEST
JAR の中の META-INF に入っている説明書きのファイル(マニフェスト)です。Main-Class の行が java -jar の入口になります。
- META-INFMETA-INF/
JAR の中にある説明用のフォルダの名前です。マニフェスト(MANIFEST.MF)などが入ります。
- module-info.class
Java 9 のモジュールの宣言が入ったファイルです。JAR の直下にあると、その JAR はモジュールの宣言を持っています。
- pom.xml
Maven のプロジェクト定義ファイルです。プロジェクトの名前と版、依存ライブラリ、ビルドの設定を XML で書きます。
近いもの: package.json(役割だけ。scripts に当たる欄は無い)
- reachability-metadata.json
native image を作るときに渡す、リフレクションで使うクラスなどの一覧です。Spring AOT がビルド時に生成します。
- settings.gradlesettings.gradle.kts / rootProject.name
Gradle のビルドの入口になる設定ファイルです。rootProject.name でプロジェクト名を決め、成果物名の元になります。単一プロジェクトでは省略できます。
- src/main/javasrc/main/java/ / src / main / java / src、java、jp
Maven が決めた、Java のソースの置き場所です。Gradle も同じ場所を使います。Java の言語の規則ではありません。
- src/main/resourcessrc/main/resources/
Maven が決めた、設定ファイルなどコード以外のファイルの置き場所です。ビルドすると、中身が .class と同じ場所へコピーされます。
- src/main/webapp
WAR に入れる Web 用のファイルの置き場所として、Maven が決めた既定のフォルダです。Eclipse WTP も 2021 年から既定をこれに変えました。
- Start-Class
Spring Boot の実行可能 JAR のマニフェストにある行です。自分の main を持つクラスの名前が書かれ、Spring のローダがこれを呼びます。
- static/
Spring Boot で、そのまま配信したいファイル(画像や HTML など)を置くフォルダです。src/main/resources の下にあります。
- target/target/classes / target/classes/
Maven がビルドの出力をすべて置くフォルダです。コンパイル結果の .class や、できあがった JAR が入ります。
近いもの: dist/
- templates/
Spring Boot で、Thymeleaf などのテンプレートエンジンが画面の雛形を探しに行く既定のフォルダです。src/main/resources の下にあります。
- WEB-INFWEB-INF/
WAR の中の決まったフォルダの名前です。ここに置いたものがサーバに読まれ、ブラウザから直接は取り出せません。
- WEB-INF/classesWEB-INF/classes/
WAR の中で、自分のアプリの .class を置くと決まっているフォルダです。
- WEB-INF/libWEB-INF/lib/
WAR の中で、依存ライブラリの JAR を置くと決まっているフォルダです。ここの JAR は、サーバが読み込みます。
- web.xmlWEB-INF/web.xml
WAR の中の WEB-INF に置く設定ファイルです。URL と Servlet の対応など、サーバに何を起こしてもらうかを書きます。
- webappswebapps/
Tomcat のフォルダの1つです。ここに WAR を置くと、Tomcat が見つけて読み込みます(デプロイ)。
- WebContentWebContent/
Eclipse の Web プロジェクトが、Web 用のファイルを置くフォルダに以前の既定で付けていた名前です。2021年に既定は src/main/webapp に変わりました。
Java と JVM
- @Retention
アノテーションを定義するときに付けて、どこまで残すかを決めるものです。RUNTIME を指定したものだけが、実行時に読めます。
- AdoptiumEclipse Adoptium
Temurin という JDK を、OpenJDK のソースからビルドして無料で配っている団体です。配布元として、システムプロパティ java.vendor などに名前が出ます。
- AOT キャッシュ
JVM の機能です。学習用に1回走らせ、クラスの読み込み結果をファイルに残しておき、次からの起動を速くします(JDK 24 以降)。
- AtomicInteger
複数のスレッドから同時に足しても、数え落としが起きない整数のクラスです。JDK に入っています。
- Class.forName
クラスの名前を文字列で渡して、そのクラスの読み込みを頼むメソッドです。無ければ ClassNotFoundException になります。
- ClassNotFoundException
名前で頼んだクラスが、クラスパスのどこにも無かったときの例外です。JAR の入れ忘れや、名前の間違いで出ます。
- final
これ以上変えられないことを表す語です。final のクラスは継承できず、final のメソッドは上書きできず、final のフィールドは代入し直せません。
- GraalVM
JDK の一種で、Java のアプリを JVM なしの実行ファイルに前もってコンパイルする native-image という道具を持っています。
- HotSpot
OpenJDK に入っている JVM の実装の名前です。java -version の3行目に出る OpenJDK 64-Bit Server VM がこれです。
- import
Java の import は、ほかのパッケージのクラスを短い名前で書けるようにする宣言です。Node と違い、ファイルを読み込む命令ではありません。
- IOException
ファイルや通信など、入出力の失敗を表す例外です。検査例外の代表で、投げるメソッドには throws が要ります。
- Java SE
Java Platform, Standard Edition の略です。Java の言語と標準ライブラリを定めた規格で、JDK はその実装です。
- java.lang
String や Object など、Java の基本のクラスが入っているパッケージです。どのソースにも自動で import されるので、短い名前でそのまま使えます。
- JavaBeans
getter と setter の名前の付け方などを決めた、昔からある Java の部品の決まりです。Spring の Bean とは別物です。
- Javadoc
JDK やライブラリの、クラスやメソッドの公式の説明文書です。ソースの中のコメントから javadoc という道具で作られます。
- JDKJava Development Kit
Java Development Kit の略です。JVM と標準ライブラリに、javac などの開発用の道具を足した一式で、手元に入れるのはこれです。
近いもの: Node.js 本体と開発用の道具(tsc は別パッケージ)
- JITJIT コンパイラ
just-in-time の略です。JIT コンパイラは、よく通る箇所のバイトコードを、実行中に機械語へ置き換える JVM の部品です。
- JREJava Runtime Environment / Runtime Environment
Java Runtime Environment の略です。JVM と標準ライブラリと java コマンドなどの、動かすための一式で、javac は入っていません。
近いもの: Node.js 本体
- 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 本体ではなく、その中のエンジン)
- mainmain メソッド
JVM が最初に呼ぶメソッドの名前です。java で起動するときは、main を持つクラスを指定します。Node には、これに当たる決まりはありません。
- main スレッド
JVM が起動したときからあり、main メソッドを実行するスレッドです。ログのスレッドの欄には main と出ます。
- native image
Java のアプリを、JVM を持たない実行ファイルに前もってコンパイルしたものです。起動は速くなりますが、実行時にクラスを足せません。
- NoClassDefFoundError
コンパイルのときにはあったクラスが、実行時に見つからなかったときのエラーです。依存の JAR が足りないときに出ます。
- OpenJDK
JDK のソースを開発しているオープンソースのプロジェクトです。各社はこの共通のソースから JDK をビルドして配っています。
- Oracle JDK
Oracle が商用ライセンスで配っている JDK です。元になるソースは Temurin などと同じ OpenJDK です。
- packagepackage 宣言
Java では、ソースの先頭でクラスの属するパッケージを宣言する語です。Maven では、JAR などを作る段階(フェーズ)の名前でもあります。
- public
どこからでも使えることを表す語です。付けないクラスは、同じパッケージの中からだけ使えます。Boot では配信用のフォルダ名にも出ます。
- record
値をまとめて持つだけのクラスを、短く書くための Java の構文です。フィールドと、それを読むメソッドが自動で用意されます。
- RuntimeException
throws で宣言しなくても投げられる例外の、親になるクラスです。@Transactional が既定で巻き戻すのは、これと Error です。
- StackOverflowError
メソッドの呼び出しが深くなりすぎて、呼び出しを積む場所(スタック)が尽きたときのエラーです。
- static
クラスそのものに属し、オブジェクトが無くても使えることを表す語です。Spring Boot では、配信するファイルを置くフォルダの名前にも出ます。
- Temurin
Eclipse Adoptium が OpenJDK のソースからビルドして無料で配っている JDK の名前です。このコースの実測はこれで行っています。
- ThreadLocal
スレッドごとに別の値を持てる変数です。同じスレッドの中なら、引数で渡さなくてもどこからでも取り出せます。
- throws
メソッドの宣言に書いて、そのメソッドが投げうる例外を示す語です。検査例外を中で捕まえずに外へ投げるなら、これを書かないとコンパイルできません。
- URLClassLoader
フォルダや JAR の場所を URL で渡すと、そこからクラスを読み込む、JDK 標準のクラスローダです。
- アノテーション
クラスやメソッドに付ける @ で始まる印です。それ自体は何も実行せず、誰かが読んで初めて意味を持ちます。デコレータとは別物です。
- インターフェース
持つべきメソッドだけを決めた型です。クラスがそれを実装します。TypeScript と違い、コンパイル後の .class にも残り、実行時に読めます。
近いもの: TypeScript の interface(ただし実行時に消える)
- インタプリタ解釈実行
命令を1つずつ読んで、その場で実行する仕組みです。JVM は、読み込んだバイトコードをまずこの方法で実行します。
- オブジェクトインスタンス
クラスから new で作った実体です。インスタンスとも呼びます。フィールドの値は、オブジェクトごとに別々に持ちます。
- クラス
フィールド(データ)とメソッド(処理)をまとめた型の定義です。Java のコードは、クラス(またはインターフェースなどの型)の中に書きます。
近いもの: TypeScript の class
- クラスパス実行時クラスパス
JVM や javac が、クラスを探しに行く場所の一覧です。フォルダか JAR を並べます。何も指定しなければ、今いるフォルダです。
近いもの: node_modules をたどる探し方(役割だけ。こちらは起動時に決まる1本の一覧)
- クラスローダアプリケーションクラスローダ / AppClassLoader / ClassLoader
クラスを探して読み込む役の部品です。自分のクラスと JDK のクラスは、別のクラスローダが読み込みます。
- クラスロード
JVM が、クラスを探して読み込むことです。手元の JVM では、自分のクラスは、初めて使う時点で読み込まれました。
- コンストラクタ
new でオブジェクトを作るときに呼ばれる、初期化の処理です。Java ではクラスと同じ名前で書きます。
近いもの: TypeScript の constructor
- サブクラス親クラス
あるクラスを継承して作った、子のクラスです。元のクラス(親クラス)の型としても扱えます。
- システムプロパティ
JVM の中のどこからでも読める、名前と値の組です。java の起動時に -D名前=値 で渡せます。OS の環境変数とは別のものです。
- スタックトレース
例外が起きた時点で、どのメソッドがどのメソッドを呼んでいたかを、1行に1つ並べた表示です。上が最後に呼ばれた側です。
- スレッド
プログラムの中で同時に進む処理の流れです。Tomcat の既定では、1つのリクエストを1本のスレッドが最初から最後まで受け持ちます。
- スレッドプール固定プール
スレッドを何本か作っておき、仕事が来るたびに使い回す仕組みです。本数の上限が、同時に進められる仕事の数になります。
- セッターsetter / getter
フィールドに値を入れるための、setName のような名前のメソッドです。値を読む側は getter(getName など)と呼びます。
- バイトコード
.class の中身である、JVM 向けの命令列です。CPU がそのまま実行できる機械語ではなく、JVM が読んで実行します。
- パッケージ
クラスをまとめる名前空間です。com.example.demo のような名前で、ソースの先頭で宣言します。フォルダそのものでも、npm のパッケージでもありません。
- ヒープ
JVM が、new で作ったオブジェクトを置くメモリの領域です。大きさの上限は設定で変えられ、JVM のメモリ使用量を左右します。
- フィールド
クラスの中に宣言する変数で、オブジェクトが持つデータです。static を付けると、クラスに1つだけの変数になります。
- メソッド
クラスやインターフェースの中に書く、呼び出せる処理です。Java には、型の外に単独で置く関数はありません。
- モジュール
Maven では、pom.xml を1つ持つビルドの単位です。Java 9 では、JAR どうしの依存を宣言する仕組みです。Node や NestJS のモジュールとは別物です。
- ラムダ
その場で書く、名前の無い関数です。-> を使って (a, b) -> a + b のように書きます。
- リフレクション
実行中のプログラムが、クラスのメソッドやフィールド、付いている印を調べたり呼んだりできる Java の仕組みです。Spring はこれを多く使います。
- 仮想スレッド
OS ではなく JVM が切り替えを管理する、軽いスレッドです(Java 21 以降)。待っている間は、ほかの仮想スレッドに場所を譲ります。
- 完全修飾名FQCN
パッケージ名とクラス名を . でつないだ、クラスの正式な名前です(例 com.example.demo.Hello)。.class の中では、他のクラスはこの名前で指されます。
- 機械語
CPU がそのまま実行できる命令です。Rust のコンパイラはこれを作りますが、javac が作るのは機械語ではなくバイトコードです。
- 型引数
List<String> の String のように、< > の中に書く型です。実行時には、オブジェクトの側には残りません。
- 継承
あるクラスを元にして、別のクラスを作ることです(extends)。元のクラスのメソッドを受け継ぎ、上書きもできます。pom.xml の親子にも使う語です。
- 検査例外
メソッドが投げうることを throws で宣言するよう、コンパイラが求める例外です。RuntimeException と Error の仲間以外がこれです。
- 自己呼び出し
オブジェクトが、自分のメソッドの中から this で自分の別のメソッドを呼ぶことです。プロキシを通らないので、挟んだ処理は走りません。
- 単純名
パッケージ名を付けない、クラスだけの短い名前です(例 Hello)。import を書くと、ほかのパッケージのクラスもこの名前で書けます。
- 抽象クラス
それだけでは new できない、未完成のクラスです。継承して、足りないメソッドを書いたクラスを作って使います。
- 動的プロキシJDK の動的プロキシ
指定したインターフェースを実装するクラスを、実行時に作る JDK の仕組みです。メソッドの呼び出しの前後に、処理を挟むのに使います。
- 標準ライブラリJDK 標準のクラス / JDK 自身のクラス / 標準クラス
JDK に最初から入っているクラスの集まりです。String などがこれで、依存として足さなくても使えます。
- 例外
処理を続けられないことを、呼び出し元へ知らせる仕組みです。誰も捕まえなければ、そのスレッドの処理は止まります。
ビルドと依存
- <ivy:retrieve/>ivy:retrieve / retrieve / resolve
Ivy の task です。ivy.xml の依存を解決してダウンロードし(resolve)、プロジェクトのフォルダへコピーします(retrieve)。
- AntApache Ant
手順をすべて build.xml に自分で書く、古くからのビルドツールです。置き場所の決まりは無く、依存ライブラリも取ってきません。
- assemblecheck
Gradle の、束ねるだけのタスクです。assemble は JAR を作るタスクを、check はテストを、build はその両方を束ね、自分では何もしません。
- basedir
Ant の project の属性で、パスの計算の基準になるフォルダです。省略すると build.xml のあるフォルダになります。
- bootJar
Spring Boot の Gradle プラグインが足すタスクです。依存を入れた実行可能 JAR を作ります。Maven の repackage に当たります。
- classpathrefpathelement
Ant の javac などの属性で、<path id=…> で定義したクラスパスを id で指して使います。pathelement は path の中の1つの場所です。
- cleanant clean
Maven と Gradle では、前回の出力フォルダを消す作業の名前です。Ant では、同じ目的の target に各自が付ける名前によく使われます。
- compileJavaprocessResources / compileTestJava / processTestResources / testClasses
Gradle の java プラグインが足すタスクの名前です。compileJava はソースをコンパイルし、processResources はリソースを写します。
- confconf="default"
Ivy の dependency の属性で、依存先のどの構成を取るかの指定です。conf="default" を書かないと、その POM がテスト用に書いた依存まで取ります。
- configuration
Gradle で、依存を目的ごとに分ける区分の呼び名です(implementation など)。Maven のスコープに当たります。英文では一般に「設定」の意味でも出ます。
- default
Ant では引数なしの ant で動く target を決める属性、Maven では既定のライフサイクルの名前です。英文の by default は「既定で」の意味です。
- default-cli(default-cli)
フェーズを経ずにゴールを直接呼んだときの実行の名前で、ログの --- の行に (default-cli) と出ます。
- dependencies
pom.xml と build.gradle で依存を書く欄の名前です。Gradle では依存の木を出すタスク名、Boot の層分けでは依存の層の名前でもあります。
- 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行にして書き出します。
- dependency:treemvn dependency:tree
mvn dependency:tree は、依存がさらに何に依存しているかを、木の形で表示します。Maven の dependency プラグインのゴールです。
詳しく: Maven: 依存解決(推移依存・nearest wins・dependencyManagement・exclusions・スコープ) →
- dependencyInsight
Gradle のタスクで、ある依存を誰が要求しているかを、根元までさかのぼって表示します。
- dependencyManagement
pom.xml の欄の名前です。依存を足すのではなく、依存を使うときの版だけを、先にまとめて決めておきます。
詳しく: Maven: 依存解決(推移依存・nearest wins・dependencyManagement・exclusions・スコープ) →
- depends
Ant の target に書く属性で、先に済ませる target を指定します。Ant はこれをたどって、実行の順番を決めます。
- dependsOn
Gradle のスクリプトで、タスクの依存関係を明示する書き方です。書かなくても、出力を使う関係から Gradle が推測します。
- description
Ant では target の説明文の属性で、ant -p に出ます。付いた target が1つでもあると、無いものは一覧から外れます。pom.xml にも同名の欄があります。
- effective-pomhelp:effective-pom / effective POM
親からの継承や既定をすべて合成した、実際に使われる POM です。mvn help:effective-pom で出力できます。
- exclusionsexclusion
pom.xml の依存に書いて、その依存が連れてくる推移依存の一部を外す指定です。使う側が枝を切ります。
詳しく: Maven: 依存解決(推移依存・nearest wins・dependencyManagement・exclusions・スコープ) →
- fileset
Ant で、フォルダの中からパターンで選んだファイルの集まりです。dir="lib" includes="*.jar" なら lib/ 直下の JAR 全部です。
- FROM-CACHE
Gradle の出力に出る印で、タスクを実行せず、ビルドキャッシュに保存してあった前回の出力を取り出した、という意味です。
- Gradle
Maven と同じ置き場所と公開の置き場を使い、設定を build.gradle にスクリプトで書くビルドツールです。
近いもの: npm(ただし JDK には入っていない)
- group
Gradle の座標の1つで、Maven の groupId に当たります。version と並べて書き、名前は settings.gradle 側にあります。
- help:describe
Maven の help プラグインのゴールで、プラグインのゴール一覧やフェーズとゴールの対応表を出します。-Dcmd で出る版は、親 POM ではなく組み込みの既定でした。
- implementationtestImplementation
Gradle の依存の区分で、implementation はコンパイルと実行、testImplementation はテスト用です。英文では一般に「実装」の意味です。
- Ivy
Ant と組み合わせて依存ライブラリを取る道具で、既定の取得先は Maven Central です。ivy.xml に依存を書き、ivy:retrieve で揃えます。
- JARJava Archive / jar file
Java Archive の略です。.class や設定ファイルを1つにまとめた zip 形式のファイルで、ライブラリやアプリを配る単位です。
近いもの: npm パッケージを1つにまとめたファイル(ただし展開せずに使い、依存の一覧を持たない)
- JAR hell
クラスパスの弱点(足りない JAR に使うまで気づけない、同じクラスが複数の JAR にある)を指す通称です。仕様の用語ではありません。
- java プラグイン
Gradle 同梱のプラグインで、compileJava・jar・test などのタスクと、src/main/java などの Maven 流の規約を足します。
- java.versionmaven.compiler.release
Boot の親 POM の properties の名前です。親が maven.compiler.release をこの値にするので、ここでコンパイル対象の版が変わります。
- junitlauncher
Ant 1.10 系の task で、JUnit 5 以降(JUnit Platform)のテストを実行します。済んでいるかの判定が無く、この実験では2回目も走りました。
- M2
版の後ろに付く印で、マイルストーン(正式版より前の、途中の公開版)の2番目という意味です。SNAPSHOT と同じく確定前の版です。
- Maven
置き場所と手順を規約で決めてあるビルドツールです。pom.xml に依存を書くと、公開の置き場から JAR を取ってきます。
近いもの: npm(ただし JDK には入っていない)
- Maven CentralmavenCentral
Maven が既定で依存を取りに行く、公開の置き場です。コンパイル済みの JAR と POM が置かれ、Gradle からも指定して使えます。
近いもの: npm の公開レジストリ
- modelVersion
pom.xml の書式の版を書く要素です。Maven 3 系で使えるのは 4.0.0 だけで、変えると読み込みの段階で止まります。
- mvn installinstall:install
install フェーズ(verify の次)まで進める形で、できた JAR と POM をローカルリポジトリに置きます。ほかのプロジェクトから依存として使えます。
- mvn package./mvnw package / mvn clean package / ./mvnw clean package
Maven に「package までの段階(フェーズ)を順に進めよ」と指示する形です。コンパイル、テスト、JAR 作りが1回で進みます。
近いもの: nest build
- mvn validate
Maven の最初のフェーズ(validate)だけを進める形です。ビルドはほとんど何もしないので、Maven の起動にかかる時間の目安になります。
- native:compile
native image を作る Maven のゴールです。GraalVM の native-image を呼び出して、実行ファイルを作ります。
- nearest winsnearest definition
同じライブラリの別の版に複数の経路で出会ったとき、Maven は依存の木で自分に近い方の版を選びます。同じ深さなら先に書いた方です。
詳しく: Maven: 依存解決(推移依存・nearest wins・dependencyManagement・exclusions・スコープ) →
- NO-SOURCE
Gradle の出力に出る印で、そのタスクの入力になるファイルが1つも無いので何もしなかった、という意味です。
- optional
依存を提供する側が付ける印で、その依存は使う側には推移してきません(原文の言い方では既定で除外)。
詳しく: Maven: 依存解決(推移依存・nearest wins・dependencyManagement・exclusions・スコープ) →
- packaging
pom.xml の <packaging> で、成果物の種類(jar か war など)を決めます。書かなければ jar です。
- project
Ant の build.xml の一番外側の要素で、default と basedir を属性に持ちます。pom.xml の外側も <project> で、英文では一般語です。
- properties
pom.xml の <properties> の欄で、${名前} で参照する値を置きます。Gradle では設定値を一覧するタスク名、Boot では設定値の意味でも出ます。
- property
Ant の名前と値の対です。${name} と書いた所に値が入ります。一度決めると変えられず、-D で先に与えると build.xml 側の値は無視されます。
- provided
Maven のスコープの1つです。コンパイルには使うが、置き先のサーバが同じ JAR を持っているので成果物には入れない、という指定です。
- relativePath
pom.xml の <parent> の中の要素で、親 POM を先に探す場所です。空にすると、手元の親フォルダを探さずにリポジトリから取ります。
- RELEASE2.3.12.RELEASE / .RELEASE
Spring が以前、正式版の版番号の後ろに付けていた印です(例 2.3.12.RELEASE)。今の 4.1.1 のような印なしの版と同じ意味です。
- repackagespring-boot:repackage
Spring Boot の Maven プラグインのゴールです。Maven が作った普通の JAR を、依存と起動用のローダを入れた実行可能 JAR に作り替えます。
- repositories
build.gradle の欄で、依存の取得元を書きます。mavenCentral() なら Maven Central です。pom.xml にも同名の欄があります。
- runtimeClasspathcompileClasspath / testRuntimeClasspath
Gradle が区分から組み立てるクラスパスの名前です。runtimeClasspath は実行時用で、その JAR が bootJar の BOOT-INF/lib に入ります。
- runtimeOnlytestRuntimeOnly / developmentOnly
Gradle の依存の区分で、runtimeOnly は実行時だけ、testRuntimeOnly はテストの実行時だけ、developmentOnly は開発中だけに使います。
- SNAPSHOT
開発中でまだ確定していない版に付く印です。0.0.1-SNAPSHOT のように、版の後ろに付きます。
- spring-boot-dependencies
Spring Boot が配っている BOM の名前です。Tomcat など、組み合わせる依存の版がまとめて書かれています。
- spring-boot-starter-parent
Spring Boot の雛形の pom.xml が親に指定している POM です。依存の版やプラグインの設定を、ここから引き継ぎます。
- 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 の既定はここにあります。
- surefiresurefire:test
Maven の、テストを実行するプラグインです。surefire:test というゴールが、別の JVM を起動してテストを走らせます。
- targetターゲット
2つの意味があります。Ant では build.xml の中の手順のまとまり1つです。Maven(と Rust の Cargo)では、ビルドの出力を置くフォルダの名前です。
- task
Ant の target の中に並べる、作業1つ分の部品です。シェルのコマンドではなく、Ant の中の Java のクラスです(javac や jar の task など)。
- tasks.namedtasks.withType
Gradle のスクリプトで、既にあるタスクを選んで設定を足す書き方です。named は名前で、withType は型で選びます。
- toolchain
build.gradle の java { toolchain } で、コンパイルや実行などに使う Java の版を指定します。このコースの雛形では 25 です。
- UP-TO-DATE
Gradle の出力に出る印です。入力と出力の内容が前回と同じなので、そのタスクを実行せずに飛ばした、という意味です。更新時刻ではなく内容で判定します。
- useJUnitPlatform
build.gradle の test タスクの設定で、JUnit Platform(JUnit 5)でテストを実行させる指定です。
- クリーンビルド
前回の出力を消してから、全部を作り直すビルドです。mvn clean package や gradlew clean build がこれです。
- ゴール
Maven のプラグインが行う、実際の作業1つです。compiler:compile のように プラグイン名:ゴール名 で表し、フェーズに割り当てて動かすほか直接も呼べます。
- コンテナイメージイメージ
アプリと、それを動かすのに要るファイル一式をまとめたものです。Docker などが、これを元にコンテナを起動します。
- スコープ
Maven では、依存をコンパイル・実行・テストのどこで使うかの区分です。Spring では、Bean をいくつ作るかの決まりです。npm のスコープとは別物です。
詳しく: Maven: 依存解決(推移依存・nearest wins・dependencyManagement・exclusions・スコープ) →
- タスク
ひとまとまりの作業のことです。Ant と Gradle では、コンパイルする、JAR を作るといった、ビルドの手順の1単位をこう呼びます。
- タスクグラフDAG
Gradle が実行の前に組み立てる、タスクどうしの依存関係のつながりです。閉路の無い有向グラフ(DAG)で、--dry-run はこれを一列に並べた順を出します。
- デーモン
ビルドが終わっても残り、次のビルドで使い回される常駐の JVM です。Gradle が、起動の時間を省くために使います。
- ビルドツール
ソースをコンパイルして JAR や WAR を作るまでの作業を、コマンド1つで順に実行する道具です。Ant、Maven、Gradle があります。
近いもの: npm と、package.json の scripts
- フェーズ
Maven のビルドの段階です。compile、test、package などが決まった順に並んでいて、指定したフェーズまでを順に進めます。
- プラグイン
ビルドツールに作業を足す部品です。Maven ではゴールを持つ JAR で、コンパイルも JAR 作りもこれが行います。Gradle では plugins { } で適用します。
- ベースイメージ
コンテナイメージを作るときの土台にするイメージです。このコースでは、OS と JRE が入ったものを土台にしています。
- マニフェスト
JAR の中の META-INF/MANIFEST.MF という説明書きのファイルです。java -jar で最初に動かすクラスの名前などを書きます。
- ライフサイクル
2つの意味があります。Maven では、フェーズを決まった順に並べた一連の流れです。Spring では、Bean が作られてから片付けられるまでの流れです。
- ラッパー
決まった版の Maven や Gradle を取ってきて実行する、プロジェクト付属のスクリプトです。mvnw と gradlew がこれです。
- リソース.properties
コード以外で、実行時に読まれるファイルのことです(.properties などの設定ファイル)。javac は触らないので、別にコピーして .class の隣に置きます。
- リポジトリ
3つの意味があります。Maven では JAR の置き場、Spring Data ではデータの出し入れの窓口になる部品です。ソースを管理する Git のリポジトリの意味でも出ます。
- レイヤレイヤ分け
コンテナイメージを作っている層です。イメージは層の積み重ねで、変わった層だけが作り直されます。本文では「層」とも書きます。
- ローカルリポジトリ
取ってきた依存の JAR を溜めておく、手元の置き場です。Maven では ~/.m2/repository で、全プロジェクトで共用されます。
- 依存ライブラリ依存の JAR / 依存 JAR
自分のコードが使う、ほかの人が作ったライブラリです。Java では JAR の形で取ってきて、クラスパスに並べます。単に依存とも言います。
近いもの: package.json の dependencies
- 逆ドメイン
自分の持つドメイン名を逆順にして、パッケージ名の先頭に付ける慣習です(example.co.jp なら jp.co.example)。名前の重なりを避けるためです。
- 座標groupId / artifactId
依存ライブラリを指す、グループ名・名前・版の3つ組です(groupId、artifactId、version)。Maven はこれを手がかりに JAR を取ってきます。
- 実行可能 JARfat JAR / uber JAR
自分のクラスと依存の JAR を全部入れ、java -jar だけで動くようにした JAR です。Spring Boot が作ります。fat JAR とも呼びます。
- 親 POMparent
pom.xml の <parent> で指定して、設定を継ぐ元になる POM です。Boot の雛形では spring-boot-starter-parent です。
- 推移依存
使うライブラリが、さらに使っているライブラリのことです。Maven・Gradle と Ant+Ivy は自動でたどり、Ant だけなら人が調べて置きます。
詳しく: Maven: 依存解決(推移依存・nearest wins・dependencyManagement・exclusions・スコープ) →
- 成果物
ビルドの結果としてできあがり、配ったり動かしたりするファイルのことです。Java では JAR や WAR がこれに当たります。
Web
- DispatcherServletdispatcherServlet
Spring MVC の入口になる Servlet です。すべての要求を受け取り、URL に合う自分のメソッドを探して呼びます。
- EAR
Enterprise ARchive の略です。複数の WAR などをまとめて、アプリケーションサーバに渡す形です。このコースでは名前だけ出ます。
- HttpMessageConverterJacksonJsonHttpMessageConverter
Spring の部品で、Java のオブジェクトと、HTTP の本文(JSON など)を相互に変換します。戻り値を JSON にするのはこれです。
- HttpServletdoGet
HTTP 用の Servlet を書くときに継承する、Servlet API のクラスです。GET に応えるなら、doGet というメソッドを書きます。
- Jackson
Java のオブジェクトと JSON を相互に変換するライブラリです。Spring Boot の Web のスターターに入っています。
- jakartajakarta.*
Jakarta EE の API のパッケージ名の先頭です。Jakarta EE 9 で、以前の javax から変わりました。
- Jakarta EEJava EE / J2EE
Servlet など、サーバ側の API をまとめた規格群です。旧称は Java EE、その前は J2EE です。JDK(Java SE)とは別の規格です。
- javax
Jakarta EE の API が以前使っていたパッケージ名の先頭です。JDK に入っている javax.sql などは、今も javax のままです。
- RequestMappingHandlerAdapter
Spring MVC の部品で、URL に対応する自分のメソッド(ハンドラ)を呼び出す係です。引数の用意や、戻り値の変換も受け持ちます。
- Servletサーブレット
HTTP の要求を受けて応答を返す、Java のクラスの決まった形です。Tomcat などのサーバから呼ばれます。main はありません。
近いもの: Express のハンドラ(ただし関数ではなくクラス)
- Servlet コンテナサーブレットコンテナ
Servlet を載せて動かすサーバです。ポートを開き、HTTP を解釈し、URL に対応する Servlet を呼びます。Tomcat がその1つです。
近いもの: Node の http サーバ(役割だけ)
- Tomcat組み込み Tomcat / 組み込みの Tomcat
HTTP を受け付けるサーバ(Servlet コンテナ)の1つで、それ自体が Java のプログラムです。Spring Boot では、アプリの中に入って動きます。
近いもの: Node の http サーバ(Express ではない)
- url-pattern
web.xml の中の要素で、どの URL をどの Servlet に渡すかを書きます。
- WARWeb ARchive
Web ARchive の略です。Web アプリを Tomcat などのサーバに渡すための zip 形式のファイルで、ふつうは main を持たず、サーバに置いて動かします。
- アプリケーションサーバ
このコースでは、Jakarta EE の規格を広く実装したサーバ製品の意味で使います。Servlet コンテナとの厳密な境目は、確かめられていません。
- コンテキストパス
1つのサーバに置いた Web アプリごとに付く、URL の先頭の部分です。Tomcat に WAR を置くと、WAR のファイル名から決まります。
- セッション BeanBean クラス
EJB の部品の種類の1つです。EJB 2.1 では、Bean クラスに加えて、インターフェース2つと XML の記述が必要でした。Spring の Bean とは別物です。
- デプロイ
アプリを WAR などの形にしてサーバに置き、動く状態にすることです。配備とも言います。
- デプロイ記述子
アプリの中身をサーバに伝えるための XML の設定ファイルです。WAR の web.xml や、EJB の ejb-jar.xml がこれです。
- ハンドラ
呼び出しを受けて処理する関数やメソッドの呼び名です。動的プロキシでは呼び出しが届く先、Spring MVC では URL に対応する自分のメソッドを指します。
- フィルタ
Servlet に届く前の要求と、返す前の応答に、共通の処理を挟む Servlet API の部品です。文字コードの設定などに使われます。
- フロントコントローラ
すべての要求をまず1か所で受け、共通の手順を済ませてから、個々の処理へ振り分ける作りのことです。DispatcherServlet がこれです。
- 作業スレッド
Tomcat が、リクエストを処理するために持っているスレッドです。既定では、1つのリクエストを1本が最初から最後まで受け持ちます。
Spring
- @Autowired
ここに依存を渡してほしい、とコンテナに伝えるアノテーションです。コンストラクタが1つだけなら、付けなくても渡されます。
- @Bean
設定クラスのメソッドに付けるアノテーションです。そのメソッドが返したオブジェクトが、Bean として登録されます。
- @Component
このクラスを Bean にする、という印のアノテーションです。コンポーネントスキャンが、これの付いたクラスを見つけて登録します。
- @ConditionalOnClass
指定したクラスがクラスパスにあるときだけ、その設定を有効にするアノテーションです。自動構成が使います。
- @ConditionalOnMissingBean
同じ型の Bean がまだ無いときだけ、その Bean を登録するアノテーションです。自分で定義した Bean が優先される仕組みの元です。
- @Configuration
Bean の作り方を Java のコードで書いた設定クラスだ、という印のアノテーションです。中に @Bean のメソッドを書きます。
- @GetMapping
メソッドに付けて、どの URL への GET の要求でそのメソッドを呼ぶかを指定するアノテーションです。
- @PostConstruct
依存が全部渡された後に、コンテナに呼んでもらう初期化のメソッドに付けるアノテーションです。
- @PreDestroy
コンテナが Bean を片付ける前に、呼んでもらう後始末のメソッドに付けるアノテーションです。
- @Repository
@Component の仲間です。Bean にする点は同じで、データの出し入れをするクラスの目印になり、DB の例外を Spring の例外に変換する対象にもなります。
- @RequestScope
Bean のスコープを、1つの Web のリクエストの間だけにするアノテーションです。リクエストごとに別のインスタンスになります。
- @RestController
Web の要求を受けるクラスに付けるアノテーションです。Bean になり、メソッドの戻り値が、そのまま応答の本文(JSON など)になります。
- @Scope
Bean のスコープを指定するアノテーションです。何も付けなければ singleton になります。
- @Service
@Component の仲間のアノテーションです。Bean にする点は同じで、業務の処理を書くクラスだという目印を兼ねます。
- @SpringBootApplication
Spring Boot の起動クラスに付けるアノテーションです。設定クラスの印、自動構成、コンポーネントスキャンの3つをまとめて有効にします。
- @SpringBootTest
テストのクラスに付けるアノテーションです。テストのために、Spring のコンテナを実際に起動します。その分、時間がかかります。
- @Transactional
メソッドやクラスに付けるアノテーションです。メソッドの開始でトランザクションを始め、戻るときにコミットし、RuntimeException などでは巻き戻します。
- ApplicationContextコンテキスト
Spring の DI コンテナを表すインターフェースです。Bean を作って管理し、名前や型で取り出せます。
- Bean
Spring のコンテナが作って管理しているオブジェクトです。JavaBeans や EJB の Bean とは別物です。
近いもの: NestJS のプロバイダのインスタンス
- Bean 定義Bean の定義
どのクラスの Bean を、どう作って組み立てるかの情報です。コンテナは、これを集めてから Bean を作ります。
- bootRun
Spring Boot の Gradle プラグインが足すタスクで、JAR を作らずにアプリをそのまま起動します。
- CGLIB
対象のクラスを継承したサブクラスを実行時に作る、コード生成のライブラリです。Spring はこれでプロキシを作り、インターフェースの無いクラスにも使えます。
- DI コンテナIoC コンテナ
オブジェクトを作り、それが必要とする相手をコンストラクタの引数などで渡す役です。IoC コンテナとも呼び、Spring では ApplicationContext です。
近いもの: NestJS の DI コンテナ
- Environment
Spring が、設定値をまとめて持っている入れ物です。引数・環境変数・設定ファイルなどの設定元を、順位を付けて重ねています。
- exejar
spring-boot-antlib の task で、.class と依存の JAR から Spring Boot の実行可能 JAR を作ります。
- io.spring.dependency-managementdependency-management
Gradle のプラグインの id で、Spring Boot の BOM を取り込みます。これがあるので依存の版を省けます。消すと解決が FAILED になりました。
- JarLauncher起動用のローダ / Launcher
Spring Boot の実行可能 JAR で、最初に動く起動用のクラスです。入れ子の JAR を読める準備をしてから、自分の main を呼びます。
- JavaConfig
Bean の配線を、XML ではなく Java のクラス(@Configuration と @Bean)で書くやり方の呼び名です。
- Objenesis
コンストラクタを呼ばずにオブジェクトを作るための、小さな Java のライブラリです。Spring が、CGLIB のプロキシを作るのに使います。
- org.springframework.boot
Spring Boot の Gradle プラグインの id で、bootJar などのタスクを足します。Maven では Boot の部品の groupId でもあります。
- prototype
Bean のスコープの1つです。コンテナから取り出すたびに、新しいインスタンスが作られます。
- refresh
コンテナが Bean 定義を読み、singleton の Bean を実際に作る処理です。Spring Boot では、内蔵の Tomcat もこの途中で起動します。
- resolveMainClassName
Spring Boot の Gradle プラグインが足すタスクで、アプリの main を持つクラスの名前を探して記録します。bootJar の前に動きます。
- RunnerCommandLineRunner / ApplicationRunner
起動の最後に呼ばれる、自分の処理を書くための Bean です。CommandLineRunner と ApplicationRunner の2種類があります。
- singletonシングルトン
Bean の既定のスコープです。1つのコンテナの中で、1つの Bean 定義につきインスタンスを1つだけ作り、全員で共有します。
- Spring
単独で言うときは、Spring Framework を土台にしたプロジェクト群の総称です。このコースでは Spring Framework と Spring Boot の両方です。
- Spring AOP
メソッドの前後に共通の処理を挟む、Spring の仕組みです。対象の Bean を、代理のオブジェクト(プロキシ)に置き換えて実現します。
- Spring AOT
Spring が、ビルドのときに Bean 定義のコードを前もって生成する仕組みです。JVM の機能である AOT キャッシュとは別物です。
- Spring BootBoot
Spring Framework の上に乗り、単独で起動できるアプリを少ない設定で作れるようにするものです。自動構成・スターター・内蔵サーバを足します。
- Spring Data JPA
JPA を使うリポジトリ(データの出し入れの窓口)を、少ないコードで書けるようにする Spring のプロジェクトです。
- Spring Framework
Java のアプリを組み立てる土台のフレームワークです。DI コンテナと、Web・データアクセス・AOP などの機能を持ちます。
近いもの: NestJS 本体(役割だけ)
- Spring MVCspring-webmvc
Servlet の API の上に作られた Web フレームワークで、Spring Framework の一部です。URL と自分のメソッドを対応づけます。
- spring-boot-antlibantlib / AntLib
Spring Boot が Ant 向けに配る部品(AntLib)で、exejar で実行可能 JAR を作ります。実行時依存の JAR と一緒に ant -lib で渡します。
- spring-context
Spring Framework の JAR の1つで、DI コンテナ(ApplicationContext)を使うための入口になるものです。
- SpringApplication.run
Spring Boot のアプリを起動するメソッドです。main の中でこの1行を呼ぶと、コンテナを作り、必要なら Tomcat まで起動します。
- アドバイス
AOP で、メソッドの前後に挟む共通の処理のことです。ログ出力や、トランザクションの開始と終了などがこれです。
- コンテナ
3つの意味があります。Spring では Bean を作って管理する DI コンテナ、Web では Servlet を動かすサーバ、Docker では隔離して動かす環境です。
- コンポーネントスキャン
パッケージの配下を走査して、@Component などの印が付いたクラスを見つけ、Bean として登録することです。
- スターターspring-boot-starter-webmvc / starter-webmvc / spring-boot-starter-web / starter
ある用途に必要な依存をまとめた依存の記述です。名前は spring-boot-starter- で始まり、JAR はほぼ空です。NestJS のスターター(雛形)とは別物です。
- プロキシ代理のオブジェクト
本物のオブジェクトの代わりに渡される、代理のオブジェクトです。呼び出しを受け、前後に処理を挟んでから本物へ取り次ぎます。
- プロファイル
Spring で、環境ごとの設定を切り替えるための名前です。dev を有効にすると、application-dev.properties も読まれます。
- 起動クラスメインクラス
main を持ち、@SpringBootApplication を付けたクラスです。Spring Boot は、このクラスのパッケージとその配下から部品を探します。
近いもの: main.ts
- 自動構成
クラスパスにある JAR を見て、Spring Boot が Bean の設定を自動で足すことです。多くは、自分で同じ型の Bean を定義すると引っ込みます。
- 条件評価レポート
自動構成の候補ごとに、条件が通ったか外れたかと、その理由を並べたログです。--debug を付けて起動すると出ます。
- 設定元
設定値の出どころ1つ分のことです(引数、環境変数、設定ファイルなど)。Spring Boot は、順位の高い設定元の値を返します。
- 宣言的トランザクション
トランザクションの開始と確定を、コードに書かず、設定やアノテーションで指定する方式です。@Transactional がこれです。
- 配線
どのクラスのオブジェクトを作り、誰に誰を渡すかを決めることです。このコースでの呼び方です。
データベース
- DataSourcejavax.sql.DataSource
データベースへの接続を取り出す窓口になる、JDK のインターフェースです(javax.sql.DataSource)。
- dirty checking変更検知
読み込んだエンティティが変わったかどうかを Hibernate が自分で調べ、変わったものだけ UPDATE を出す仕組みです。save を呼ぶ必要がありません。
- EntityManager
永続化コンテキストを操作するための、JPA のインターフェースです。1つの EntityManager が、1つの永続化コンテキストに対応します。
- H2
アプリに組み込んで使える小さなデータベースです。メモリの中だけで動かせるので、このコースの実験で使っています。
- HibernateHibernate ORM
JPA の実装の1つです。オブジェクトの読み書きに合わせて、SQL を組み立ててデータベースに送ります。
近いもの: TypeORM / Prisma(ORM である、という点まで)
- JDBC
Java から SQL でデータベースを使うための標準の API で、JDK に入っています。データベースごとのドライバは、別の JAR として足します。
近いもの: pg や mysql2 を直接使う層(たとえ)
- JDBC ドライバ
JDBC の API を、個々のデータベース向けに実装した JAR です。使うデータベースに合わせて、依存に足します。
近いもの: pg や mysql2
- JPAJakarta Persistence
オブジェクトと表の対応づけの標準仕様です。現在の正式名は Jakarta Persistence です。仕様なので、動かすには Hibernate などの実装が要ります。
- LazyInitializationException
永続化コンテキストが閉じた後で、まだ読んでいない関連に触ったときに Hibernate が投げる例外です。
- SimpleJpaRepository
Spring Data JPA が用意している、リポジトリの実装クラスです。findById や save の中身はここにあります。
- エンティティ@Entity
データベースの表の1行に対応づけられるオブジェクト(と、そのクラス)です。クラスに @Entity を付けて示します。
- トランザクションロールバック
データベースへの複数の変更を、全部行うか、全部取り消すかのどちらかにまとめる仕組みです。確定がコミット、取り消しがロールバックです。
- 永続化コンテキスト
読み込んだエンティティを載せておく作業場です。同じ ID につきインスタンスは1つだけで、変更を覚えていて、後でまとめて書き戻します。
- 遅延ロードLAZY
関連するデータを最初は読まず、触ったときに初めて SQL を出して読みに行く設定です。JPA では LAZY と書きます。
略語
- AOP
アスペクト指向プログラミング(Aspect-oriented Programming)の略です。メソッド呼び出しの前後に、共通の処理を挟む仕組みです。
- AOT
ahead-of-time の略で、実行より前に済ませておく、という意味です。AOT キャッシュ、Spring AOT など、別々の仕組みの名前に付きます。
- BOM
bill of materials の略です。組み合わせて使える依存の版を、一覧にして配るための POM です。これのおかげで、依存の版を書かずに済みます。
- CDS共有アーカイブ
class data sharing の略です。JDK のクラスを、すぐ使える形で1つのファイル(共有アーカイブ)にまとめておき、起動を速くする JVM の機能です。
- DAO
Data Access Object の略です。データベースの読み書きを受け持つオブジェクトを指す、慣習的な呼び名です。仕様の用語ではありません。
- DI依存性の注入 / Dependency Injection
Dependency Injection(依存性の注入)の略です。オブジェクトが必要とする相手を、自分で作らず、外から渡してもらうことです。
- DSL
設定や記述のための専用の言語、という意味の略語です。Gradle には Groovy DSL(build.gradle)と Kotlin DSL(.kts)があります。
- DTO
Data Transfer Object の略です。データを受け渡すためだけのオブジェクトを指す、慣習的な呼び名です。仕様の用語ではありません。
- EJBEnterprise JavaBeans / Jakarta Enterprise Beans
Enterprise JavaBeans の略で、現行名は Jakarta Enterprise Beans です。サーバ側の業務部品を書くための仕様です。
- ELF
Executable and Linking Format の略で、Linux の実行ファイルの形式です。.class や JAR は、これではありません。
- IoC
Inversion of Control の略です。オブジェクトを作って組み立てる役を、自分のコードではなくコンテナが受け持つ、という考え方です。
- JLS言語仕様
The Java Language Specification の略で、Java の言語仕様の文書です。このコースでは「言語仕様」と書いて引用しています。
- JNDI
Java Naming and Directory Interface の略です。名前を手がかりに、設定値や接続先などを探して取り出すための、JDK に入っている API です。
- JSPJavaServer Pages / Jakarta Pages
JavaServer Pages の略で、現行名は Jakarta Pages です。Web アプリ用のテンプレートの仕組みです。このコースでは名前だけ出ます。
- JSR
Java Specification Request の略です。Java の仕様を新しく作る・変えるときの申請と、その番号です(例 JSR 376 はモジュール)。
- JVMS
The Java Virtual Machine Specification の略で、JVM の仕様の文書です。.class の形式や、クラスの読み込み方を定めています。
- LTSLong-Term Support
Long-Term Support の略です。配布元がその版を長く支援するという約束で、言語の性質ではありません。Oracle では 25 が最新の LTS です。
- ORM
object/relational mapping の略です。プログラムのオブジェクトと、データベースの表の行を対応づけることです。
- PaaS
Platform as a Service の略です。アプリを載せれば、動かす環境の管理を引き受けてくれるクラウドの基盤です。
- POJOPlain Old Java Object
Plain Old Java Object の略です。決まった型を継承も実装もしていない、普通の Java のクラス(のオブジェクト)のことです。
- POMProject Object Model / pom
Project Object Model の略です。Maven のプロジェクトを XML で表したもので、それを収めたファイルが pom.xml です。
- RSS
resident set size の略です。プロセスが実際に使っているメモリの量で、ps などで見られます。
- WTP
Web Tools Platform の略で、Eclipse で Web アプリを作るための追加の部品です。WebContent は、これが以前に既定で付けていたフォルダ名です。
その他
- aarch64arm64
64ビットの ARM という種類の CPU のことです。arm64 とも呼びます。このコースの実測は、この CPU の上の Linux で行っています。
- ASM
バイトコードを扱うライブラリです。Spring は写しを内蔵し、CGLIB で使います。Spring 7 は JDK 24 以降、クラス情報を JDK の API で読みます。
- commons-lang3
文字列の処理などの便利な機能を集めた、Apache のライブラリです。このコースでは、外部の依存の例として使っています。
- commons-logging
Apache のライブラリで、いくつかあるログの仕組みへの薄い橋渡しです。Spring Framework が内部で使うので、依存として必要になります。
- Docker
アプリを、コンテナという隔離された環境で動かす道具です。このコースの実測は、Docker の中の Linux で行っています。
- Eclipse
Java の統合開発環境(IDE)の1つです。プロジェクトの設定を .project や .classpath というファイルに持ちます。
- Groovy
JVM で動くスクリプト言語です。Gradle では build.gradle を書く言語で、もう1つの選択肢が Kotlin(build.gradle.kts)です。
- Kotlin
Java と同じ JVM で動く別の言語です。コンパイルすると Java と同じ形式の .class になります。Gradle のビルドスクリプト(.kts)にも使えます。
- Micrometer
アプリの動きを計測する(メトリクスを集める)ための、共通の窓口になるライブラリです。Spring Boot の依存に入っています。
- npm パッケージ
npm で配られるライブラリの単位です。Java のパッケージ(クラスをまとめる名前空間)とは、同じ語の別の意味です。
- ReactorReactor のコンテキスト
結果を待って止まらず、届いたときに続きを行う形(ノンブロッキング)の処理を組み立てる、JVM 向けのライブラリです。Spring のリアクティブな方式で使われます。
- slf4j
ログ出力の共通の窓口になるライブラリです(Simple Logging Facade for Java)。実際の出力先は、別のライブラリを選んで差し替えられます。
- V8
JavaScript を実行するエンジンで、Node.js の中に入っています。Java で役割が近いのは JVM です。
- リアクティブ
処理の結果を待って止まるのではなく、結果が届いたときに続きを行う形で組み立てるやり方です。このコースでは名前だけ出ます。
- 壁時計
実際に経過した時間のことです。CPU が働いていた時間(CPU 時間)と区別して言い、ダウンロードなどの待ち時間も含みます。