各種プログラム言語と開発環境まとめ(Java)

 ここでは、Javaと、その開発環境、フレームワークについてまとめます。


 長らく無償プログラムであったJavaですが、JavaSE 11リリース以降、事実上、有償となりました。今後利用する際はその費用を考慮する必要があります。

 フレームワークについてはApache Strutsの脆弱性問題であったり、Seasarのサポート終了であったり、信頼できない事象が続いています。下手にフレームワークを使うと、該当のフレームワークを利用できなくなった際、リライト及び再テストに大きく工数が発生してしまいます。企業において、今後フレームワークの利用が禁止になるのではないか、とすら感じる状況です。

1.Java

 Javaはコンパイル方式のプログラム言語の一つです。現在、基幹系システム含め大規模なシステム開発は、ほぼJavaで行われいると言って過言ではない状況です。さらにWEBシステム、Android端末用のアプリ、IoTの小型デバイスの組み込みシステムにも使用されます。

 オブジェクト指向プログラミング言語の草分けとしても知られています。


 ~ Javaのエディション ~ 

エディション 備考
Java SE 一般的に利用されるエディションです。
最新バージョンはJava SE 9ですが、Java SE 8よりもサポート期限が短いnon-LTSというバージョンのためアップデートには注意が必要です。
Java SE 7までは、既にパブリックアップデートが終了しています。
Java EE Java EEは、Java SEにServlet、JSPと呼ばれるサーバーサイトアプリケーション、EJB(:Enterprise Java Beans)等のコンポーネントをパッケージしたエディションであり、Java SEのフレームワークとして分類されることもあります。
いわゆる、サーバー向けのJavaコンポーネント群です。
最新バージョンはJava EE 8です。
Java ME 主に組み込みシステムでの利用を目的とした。最小パッケージ化されたエディションです。
最新バージョンはJava ME 8です。
Java FX JavaVM上で動作するリッチインターネットアプリケーション(RIA)のGUIライブラリ。
Java SE 7 Update2以降は、Java SEに標準搭載されています。


 Java SEとJava EEの大幅な管理方針変更

 2017年9月25日にJava SE 9とJava EE 8がリリースされましたが、これと併せて、Java SE及びJava EEの管理方針について大幅な変更がアナウンスされました。


 ~ Java SEの管理方針変更 ~ 


 Java SEは9以降、LTS(:Long Time Support)と呼ばれる少なくとも5年間保証されるバージョンとnon-LTSと呼ばれる次のバージョンのリリースと同時にサポートが終了するバージョンに分けてリリースされることになりました。Windowsに例えると、Windows8がnon-LTS、Windows8.1がLTSと言えます。現在計画されているリリースバージョンは以下の通りです。


バージョン LTS / non-LTS 利用開始日 パブリックアップデート※1 メインストリームサポート期限
(Premier Support期限)
延長サポート期限
(Extended Support期限)
Java SE 6 - 2006年12月 終了 2015年12月 2018年12月
Java SE 7 - 2011年7月 終了 2019年7月 2022年7月
Java SE 8 - 2014年3月 2020年末※2 2022年3月 2025年3月
Java SE 9 non-LTS 2017年9月 2018年3月 2018年3月 設定なし
Java SE 10 non-LTS 2018年3月 2018年9月 2018年9月 設定なし
Java SE 11 LTS 2018年9月 ×(有償化) 2023年9月 2026年9月

※1:無償で更新プログラム、セキュリティパッチが提供される期間です。これ以降はサポート契約が必要です。
※2:Java Updateによるアップデート期限です。Oracleダウンロードサイトでの最新アップデート更新は2019年1月末で終了します。


 上図のように、Java SE 9Java SE 10はnon-LTSであることから、Java SE 11リリースによりサポートが終了しました。


 メインストリームサポート期限、延長サポート期限は、OracleからJava SE Advanced Desktop、Java SE Advanced、Java SE Suite、Java SE Desktop Subscription、Java SE Subscriptionのいずれかのサポート契約を購入した場合にのみ適用されます。
 サポート契約せず無償で利用する場合は、パブリックアップデート期間が終了した時点で更新プログラム、セキュリティパッチが提供されなくなります。


 Java SE 11からパブリックアップデートが廃止となり、サポート契約を購入しないと更新プログラム、セキュリティパッチが提供されません。それ以前にサポート契約しないとOracle JDKをダウンロードできません。
 また、サポート契約については今後サブスクリプションモデル(月額料金制)に移行するとのことです。
 ・Java SE Desktop Subscription(クライアント用)1ユーザー当り:\300円 / 月
 ・Java SE Subscription(サーバー用)1プロセッサー当り:\3,000円 / 月


 サポート契約せず、無償で利用したい場合、OSS(GNU、GPL)のOpen JDKを利用しなければならないとのことです。

 Java SE8のパブリックアップデート期限である2020年末以降はJava離れが進むかもしれません。



 ~ Java EEの管理団体がOracleからEclipse Foundationへ移管 ~ 

 Oracleは、Java EEの最新バージョンJava EE 8を2017年9月25日に発表しましたが、このリリースを以て、開発主体をEclipse Foundationに移管すると発表しました。これにより今後は、名称をEE4J(Eclipse Enterprise for Java)としてEclipse Foundationが開発を継続して行くとのことです。


1-1.フレームワーク

 Javaのフレームワークには非常に多くの種類がありますが、ここでは代表的なフレームワークにを紹介しています。


Spring Framework

 Javaの代表的なフレームワークです。数多くの機能をモジュールとして提供します。無償、商用可、OSSのApache Lisenseで運用されています。
 Spring Frameworkの代表的な概念として、
 ・依存性注入※
 ・アスペクト指向プログラミング※
 を実現できるように、構成されています。


Spring Framework (https://projects.spring.io/spring-framework/)



※依存性注入(DI:Dependency Injection) 
 コンポーネント間の依存関係をプログラムのソースコード内に書かず、外部の設定ファイルなどを利用することで依存関係を注入するものです。これにより各コンポーネントの独立性が高まり、単体テストが容易になります。

※アスペクト指向プログラミング(AOP:Aspect Oriented Programming) 
 オブジェクト指向ではうまく分離できない機能(クラス間を横断 (cross-cutting) するような機能、単純に属性と操作に分離できない機能等)を「アスペクト」として、モジュール化するプログラム指向。


Apache Struts

 一昔前はJavaの代表的なフレームワークとして、多くの企業に利用されていました。元祖と言えるJavaフレームワークでしたが、多数の脆弱性が発見され、情報流出事件の引き金となってしまいました。現在の企業システムではStrutsの利用を控える場合が多いです。


Seasar

 人気のあるフレームワークでしたが、2016年9月26日を以てOSSとしてのサポート及びメンテナンスが終了しました。利用中であれば、別のフレームワークに移行か、標準ライブラリを利用してリライトする必要があります。


Play Framework

 JavaとScala用のWebアプリケーションフレームワークです。Java EEは非常に複雑で難易度が高いのですが、Play Frameworkはこれに比べ非常に簡単、軽量にWebアプリケーションを実装できます。無償、商用可、OSSのApache Lisenseで運用されています。


Play Framework(https://www.playframework.com/)


1-2.テストフレームワーク

JUnit

 Javaで開発されたプログラムの単体テストを実施するためのフレームワークです。無償、商用可、OSSのEPL(:Eclipse Public License)で運用されています。


JUnit(http://junit.org/junit5/)


1-3.DBアクセスライブラリ(O/Rマッパー)

Spring Data JPA

 RDBMS用O/Rマッピングフレームワークです。Spring Frameworkの拡張ライブラリのため、Spring Frameworkとは別途Springのサイトからダウンロードが必要です。Spring Frameworkがフレームワークのデファクトスタンダードとなる中、O/RマッパーはSpring Data JPAを利用するのが正しい選択かもしれません。


Spring Data JPA(https://projects.spring.io/spring-data-jpa/)


Hibernate

 JDBCでのO/Rマッピングを自動化するフレームワークです。Java EEと併せて利用することで、JTAを用いた高度なトランザクション処理や、JDBCコネクションへ直接アクセスして各RDBMSの持つSQLの拡張機能を利用することにも対応しています。メリットとして特定のDBMSへの依存度の軽減、コーディングの簡素化などがありますが、デメリットとして障害時、DB側とプログラム側どちらの障害か切り分けが難しい、仕様が複雑で習得の難易度が高い、などがあります。無償、商用可、OSSのLGPLで運用されています。


Hibernate(http://hibernate.org/)


S2JDBC

 SeasarプロジェクトのO/Rマッピングフレームワークです。非常に使いやすいと評判したが、Seasarが2016年9月26日を以てOSSとしてのサポート及びメンテナンスが終了するのに合わせてS2JDBCも終了となりました。利用中であれば、別のO/Rマッパーに移行するか、JDBC標準でリライトする必要があります。


Doma

 SeasarプロジェクトのO/Rマッピングフレームワークです。Seasarプロジェクトですが、Domaは開発が継続されることになりました。ただし、個人サイトによる運営であることから、企業での利用については、今後のサポートに対する継続性は不透明であり、控えるべきではないかと思われます。


1-4.プロジェクト管理、継続的インテグレーションツール

プロジェクト管理ツール

 デプロイまでの開発環境構築から、ビルド、プロジェクト管理などを一元的に管理するツールのことを言います。ガントチャートなどのスケジュール的なプロジェクト管理とは意味が違います。

 ※デプロイ:プログラムを本番環境にアップロードして、利用できる状態にすることです。主にJavaで構築されたWebアプリケーションの本番リリース時に使われる用語です。


Apache Maven(メイバン)

 Javaに特化したプロジェクト管理ツールです。主にEclipseにプラグイン追加して利用します。
 無償、商用可、OSSのApache Licenseで運用されます。

Apache Maven(https://maven.apache.org/)


継続的インテグレーションツール

 継続的インテグレーション(CI:Continuous Integration)とは、エクストリーム・プログラミング(XP)の1プラクティスです。



~ エクストリーム・プログラミング(XP)開発プラクティス ~ 

・テスト駆動開発
 実装するより先にテストを作成します。実装はそのテストをパスすることを目標に行います。

・ペアプログラミング
 プログラマーがペアを組んで、一方のプログラマーがプログラミングする際に、もう一方のプログラマーが横で補助します。

・リファクタリング
 完成済みのコードでも、随時、改善処置を行います。ただし、リファクタリングでは、外部から見た動作は変更せずに、内部構造がより見通し良く優れたものになるようにすることに限定されます。

・ソースコードの共同所有
 ソースコードの共同所有誰が作ったソースコードであっても、開発チーム全員が断り無く修正を行うことができます。ただし、全てのコードに対する責任を、全員が担います。
 ※このプラクティスについては異論があり、エクストリーム・プログラミングに含むべきではないとの意見もあります。

・継続的インテグレーション
 単体テストをパスするコードが完成するたび、すぐに結合テストを行い、問題点や改善点を探します。少なくとも一日に一回は、結合テストを行います。また、全体のコンパイルおよび自動テストを行うための継続的インテグレーション専用のコンピュータまたは環境を準備することが推奨されています。

・YAGNI
 You Aren't Going to Need It.(今必要なことだけ行います)。先の事を考えて、前払い的に機能を増やし、実装を複雑化させる事は避けます。


Jenkins

 エクストリーム・プログラミングの1プラクティスである、継続的インテグレーションを、Javaで実践するためのツールです。無償、商用可、OSSのMITで運用されています。


Jenkins(https://jenkins.io/)


1-5.アプリケーションサーバー

 大まかには、プログラムを実行し、WEBサーバーと、DBの橋渡しを行います。業務用のシステムを、プレゼンテーション層、アプリケーション層、データ層の3つに分けて構成する3階層モデルにおいて、アプリケーション層のプログラムを実行する役割を担うサーバーと言えます。


Apache Tomcat

 Javaのアプリケーションサーバーとして最も良く知られています。無償、商用可、OSSのApache Licenseで運用されています。


Apache Tomcat(http://tomcat.apache.org/)


GlassFish

 Java EE向けのアプリケーションサーバーです。Java EE 8からJava EEに内包されるようになりました。


WildFly(JBoss)

 Java EE向けのアプリケーションサーバーです。レッドハットの商用版JBoss Enterprise Application Platformと名称をはっきり区別するためJBossからWildFlyに名称変更しました。無償、商用可、OSSのLGPLで運用されています。


WildFly(http://www.wildfly.org/)


1-6.IDE

Eclipse

 JavaのIDEとして最も多く利用されています。日本語化されていないので、必要に応じてPleiadesを利用して日本語化します。無償、商用可、OSSのEclipse Public Licenseで運用されています。


Eclipse(https://www.eclipse.org/)


NetBeans

 Oracleを中心としたコミュニティが提供するIDEです。Oracleが関わるので純正のIDEと言いたいところですが、シェアはEclipseの方が断然高い状況です。ただし、情報が早く伝わる利点があるのか、Javaの改変時にいち早く対応します。このIDEは標準で多言語対応しており、Pleiades等プラグインなしに最初から日本語で利用できます。無償、商用可、OSSのGPL Licenseで運用されています。


NetBeans(https://ja.netbeans.org/)


IntelliJ IDEA

 チェコの企業、ジェットブレインズが開発するJava用のIDEです。無償版(Community)と商用版(Ultimate)があり、ソースについてもOSSとして公開されているのは無償版(Community)の部分のみです。無償版(Community)ではJava EE非対応、データベースツール非対応など制限があります。現場で利用する場合は、一度無償版(Community)で試してみる必要があると思います。日本語化されていないので、必要に応じてPleiadesを利用して日本語化します。


 ~ 商用版の価格 ~ 

使用年数 価格
1年目 \56,387 ※
2年目 \45,087 ※
3年目以降 \33,787 ※

※推定小売価格。1ドル113円で換算。


IntelliJ IDEA(https://www.jetbrains.com/idea/)


Visual Studio Code

 マイクロソフトが提供する、ほぼ全てのプログラム言語に対応する軽量IDEです。こちらでまとめています。


Android Studio

 Googleが提供するAndroidアプリ開発に特化したIDEです。日本語化されていないので、必要に応じてPleiadesを利用して日本語化します。無償、商用可、OSSのApache Licenseで運用されています。


Android Studio(https://developer.android.com/studio/index.html?hl=ja)




おすすめの関連記事

各種プログラム言語と開発環境まとめ(概要)
プログラム言語の概要についてまとめました。