この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:atom
更新日時:2026-06-11 07:10:02

タイトル: ライブラリ
SEOタイトル: Java の主要ライブラリ完全ガイド — 標準と OSS

この記事の要点
  • Java の標準ライブラリ: java.util (Collections / Stream / Optional)、java.io / java.nio.filejava.timejava.net.http (Java 11+)
  • Apache Commons (Lang / IO / Collections) と Google Guava がユーティリティの定番
  • JSON は Jackson がデファクト、ログは SLF4J + Logback の組み合わせ
  • ボイラープレート削減の Lombok、テストは JUnit 5 + Mockito、ORM は Hibernate / JPA
  • 依存管理は Maven (pom.xml) または Gradle (build.gradle)

標準ライブラリ概観

パッケージ主な機能主要クラス
java.lang基本型・例外(import 不要)String, Math, Thread, Object
java.utilコレクション・日時・乱数ArrayList, HashMap, Stream, Optional
java.io古典 I/O(バイト/文字ストリーム)FileInputStream, BufferedReader
java.nio.fileモダンなファイル操作 (Java 7+)Path, Files, Paths
java.time日時 (Java 8+ JSR-310)LocalDate, LocalDateTime, Duration
java.net.httpHTTP クライアント (Java 11+)HttpClient, HttpRequest
java.util.concurrent並行処理ExecutorService, CompletableFuture
java.util.stream関数型ストリームStream, Collectors

java.util コレクション

import java.util.*;
import java.util.stream.*;

// List / Set / Map
List<String> list = new ArrayList<>(List.of("a", "b", "c"));
Set<Integer> set = new HashSet<>(Set.of(1, 2, 3));
Map<String, Integer> map = new HashMap<>(Map.of("a", 1, "b", 2));

// Stream
List<String> upper = list.stream()
    .filter(s -> s.length() > 0)
    .map(String::toUpperCase)
    .sorted()
    .collect(Collectors.toList());

// Optional
Optional<String> first = list.stream().findFirst();
first.ifPresent(System.out::println);
String s = first.orElse("default");

java.time 日時操作 (Java 8+)

import java.time.*;
import java.time.format.DateTimeFormatter;

LocalDate today = LocalDate.now();          // 2026-05-18
LocalTime now   = LocalTime.now();
LocalDateTime dt = LocalDateTime.now();
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));
Instant instant = Instant.now();            // UTC

LocalDate d = LocalDate.of(2026, 1, 1);
LocalDate next = d.plusDays(7).plusMonths(1);

// パース / フォーマット
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm");
String text = dt.format(fmt);
LocalDateTime parsed = LocalDateTime.parse("2026/01/01 12:00", fmt);

// 差分
Duration d2 = Duration.between(t1, t2);
Period p = Period.between(d1, d2);

java.nio.file ファイル操作 (Java 7+)

import java.nio.file.*;
import java.util.List;

Path p = Paths.get("/tmp/test.txt");

// 読み書き
Files.writeString(p, "Hello");
String content = Files.readString(p);
List<String> lines = Files.readAllLines(p);

// ストリームで大ファイル
try (Stream<String> stream = Files.lines(p)) {
    stream.filter(l -> l.startsWith("ERROR"))
          .forEach(System.out::println);
}

// 存在確認 / 削除
Files.exists(p);
Files.deleteIfExists(p);
Files.createDirectories(Paths.get("/tmp/a/b/c"));

java.net.http HTTP クライアント (Java 11+)

import java.net.URI;
import java.net.http.*;

HttpClient client = HttpClient.newHttpClient();

HttpRequest req = HttpRequest.newBuilder()
    .uri(URI.create("https://api.example.com/users"))
    .header("Authorization", "Bearer xxx")
    .GET()
    .build();

HttpResponse<String> res = client.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.statusCode());
System.out.println(res.body());

サードパーティライブラリ主要

用途ライブラリ備考
JSONJackson (com.fasterxml.jackson)Spring 標準・デファクト
JSON 軽量Gson (Google)Android で人気
ログ抽象化SLF4JAPI のみ
ログ実装Logback / Log4j 2SLF4J の実装
ユーティリティApache Commons Lang/IO/CollectionsStringUtils 等
コレクション/その他Google GuavaImmutable コレクション・Cache
ボイラープレート削減Lombok@Getter @Setter @Builder
単体テストJUnit 5@Test @ParameterizedTest
モックMockitowhen().thenReturn()
アサーションAssertJassertThat() 流暢 API
ORMHibernate / JPASpring Data JPA で使用
HTTP クライアントOkHttp / Apache HttpClientJava 11+ 標準でも代替可

Jackson での JSON 操作

import com.fasterxml.jackson.databind.ObjectMapper;

record User(String name, int age) {}

ObjectMapper mapper = new ObjectMapper();

// オブジェクト → JSON
String json = mapper.writeValueAsString(new User("Taro", 30));
// {"name":"Taro","age":30}

// JSON → オブジェクト
User u = mapper.readValue(json, User.class);

// JSON → Map
Map<String, Object> m = mapper.readValue(json, Map.class);

SLF4J + Logback でログ

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Service {
    private static final Logger log = LoggerFactory.getLogger(Service.class);

    public void doWork(int id) {
        log.info("start id={}", id);                  // パラメタ化(推奨)
        try { /* ... */ }
        catch (Exception e) {
            log.error("failed id={}", id, e);         // 例外は最後の引数
        }
        log.debug("done");
    }
}

Lombok でボイラープレート削減

import lombok.*;

@Getter @Setter @ToString
@NoArgsConstructor @AllArgsConstructor
@Builder
public class User {
    private String name;
    private int age;
}

// 利用
User u = User.builder().name("Taro").age(30).build();
u.getName();
u.setAge(31);
System.out.println(u);  // User(name=Taro, age=31)

JUnit 5 + Mockito でテスト

import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;

class CalculatorTest {
    @Test
    void testAdd() {
        Calculator c = new Calculator();
        assertEquals(5, c.add(2, 3));
    }

    @Test
    void testMock() {
        UserRepo repo = mock(UserRepo.class);
        when(repo.findById(1)).thenReturn(new User("Taro"));

        UserService svc = new UserService(repo);
        assertEquals("Taro", svc.getName(1));
        verify(repo).findById(1);
    }
}

依存管理 (Maven / Gradle)

<!-- Maven pom.xml -->
<dependencies>
  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.16.0</version>
  </dependency>
  <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.30</version>
    <scope>provided</scope>
  </dependency>
</dependencies>
// Gradle build.gradle
dependencies {
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.16.0'
    compileOnly 'org.projectlombok:lombok:1.18.30'
    annotationProcessor 'org.projectlombok:lombok:1.18.30'
    testImplementation 'org.junit.jupiter:junit-jupiter:5.10.0'
    testImplementation 'org.mockito:mockito-core:5.5.0'
}

FAQ

Q: Log4j と Logback どっち?
A: Spring Boot は Logback がデフォルト。Log4j 2 は async logging で高速、Log4Shell 脆弱性 (CVE-2021-44228) 以降は 2.17.1+ 必須。

Q: Java 標準だけで JSON 扱える?
A: Java EE には JSON-P (javax.json) があるが、Jakarta EE への移行で扱いが面倒。実務はほぼ Jackson か Gson。

Q: Lombok のデメリットは?
A: IDE プラグイン依存、デバッグでステップが飛ぶ、リフレクションで生成コードを検査できない。チームで合意してから導入を。