Javaの開発は「言語」だけでは成り立たない
第6章まででJavaの文法の骨格は押さえました。しかし実際の開発現場で「Javaでシステムを作る」と言ったとき、言語そのものは全体の一部にすぎません。周りには、部品セット、組み立て道具、検査道具、動かす土台など、たくさんの道具があります。
この章では、現場の会話に出てくる言葉を「何をするための道具か」で分類します。全部を覚える必要はありません。名前を聞いたときに「ああ、あの役割の道具ね」と分類できれば十分です。
Spring:企業システムの事実上の標準
Spring(スプリング)は、Javaで業務システムやWebサービスを作るときに最もよく使われるフレームワークです。フレームワークとは「アプリケーションの骨組みと、よく使う部品をまとめて提供するもの」で、エンジニアはその骨組みの上に業務固有の処理だけを書き足します。
Springが面倒を見てくれることの例:
- Web画面やAPIからのリクエストを受け取り、担当のメソッドに振り分ける
- データベースへの接続と、SQLの発行・結果の受け取り
- トランザクション管理(処理を途中で失敗したら全部取り消す仕組み)
- ログイン認証や権限チェック(Spring Security)
- バッチ処理の骨組み(Spring Batch)
Spring Boot(スプリングブート)は、Springをすぐ使い始められるように設定を自動化したもので、現在新しく作られるJavaのシステムの多くはSpring Bootを使っています。「Spring Bootで作る」は、現代のJava開発の標準的な出発点です。
Java EE/Jakarta EE という言葉も見かけたら
Springとは別に、Javaの公式仕様として企業向け機能を定めたJava EE(ジャバ・イーイー)という規格があります。2017年に管理団体が移り、名前がJakarta EE(ジャカルタ・イーイー)に変わりました。少し前のシステムでは「Java EE準拠」「Struts」「Seasar」といったフレームワーク名が出てくることがありますが、これらは現在では古い技術とされ、Springへの移行対象になっていることが多いです。
Maven と Gradle:部品を集めて組み立てる
Javaのシステムは、自分たちで書いたコードに加え、Springをはじめ何十、何百という外部の部品(ライブラリ)を組み合わせて作られます。これらを集めてきて、コンパイルし、1つのファイルにまとめる作業をビルドと呼び、それを自動で行う道具がMaven(メイブン)とGradle(グレイドル)です。
.jar または .war ファイルpom.xml、Gradle は build.gradle という設定ファイルに「どの部品の、どのバージョンを使うか」を書きます。この設定ファイルを見れば、そのシステムが依存している外部部品の一覧が分かります。セキュリティの脆弱性対応で「使っているライブラリの棚卸し」をするときに参照されるのはこのファイルです。成果物の JAR(ジャー)ファイルは、コンパイル済みのクラスファイルを1つに固めたものです。Webアプリ用には WAR(ウォー)ファイルという形式もあります。「JARを配置する」「WARをデプロイする」と言ったら、できあがったプログラム一式をサーバーに置いて動かすことを指します。
JUnit:正しく動くことを自動で確かめる
JUnit(ジェイユニット)は、Javaのテストフレームワークです。「この入力ならこの結果になるはず」という検査をコードとして書いておき、ビルドのたびに自動で実行します。
@Test
void 税込金額が正しく計算される() {
Invoice inv = new Invoice("1001", "A商事", 100000);
assertEquals(110000, inv.amountWithTax()); // 期待値と実際の値が等しいか
}
読んでみる:10万円の請求書を作り、税込金額が11万円になることを assertEquals(等しいことを確認)で検査している。@Test はこのメソッドがテストであることを示す印(アノテーション)です。Springのコードでも @Service、@Controller のような @ から始まる印がたくさん出てきますが、「役割を示すラベル」と思えば大丈夫です。
「テストコードがある」「テストが通った」という言葉は、品質の裏付けとして重要です。逆に「テストがない古いシステム」は、修正のたびに人手で全部確認し直す必要があり、改修コストが膨らみます。見積りが高いと感じたとき、その背景にはテストの有無があることがよくあります。
LTS:「バージョンを上げる」が論点になる理由
第1章で触れたとおり、Javaは2018年から半年に1回新バージョンを出しています。しかし、企業システムが半年ごとにバージョンアップするのは現実的ではありません。そこで、特定のバージョンだけをLTS(Long-Term Support、長期サポート版)として、数年にわたり不具合修正やセキュリティ修正を提供する仕組みになっています。
| バージョン | 公開年 | 位置づけ |
|---|---|---|
| Java 8 | 2014年 | LTS。長年の定番で、今も現役の企業システムが多い。ただし無償サポートは縮小傾向 |
| Java 11 | 2018年 | LTS。8からの移行先として広く採用された |
| Java 17 | 2021年 | LTS。現在の移行先として最も一般的な選択肢のひとつ |
| Java 21 | 2023年 | LTS。新規開発での採用が進む |
| Java 25 | 2025年 | LTS。最新の長期サポート版 |
| その他(9、10、12〜16、18〜20、22〜24) | 半年ごと | 非LTS。次のバージョンが出ると修正提供が終わるため、企業システムではほぼ使われない |
企業は通常、LTSからLTSへと数年おきに移行します。「Javaのバージョンを上げる必要があります」とエンジニアが言うとき、背景にあるのは主に次の事情です。
- セキュリティ修正が提供されなくなる:サポート切れのバージョンを使い続けると、見つかった脆弱性が直らない。監査やセキュリティ診断で指摘される典型項目
- 使っている部品(Springなど)が新しいJavaを要求する:たとえばSpring Boot 3系はJava 17以上が必須。部品を更新したければ土台も上げざるを得ない
- 技術者の確保:古いバージョンしか知らない・使えない環境は、担当できる人が年々減る
予算の話として
バージョンアップは「機能が増えるわけではないのにお金がかかる」投資なので、社内で説明が難しい項目です。しかし性質としては建物の耐震改修や設備の法定点検に近く、先送りするほど一度に飛ぶ距離が大きくなり、費用もリスクも増えます。「今のJavaのバージョンは何で、サポート期限はいつか」は、システム台帳に載せておく価値のある情報です。
OpenJDK と Oracle JDK:どの「Java本体」を使うか
第2章で「JavaをインストールするとはJDKを入れること」と学びました。実はこのJDKにはいくつかの配布元(ディストリビューション)があり、どれを使うかが契約やコストの論点になります。
- OpenJDK:Javaの本体をオープンソース(無償・公開)で開発しているプロジェクト。オラクル自身も開発の中心メンバー。すべての配布版の元になっている
- Oracle JDK:オラクル社がOpenJDKをもとに提供する版。2019年以降、商用利用の条件が何度か変わり、バージョンや用途によっては有償サポート契約が必要になる。「Javaが有料になった」と話題になったのはこの件
- 各社のOpenJDK配布版:OpenJDKを各社がビルドして無償配布しているもの。Eclipse Temurin(テムリン)、Amazon Corretto(コレット)、Microsoft Build of OpenJDK、Azul Zulu、Red Hat build of OpenJDK など。中身は同じOpenJDKで、違いは主にサポート体制
現在の企業システムでは、ライセンス費用を避けるため各社のOpenJDK配布版を使うのが一般的になっています。「どのJDKを使っていますか」「Oracle JDKなら有償契約の対象ですか」は、ソフトウェア資産管理やライセンス監査の観点でも確認したい項目です。
その他、聞く機会の多い言葉
| 言葉 | ひとこと説明 |
|---|---|
| Tomcat(トムキャット) | JavaのWebアプリを動かすサーバーソフト。WARファイルを置いて動かす土台。Spring Bootでは内蔵されていることが多い |
| IDE(統合開発環境) | エンジニアがコードを書く作業机。Javaでは IntelliJ IDEA と Eclipse が二大勢力。VS Code も使われる |
| Kotlin(コトリン) | JVM上で動く別の言語。Javaより簡潔に書け、Javaの部品をそのまま使える。Android開発では主流。「JavaとKotlinの混在」はよくある |
| JDBC / JPA / MyBatis | Javaからデータベースを操作するための仕組みや部品の名前。「DBアクセス層」の話題で出る |
| Log4j / Logback | ログ(動作記録)を出力する部品。2021年末に Log4j の深刻な脆弱性が世界的な問題になり、「使用ライブラリの棚卸し」の重要性が広く認識された |
| Docker / コンテナ | Javaアプリを、必要なJDKごと箱詰めして配布・実行する仕組み。「サーバーにJavaを入れる」作業が不要になる |
この章のまとめ
- Java開発の道具は「部品セット・組み立て・検査・作業机・土台」の5層。層ごとに名前を分類すれば会話についていける
- Spring(Spring Boot)が企業システムの事実上の標準フレームワーク。Maven/Gradleがビルド、JUnitがテスト
- LTS(8・11・17・21・25)からLTSへ数年おきに移行する。上げる理由はセキュリティ修正・部品の要件・人材確保
- JDKには配布元が複数ある。Oracle JDKは条件により有償。OpenJDK配布版(Temurin、Correttoなど)が主流
確認クイズ
この章の内容を3問で確かめましょう。選ぶとすぐに解説が表示されます。
Q1. 「このシステムは Spring Boot で作られています」と聞きました。Spring Boot の役割として最も近いものはどれですか?
Q2. 企業システムでJavaの「非LTS」バージョン(たとえば Java 22)がほとんど使われない理由はどれですか?
Q3. Maven や Gradle の設定ファイル(pom.xml / build.gradle)を見ると分かることはどれですか?