From 68d4ccbc4c8bd981816725b7515e8195cd92669f Mon Sep 17 00:00:00 2001 From: "ry.yamafuji" Date: Sat, 11 Oct 2025 11:25:16 +0900 Subject: [PATCH] =?UTF-8?q?Hello=20Java=E3=82=92=E6=A7=8B=E7=AF=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 7 ++++ README.md | 16 +++++++- docker-compose.yaml | 12 ++++++ docs/Java.md | 94 ++++++++++++++++++++++++++++++++++++++++++++ docs/Java_knowhow.md | 13 ++++++ src/Hello.java | 5 +++ 6 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 Dockerfile create mode 100644 docker-compose.yaml create mode 100644 docs/Java.md create mode 100644 docs/Java_knowhow.md create mode 100644 src/Hello.java diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..dfbcc37 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,7 @@ +# Dockerfile +FROM eclipse-temurin:21-jdk +WORKDIR /app +COPY src/. . +# 例: 単一ファイルをコンパイルして実行 +# docker build -t myjava . +# docker run --rm myjava java Hello \ No newline at end of file diff --git a/README.md b/README.md index e4898eb..744776f 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,17 @@ # java-common-code -JAVA Basic Code \ No newline at end of file +JAVA Basic Code + +## 実行方法 + +```sh +docker compose up -d +docker compose exec -it app bash +``` + +## コンパイルして実行する + +```sh +javac Hello.java +java Hello +``` \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..793dae0 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,12 @@ +version: "3.9" + +services: + app: + image: eclipse-temurin:21-jdk + working_dir: /app + volumes: + - ./src:/app # ← bind mount(ホストの ./src を /app に) + tty: true + stdin_open: true + command: bash + # # command: bash -lc "javac Hello.java && java Hello" \ No newline at end of file diff --git a/docs/Java.md b/docs/Java.md new file mode 100644 index 0000000..da087f4 --- /dev/null +++ b/docs/Java.md @@ -0,0 +1,94 @@ +# Javaとは + +Javaは「Write once, run anywhere(1度書けばどこでも動く)」を理念として +1995年にSun Microsystems(現Oracle)から登場しました。 +C/C++の強力さと安全性・移植性を両立させることを狙った汎用オブジェクト指向言語です。 + +* 開発元: Oracle(元Sun) +* ランタイム: JVM(Java Virtual Machine) +* GUI: Swing / JavaFX +* Web: Spring Boot / Jakarta EE + + +## 実行モデル + +.javaソースを javacでコンパイル +→.class バイトコード生成 +.class を JVM が実行(JITコンパイルでマシンコード化) + + +``` +[ソースコード] → javac → [バイトコード] → JVM → [実行] +``` + +これにより、Windows / macOS / Linux どこでも同じ .class を動かせます。 + + +## 基本構文 + +```java +public class Main { + public static void main(String[] args) { + System.out.println("Hello Java!"); + } +} +``` + +## Javaバージョン進化の要点 + +2025年時点での主流は Java 17 または 21。 + +| バージョン | 主な特徴 | +| ---------- | ----------------------------------- | +| Java 8 | Stream API, Lambda, Date/Time | +| Java 11 | LTS, 新HTTP Client | +| Java 17 | LTS, sealed class, record | +| Java 21 | LTS, virtual thread(軽量スレッド) | + +## 主要フレームワーク(現代開発) + +| 分野 | フレームワーク | 備考 | +| --------- | ------------------- | -------------------------------- | +| Webアプリ | **Spring Boot** | ほぼデファクト。DI, REST, DB統合 | +| DB ORM | Hibernate / JPA | Springと併用多い | +| テスト | JUnit5 | C#のxUnit/nUnitに近い | +| ビルド | Maven / Gradle | 依存管理・パッケージ構築 | +| クラウド | Micronaut / Quarkus | 軽量Javaランタイム対応 | + +## JDKの全体図 + +```plantuml +@startuml +title JDK / JRE / JVM の入れ子構造 + +skinparam shadowing false +skinparam defaultFontName Noto Sans +skinparam packageStyle rectangle +skinparam rectangleStyle rounded + +rectangle "JDK(Java Development Kit)\n← 開発者用" as JDK { + rectangle "JRE(Java Runtime Environment)\n← 実行環境" as JRE { + rectangle "JVM(Java Virtual Machine)\n← バーチャルマシン" as JVM + } +} +@enduml +``` + +## 実際に動かしてみる + + +### Linux + +```sh +mkdir -p ~/java-play && cd ~/java-play +docker run --rm -it -v "$PWD":/workspace -w /workspace eclipse-temurin:21-jdk bash +``` + +### Windows + +```bat +mkdir java-play; cd java-play +docker run --rm -it -v "${PWD}:/workspace" -w /workspace eclipse-temurin:21-jdk bas +``` + +### Dockerfileを活用する場合 \ No newline at end of file diff --git a/docs/Java_knowhow.md b/docs/Java_knowhow.md new file mode 100644 index 0000000..8f713ce --- /dev/null +++ b/docs/Java_knowhow.md @@ -0,0 +1,13 @@ +## knowJava SE文法(8〜21の主要構文差分を理解) + +## Stream / Lambda / Optional + +## Record / Virtual Thread(Java 21) + +## Spring BootでREST API構築 + +## Maven/Gradle構成理解 + +## JVMチューニング & GC理解 + +## Docker + Javaランタイムの軽量化(jlink, GraalVM) \ No newline at end of file diff --git a/src/Hello.java b/src/Hello.java new file mode 100644 index 0000000..06ed024 --- /dev/null +++ b/src/Hello.java @@ -0,0 +1,5 @@ +public class Hello { + public static void main(String[] args) { + System.out.println("Hello Java!"); + } +} \ No newline at end of file