Apache Commons
Apache Commons とは
Apache Commons は、Apache Software Foundation が提供する Java のユーティリティライブラリ群である。Java の標準ライブラリだけでは記述が冗長になりがちな処理(文字列操作、ファイル入出力、コレクション操作など)を、簡潔で安全に書けるようにする「便利ツール集」として広く利用されている。
なぜ SIer で重要か
SIer の Java プロジェクトでは、ほぼ例外なく Apache Commons のいずれかのライブラリが使われている。文字列の null チェックや空文字判定、ファイル操作、オブジェクトのコピーなど、業務ロジックの至るところで登場する基盤的なライブラリである。既存コードを読む際にも Apache Commons のクラスが頻出するため、主要なクラスの使い方を把握しておくと開発効率が大きく向上する。
基本概念
主要ライブラリ
Apache Commons は数十のサブプロジェクトで構成されているが、SIer の現場で特に使用頻度が高いものを以下にまとめる。
Commons Lang(commons-lang3)
Java の java.lang パッケージを補完するユーティリティ群。最も使用頻度が高い。
import org.apache.commons.lang3.StringUtils;
// null 安全な文字列判定
StringUtils.isEmpty(null); // true
StringUtils.isEmpty(""); // true
StringUtils.isBlank(" "); // true(空白のみも true)
// null 安全な文字列比較
StringUtils.equals(str1, str2); // NullPointerException が発生しない
// 文字列操作
StringUtils.leftPad("42", 5, '0'); // "00042"(ゼロ埋め)
StringUtils.abbreviate("abcdefg", 5); // "ab..."(省略表示)
StringUtils は SIer の Java コードで最も頻繁に目にするユーティリティクラスと言って過言ではない。特に StringUtils.isEmpty() や StringUtils.isBlank() は null チェックと空文字チェックを同時に行えるため、NullPointerException の防止に役立つ。
その他にも ObjectUtils(null 安全なオブジェクト操作)、NumberUtils(数値変換)、DateUtils(日付操作)など、多数のユーティリティクラスが含まれている。
Commons IO(commons-io)
ファイル・ストリームの入出力を簡潔に記述するためのライブラリ。
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
// ファイルの読み書き
String content = FileUtils.readFileToString(file, "UTF-8");
FileUtils.writeStringToFile(file, content, "UTF-8");
// ストリームの読み取り
String text = IOUtils.toString(inputStream, "UTF-8");
// ファイルのコピー
FileUtils.copyFile(srcFile, destFile);
Java 標準のファイル操作は try-with-resources やバッファリングなど記述が冗長になりがちだが、Commons IO を使うと 1 行で処理できる。
Commons Collections(commons-collections4)
Java のコレクションフレームワークを拡張するライブラリ。
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
// null 安全なコレクション判定
CollectionUtils.isEmpty(null); // true
CollectionUtils.isEmpty(list); // list が null または空のとき true
// Map の null 安全な操作
MapUtils.getString(map, "key", "default"); // key がなければデフォルト値を返す
Commons BeanUtils(commons-beanutils)
Java Bean のプロパティ操作を行うライブラリ。オブジェクト間のプロパティコピーに使われる。
import org.apache.commons.beanutils.BeanUtils;
// オブジェクトのプロパティを別のオブジェクトにコピー
BeanUtils.copyProperties(dest, src);
SIer の業務システムでは、エンティティ(データベースの行に対応するオブジェクト)から DTO(画面表示用のオブジェクト)へのデータ変換が頻繁に発生する。BeanUtils.copyProperties() はこの変換を簡潔に記述できるため広く使われている。
「車輪の再発明を避ける」
Apache Commons が重視されるのは、「車輪の再発明を避ける」という原則のためである。文字列の null チェックや空白判定のような基本的な処理を各プロジェクトで独自に実装すると、バグの混入リスクが高まり、コードの統一性も失われる。実績のある Apache Commons のメソッドを使うことで、信頼性の高いコードを効率的に書ける。
SIer での使われ方
プロジェクト共通ユーティリティとの関係
SIer のプロジェクトでは「共通ユーティリティ」として独自のユーティリティクラスを作成することがある。これらの共通ユーティリティの内部で Apache Commons を活用しているケースも多い。たとえば、プロジェクト固有の文字列変換ルールを ProjectStringUtils として定義し、内部的に StringUtils を呼び出すといった構成である。
使用時の注意点
バージョンに注意する
Apache Commons は長い歴史を持つため、古いバージョンと新しいバージョンでパッケージ名やクラス名が異なることがある。たとえば、Commons Lang はバージョン 2 系(commons-lang)と 3 系(commons-lang3)でパッケージ名が異なる(org.apache.commons.lang → org.apache.commons.lang3)。
非推奨 API に注意する
長期間メンテナンスされているライブラリのため、非推奨(@Deprecated)となった API が含まれていることがある。IDE の警告を確認し、非推奨 API は代替手段に置き換えることが望ましい。
Java 標準 API の進化も把握する
Java のバージョンアップにより、かつて Apache Commons でしかできなかった処理が標準 API で実現できるようになっているケースもある。たとえば Java 11 以降の String.isBlank() は StringUtils.isBlank() と同等の機能を提供する(ただし null 安全ではない点に注意)。
まとめ
- Apache Commons は Java の標準ライブラリを補完するユーティリティライブラリ群であり、SIer の現場でほぼ必ず使われている
- 特に Commons Lang の
StringUtilsは最も使用頻度が高く、null 安全な文字列操作に不可欠 - 「車輪の再発明を避ける」ために、実績のある Apache Commons を積極的に活用すべきである
- バージョンの違い(2 系と 3 系)や非推奨 API に注意が必要
- Java 標準 API の進化も把握しつつ、適切にライブラリを使い分けることが重要