Javaを使うなら知っておきたい技術、フレームワーク、ライブラリ、ツールまとめ

Javaの開発と言っても、各種ミドルウェアやフレームワーク、ライブラリ、ツールなどが豊富にあり選択に悩むことは少なくないと思います。
そこで関連技術のインデックスになればと作成しました。

あくまで知っている範囲で記述しているので、コメントしてもらえれば随時追加します！

すべてを書くと膨大な量になるため、現状採用が減ってきているものや、そもそもあまり採用されていないもの、後継があったり、類似のものと比較した場合に明らかに劣っているものは省いています。

ちなみにライブラリには高機能なものも多いので、分類は参考程度にご覧下さい。

## サーバ系
* [Apache HTTP Server](https://mhttpd.apache.org/)
世界中でもっとも多く使われているWebサーバ。

* [nginx](http://www.nginx.org/)
フリーかつオープンソースのWebサーバで、処理性能・高い並行性・メモリ使用量の小ささに焦点を当てて開発されている。

* [Tomcat](http://tomcat.apache.org/)
Java ServletやJSPを処理するオープンソースのアプリケーションサーバ。

* [Jetty](http://www.eclipse.org/jetty/)
単純で効率的な組み込みやすいWebサーバとなるよう意図して開発されたアプリケーションサーバ。

* [WebLogic](http://www.oracle.com/technetwork/jp/middleware/weblogic/overview/index.html)
Oracleが開発・販売する、商用Java EE対応のアプリケーションサーバ。

* [GlassFish](https://glassfish.java.net/)
オープンソースで開発されている、Java EE対応のアプリケーションサーバ。

* [Payara Micro](http://www.payara.fish/payara_micro)
GlassFishからフォークしてライブラリのバージョンアップやバグフィックスが行われているPayaraのマイクロサービス向けビルド。

* [WildFly(JBoss)](http://www.wildfly.org/)
Redhatが開発・販売する、Java EE対応のアプリケーションサーバ。

* [WebSphere(Liberty Profile)](https://developer.ibm.com/wasdev/)
IBMが開発・販売する、Java EE対応のアプリケーションサーバー。


## IDE
* [Eclipse](http://www.eclipse.org/)
Javaで最も普及しているオープンソースのIDE。

* [IntelliJ IDEA](http://www.jetbrains.com/idea/)
JetBrainsが開発したIDE。ZeroTurnaroundの調査によると、JavaのIDEとしてはEclipseに続いて2番人気。

* [NetBeans](http://www.netbeans.org/index_ja.html)
Oracleが中心としたコミュニティで開発されているIDE。



## 標準API系
* [Java SE(Java Platform, Standard Edition)](http://www.oracle.com/technetwork/jp/java/javase/overview/index.html)
多くのJavaプラットフォームプログラムで役立つJava APIの集合体である。
Java SEでは標準的な機能のみが定められており、サーバ向けの機能についてはJava SEを拡張したJava EEにて定義されている。

* [Java EE(Java Platform, Enterprise Edition)](http://www.oracle.com/technetwork/jp/java/javaee/overview/index.html)
Javaの企業用機能セット。JavaSEにサーバ関係のライブラリなどを追加したもので、ベースはJavaSEそのもの。
JavaEE SDKは、JavaSE+JavaEE用ライブラリ+標準JavaEEサーバ+各種ドキュメントからなる。

* [Java ME(Java Platform, Micro Edition)](http://www.oracle.com/technetwork/jp/java/javame/overview/index.html)
Java Platform Java ME (Java Platform, Micro Edition) 組み込み向けの機能セット Java SE のサブセット＋組み込み向けAPI。	

* [JavaFX](http://www.oracle.com/technetwork/jp/java/javafx/overview/index.html)
Swingに代わる	Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリ。Java SE 7 Update 2以降に標準搭載されている。



## フレームワーク系
* [Spring](http://spring.io/)
狭義の意味ではDI、AOP、MVC、ORMなどを含んだフルスタックフレームワーク(Spring framework)。
広義の意味ではSpring Projectを指しており、多数の機能やフレームワークなどに別れたサブプロジェクトを持つ。

* [Play Framework](http://www.playframework-ja.org/)
CoCやホットリローディング、エラーのブラウザ上への表示といった方針により、開発者の生産性を上げることを目的としているMVCフレームワーク。



## テンプレートエンジン
* [Thymeleaf](http://www.thymeleaf.org/)
XML/XHTML/HTML5テンプレートエンジンで、一般的なアプリケーションを通して表示するだけでなく、拡張子に.htmlを採用しているため、コンパイル無しでもブラウザで表示ができる。

* [Mustache.java](https://github.com/spullara/mustache.java#readme)
Java以外にRuby, JavaScript, Python, PHP, Go, Scala, node.js他多数の言語で使用可能なテンプレートエンジン。

* [Apache Velocity](http://velocity.apache.org/)
HTMLだけでなくXMLやSQL文などテキストファイルならどのようなものにでも適用できる高い汎用性をもっているテンプレートエンジン。



## データベース系
* [Hibernate](http://hibernate.org/)
データベースアクセスを直接高レベルなオブジェクト操作機能に置換することで、ドメインモデルを関係データベースにマッピングするフレームワーク。

* [MyBatis](http://blog.mybatis.org/)
XMLまたはアノテーションを用いてSQLをオブジェクトと紐付けるフレームワーク。
他のORMとは異なりDBとオブジェクトのマッピングではなく、SQL文とオブジェクトのマッピングを行うため、レガシーな環境や非正規化されたDBでも有用。

* [jOOQ](http://www.jooq.org/)
SQLライクなクエリービルダーや自動生成したクラスによる型安全を目指したORM。

* [Doma](https://doma.readthedocs.io/ja/stable/)
注釈処理を利用したコード生成、検証、2-way SQLによるSQLテンプレート、Java 8標準対応などの特徴を持った安全でシンプルなORM。

* [H2 Database](http://www.h2database.com/html/main.html)
Javaプラットフォーム上で動き、組み込み、クライアント・サーバーモードでも動作する、高速・軽量なデータベース。

* [Flyway](http://flywaydb.org/)
複数人でのアプリケーション開発時のDBマイグレーション作業を素早く手軽に行うことができるDBマイグレーションフレームワーク。

* [Commons DbUtils](http://commons.apache.org/dbutils/)
関係データベース(JDBC)へのアクセスを容易にするライブラリ。



## オブジェクトマッピング・帳票出力系
* [Jackson](http://jackson.codehaus.org/)
JavaオブジェクトとJSONの相互変換を行う高機能なライブラリ。

* [Gson](https://code.google.com/p/google-gson/)
JavaオブジェクトとJSONの相互変換をシンプルに行うライブラリ。

* [XStream](http://xstream.codehaus.org/)
JavaオブジェクトとXMLの相互変換を行うライブラリ。

* [dom4j](http://www.dom4j.org/)
XMLをDOMツリーとして使うためのライブラリ。

* [OrangeSignal CSV](http://orangesignal.github.io/orangesignal-csv/index.html)
CSV入出力操作を簡易化させる高機能なライブラリ。

* [POI](http://poi.apache.org/)
WordやExcelといったMicrosoft Office形式のファイルを読み書きできるライブラリ。

* [XLSBeans](https://github.com/takezoe/xlsbeans)
アノテーションを付与してJavaオブジェクトとExcelをマッピングするライブラリ。

* [jXLS](http://jxls.sourceforge.net/)
Excel出力を行うためのテンプレートエンジンライブラリ。

* [Apache PDFBox](http://pdfbox.apache.org/)
JavaでPDFを使うためのライブラリ。

* [JasperReports](http://community.jaspersoft.com/project/jasperreports-library)
PDF/HTML/Excel/CSV/XML/プリンタダイレクトなど様々な帳票出力に対応したライブラリ。



## テスト系
* [JUnit](http://junit.org/)
Javaでユニットテストの自動化を行うためのフレームワーク。

* [testNG](http://testng.org/)
JUnitとNUnitに触発されたテスティングフレームワーク。

* [Spock](https://code.google.com/p/spock/)
Groovyで記述する、JavaとGroobyのためのテスティングフレームワーク。

* [Geb](http://www.gebish.org/)
SeleniumのWebDriverとJQueryライクな記述でWebアプリケーション向けのテストを自動化するためのライブラリ。

* [JMockit](http://jmockit.github.io/)
jMockやEasyMock、Mockitoなど他のライブラリと比べ、高機能なモックライブラリ。

* [AssertJ](http://joel-costigliola.github.io/assertj/)
流れるインターフェイスで、IDEの補完も有効活用出来るAssertを行うためのライブラリ。


## ログ系
* [Logback](http://logback.qos.ch/)
log4jの開発者が作った後継的な実装ライブラリ。

* [log4j2](http://logging.apache.org/log4j/2.x/)
log4jの最新バージョン。1.x系に比べ機能向上、機能追加が行われたライブラリ。

* [SLF4J](http://www.slf4j.org/)
ログ出力のためのインターフェイス。別途アダプターライブラリを経由してlog4jやlogbackなどの実装を利用する。



## 各種ライブラリ系
* [Guava](http://code.google.com/p/guava-libraries/)
Googleによって開発された、ユーティリティライブラリ。
単純なユーティリティとしての機能だけでなく関数型プログラミング、Immutable Collection、キャッシュ、ハッシュなどをサポートする。

* [Caffeine](https://github.com/ben-manes/caffeine)
Guavaからインスパイアを受けた、キャッシュライブラリ。

* [Lombok](http://projectlombok.org/)
AST変換によりJava特有の冗長なコードを簡潔に記述するためのライブラリ。

* [Immutables](https://immutables.github.io/)
Annotation processorによって値クラスを生成するためのライブラリ。

* [AutoValue](https://github.com/google/auto)
Google製のボイラープレートコードを削減するためのライブラリ。

* [Guice](https://code.google.com/p/google-guice/)
アノテーションを使用した依存性の注入 (DI)ライブラリ。JSR 330のリファレンス実装。

* [RxJava](https://github.com/ReactiveX/RxJava)
JavaでReactive Programmingを可能にするためのライブラリ。

* [Reactor](https://projectreactor.io/)
Pivotalが開発している、Reactive Streamsの実装の一つ。

* [Jersey](https://jersey.java.net/)
RESTアーキテクチャにのっとってwebアプリケーションを記述するためのライブラリ。JAX-RSのリファレンス実装。

* [Retrofit](https://square.github.io/retrofit/)
型安全性を重視したHttpクライアント。

* [Jsoup](http://jsoup.org/)
jQuery風HTMLを解析・操作するライブラリ。

* [Ehcache](http://ehcache.org/)
高速・シンプル・軽量なキャッシュライブラリ。

* [ModelMapper](http://modelmapper.org/)
高機能でカスタマイズ性も高いオブジェクトマッピングライブラリ。

* [MapStruct](http://mapstruct.org/)
Annotation processorを使用したタイプセーフなオブジェクトマッピングライブラリ。

* [Functional Java](http://www.functionaljava.org/)
Scalazの主要コミッターも参加する関数型プログラミングのためのライブラリ。

* [Vavr](http://www.vavr.io/)
Java 8以降向けの関数型プログラミングライブラリ。

* [Quartz](http://quartz-scheduler.org/)
指定時間や特定の周期で実行したいジョブをcronの用にスケジュール・コントロールする機能を提供するライブラリ。

* [Joda Time](http://www.joda.org/joda-time/)
Javaで扱いづらい日付関連を便利にするライブラリ。

* [Holiday.java](http://sourceforge.jp/projects/jholiday/)
日本の祝祭日判定を行うライブラリ。

* [Twitter4J](http://twitter4j.org/ja/index.html)
JavaでTwitterを扱うためのライブラリ。

* [Kaptcha](https://code.google.com/p/kaptcha/)
画像認証を行うためのライブラリ

* [ZXing](https://github.com/zxing/zxing)
様々なバーコード形式に対応したのデコード・エンコードライブラリ。

* [QRCode for Java](http://qrcode.sourceforge.jp/)
QRコードのデコード・エンコードライブラリ。

* [ROME](https://rometools.jira.com/secure/Dashboard.jspa)
RSSを生成・取得・解析するためのライブラリ。

* [JSch](http://www.jcraft.com/jsch/)
JavaからSSHを行うためのライブラリ。

* [Commons Lang](http://commons.apache.org/lang/)
Javaのjava.langパッケージを拡張するライブラリ。

* [Commons IO](http://commons.apache.org/io/)
Javaのjava.ioパッケージを拡張するライブラリ。

* [Commons Compress](http://commons.apache.org/proper/commons-compress/)
ファイル圧縮に関するライブラリ。

* [Commons Codec](http://commons.apache.org/proper/commons-codec/)
エンコード、デコードに関するライブラリ。

* [Commons BeanUtils](http://commons.apache.org/proper/commons-beanutils/)
Java Beansなどで利用出来るユーティリティライブラリ。

* [Commons FileUpload](http://commons.apache.org/proper/commons-fileupload/)
Java Servlet/JSPでのファイルアップロードをサポートするライブラリ。

* [Commons CLI](http://commons.apache.org/proper/commons-cli/)
Javaプログラムのオプションを含んだ引数を解析するためのライブラリ。Usageの作成もできる。

* [args4j](http://args4j.kohsuke.org/)
Javaプログラムのオプションを含んだ引数を解析するためのライブラリ。アノテーションベースでUsageの作成もできる。

## ビルドツール
* [Gradle](http://www.gradle.org/)
AntとMavenのいい部分を組み合わせたGroovyで記述するビルドツール。

* [Apache Maven](http://maven.apache.org/)
プロジェクト情報の一元管理、統一したビルドプロセスの提供、依存ライブラリの管理、 プラグイン拡張などによりプロジェクト管理を行うビルドツール。

## その他ツール
* [JaCoCo](http://www.eclemma.org/jacoco/)
EclEmmaの開発チームが開発したカバレッジ測定ツール。

* [FindBugs](http://findbugs.sourceforge.net/)
ソースコードからバグの可能性がある部分を静的解析するツール。

* [Checkstyle](http://checkstyle.sourceforge.net/)
コーディング規約をチェックするための静的解析ツール。


## JVM言語
* [Scala](http://www.scala-lang.org/)
オブジェクト指向言語と関数型言語の特徴を統合したマルチパラダイムのプログラミング言語。

* [Groovy](http://groovy-lang.org/)
Javaの資産を利用可能でDSLなどの開発が得意なスクリプト言語。

* [Kotlin](http://kotlinlang.org/)
Javaよりも簡潔で安全なコードを書け、型推論やラムダ式，トレイトなどのモダンな文法，機能を持った静的型付けのオブジェクト指向言語。

* [Clojure](http://clojure.org/)
マルチスレッドプログラムの開発を容易化するLisp系の関数型プログラミング言語。

* [Ceylon](http://ceylon-lang.org/)
Javaの問題を解決しつつも、最近流行のScalaの言語仕様の複雑さを出来るだけ抑えたプログラミング言語。

## 情報ページ
* [Awesome Java](https://github.com/akullpp/awesome-java)
Javaのフレームワークやライブラリ、ソフトウェアリスト