Java-8 ?>

Java-8

Jarファイル

Jarファイルとは?

通常Javaファイルで作成されたクラスは、コンパイルされると、そのクラス単位でクラスファイル(拡張子が「.class」)が作成されます。Jarファイルはその単体で作成されるクラスファイルをアーカイブしたものです。JAR(ジャー)またはJava Archive(ジャバ アーカイブ)と呼ばれます。

外部ライブラリ(Jarファイル)を利用したプログラミング

インターネット上では、多くの個人や団体がJavaのライブラリを公開しています。中にはとても機能が豊富で世界中で使われているものもあります。そのようなものの中から、今回は commons-lang というライブラリを利用して、その便利な機能を体験してみましょう。実際の開発現場などでは、基本的なJavaの知識だけでは業務を遂行出来るレベルだとは言えません。このようなライブラリを上手く扱えるようになり、限られた時間と資源の中で最大限の結果を出すことが求められるので、このような非標準ライブラリなども出来るだけ沢山の情報を集めるように、普段から意識して下さい。使ってみるとわかりますが、自分でコーディングする時間と労力が格段に減り、実現したい機能や用件をスピーディーに開発できるようになっていきます。

commons-lang あ、Apacheソフトウェア財団が作っているライブラリの1つです。財団では Apache Commons というプロジェクトの一環として、 commons-lang を初め、commons-logging や commons-collectionsなどの便利なライブラリを沢山作っています。

ライブラリ名 含まれるクラス
 commons-lang Java言語の基本機能を強化する様々なクラス郡
commons-logging ログ出力を簡単に行うためのクラス郡
commons-collections コレクションをより便利に使うためのクラス郡

 

Apache CommonsプロジェクトのWebサイトから公開されているライブラリを確認できます。
http://commons.apache.org/
課題:commons-langを使ってみよう

以下の解説を見ながら、実際にcommons-langを使ってみてください。

commons-langの入手

以下のサイトよりcommons-langを入手します。

http://commons.apache.org/proper/commons-lang/download_lang.cgi

今回はJarファイルからライブラリを呼び出すので、Binariesから最新のものをダウンロードします。Macの場合は .tar.gz、Windowsの場合は .zip のアーカイブをそれぞれ選択して下さい。ダウンロードしたら、アーカイブを解凍して「commons-lang3-3.5.jar」をコピーして下さい。

lang01

Java8プロジェクトに新しく「lib」フォルダを作成して、先程コピーしたcommons-lang3-3.5.jar を配置します。(このJarファイルがcommons-langの本体になります。ファイル名の最後はバージョン番号のため、最新版は更新されている可能性があります)

プロジェクトを選択して右クリックメニューから新規 > ソース・フォルダーを選択

lang02

フォルダ名にlibを入力して完了ボタンを押下します。

lang03

libのソース・フォルダーを作成して、commons-lang3-3.5.jarを配置すると以下のように表示されます。

lang04

このままではライブラリが使えないため、プロジェクトでこのライブラリがきちんと利用できるように、ライブラリの設定を行います。
プロジェクトの右クリックメニューからプロパティーを選択します。

lang05

プロパティー設定ウィンドウの左メニューから「Java Build Path」を選択して、その中から「ライブラリー」タブを選択します。
選択すると「JARの追加」ボタンが右側に表示されるので、このボタンを押下します。

lang06

以下の画面が表示されるので、Java8プロジェクト配下のlibからJarファイルを選択します。

lang6-1

最終的には以下のようにプロジェクト配下に「参照ライブラリー」が追加されていると、追加したライブラリーが利用できるようになります。

 

lang07

commons-langの機能を実際に使ってみよう

EqualsBuilder

以下のような銀行情報を扱うBankクラスを題材にして、ライブラリを使用しない通常の実装と、EqualsBuilderを使った実装の違いを確認してみましょう。

このように、通常はあるクラスのオブジェクトが、そのクラスのオブジェクトであり、かつ全てのフィールドが同じ値となっているかを判定するには一つひとつのフィールドを比較していく必要があります。このような実装だと、クラスのフィールドが増えればそれに合わせてメソッドの比較処理も増えていき、コードは冗長化して、可動性の低いものとなっていきます。
これをEqualsBuilderを用いて、実装すると以下のようになります。比較処理がたったの1行で完結しています。

reflectionEquals()はBankクラスが持つすべてのフィールドが等価であるかを自動的に調べてくれます。一部のフィールドを等価判定から除外するような使い方も可能です。reflectionEquals()を使用しないコードと、reflectionEquals()を使用したコードそれぞれを用意して、判定結果が同じになることを自分で確認しておきましょう。
ちなみに、このメソッドの実装内容はcommons-lang3-3.5-sources.jar を参照先として設定すると確認できます。今回使用したメソッドは以下のように実装されていることが確認できると思います。

ライブラリを使用しないコードの実装と、使用したコードの実装ではかなりの違いがあることがわかるかと思います。また、このようなライブラリは動作の検証テストもしっかりとされているため、ほぼ不具合なく使用することが出来ます。ゼロから自分でライブラリを作ることも必要な場面も実践では出てくる可能性もありますが、外部ライブラリでカバーできるような処理は極力ライブラリを使用しましょう。自分で作成したライブラリは実装コストだけでなく、動作検証テストのコストも発生します。バグが見つかった場合の修正も基本的には作成した本人が修正するため、保守するコストも発生することも認識しておきましょう。

以下のサイトも参考にしてください。

Java Eclipseでライブラリを使って開発効率向上
http://ittoybox.com/archives/385

JavaDoc

JavaDocとは?

Javaでは、「Javadoc」と呼ばれるコメントを記述できます。Javadocはプログラムについて説明するドキュメントをソースコードに埋め込むための仕組みです。
プログラムについての説明をソースコードに埋め込むことができない場合は、プログラムの説明文は別のファイルで管理することになります。しかし、このようにするとソースコード用のファイルと説明用のファイルの両方を管理する必要が出てきます。別ファイルなので、プログラムの更新があった場合などにうっかり説明文の更新を忘れてしまいがちになってしまいます。この結果、プログラムの動作と説明が一致しないことが往々にして起こります。
このような場合にJavadocを使うと、ソースコードの修正時にドキュメントの修正も連動して行えるため、前述のような事態が起こりにくくなります。
Javadocではクラスの概要やメソッドの概要を記述しておくと、その情報からHTML形式のドキュメントファイルを生成してくれます。Java Platform SE のAPIリファレンスは実際に、この機能を使って作成されています。

Javadocのタグ一覧

タグ 記述内容
@author 開発者名を記述する。
@exception メソッドが投げる例外クラスとその説明を記述する。— @throwsも参照。
@param メソッドの引数や総称型のパラメータを記述する。引数の数だけ記述する必要がある。引数名と引数の概要を記述する。
@return メソッドの戻り値を記述する。戻り値がvoidの時は記述しなくて良い。
@see 関連する他のメソッドまたはクラスを記述する。このタグの内容は自力で記述するのは大変なのでIDEなどで自動生成すると良い。
@since クラスまたはメソッドの導入されたバージョンを記述する。IDEなどの自動生成ツールでここに日付やバージョン番号などの情報をわりあてることができる。
@throws メソッドが投げる例外を記述する。@exceptionと同義。Javadoc 1.2で追加された。
@version クラスまたはメソッドのバージョンを記述する。バージョン管理システムを用いてこのバージョン番号割り当てを自動化することができる。
{@link} 標準テキストのラベルとインラインリンクを挿入する。{パッケージ名.クラス名#メソッド名 label}という方式で記述。labelの文法は@seeと同じ。
{@docRoot} 生成されたドキュメントのルートディレクトリを基点とする相対パスを表す。
@serial デフォルトで直列化可能フィールドのdocコメントで使用する。このタグの後に説明を入れる。これは直列化形式ページの生成に使われる。

 

詳細なJavaDocの仕様についてはOracleのサイトで確認して下さい。
https://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/javadoc.html

JavaDocの書き方

以下にJavaDocの書き方サンプルです。

コメントの中は大きく分けると「説明文」と「タグセクション」の二つに区分します。説明文はクラスやメソッドなどを説明した文のことで、複数行で記述することができます。コメントの先頭部分から最初のタグセクションが現れるまでが説明文となります。
※説明文はHTML文として解釈されるため、別の行に記述しても改行はされずに表示されます。明示的に改行する場合は<br>を記述して下さい。
タグセクションは先頭の文字が「@」で始まります。「@version」や「@author」など多くのjavadocタグが用意されており、それぞれの意味はJavaDocのタグ一覧で確認して下さい。

課題:JavaDocを使ってみよう

以下の説明を見ながら、実際にJavaDocを使ってみてください。

JavaDocの作成

では実際に、Eclipseを利用してJavaDocを作成してみましょう。

1.出力したいJavaDocのクラス、もしくはプロジェクトを選択して右クリックメニューから「エクスポート」を選択します。

javadog01

2.エクスポートのポップアップウィンドウから「Java > Javadoc」を選択して、次へボタンを押下します。

javadog02

3.出力するクラス(もしくはプロジェクト)を選択して、完了ボタンを押下します。(その他の項目は全てデフォルト選択で構いません)

javadog03

4.プロジェクト配下に「doc」フォルダが出力されているので、この中にある index.html をブラウザで表示します。

javadog04

5.以下のようなJavaDocが表示されていれば終了です。ここでクラスやメソッドの説明を読むことができ、これがそのままプログラムのドキュメンテーションとなります。

javadog05

 

ドキュメントの書き方について
http://qiita.com/maku77/items/6410c67ce95e08d8d1bd

まとめ

ここまでで、Javaの開発現場で使われる様々な機能やツールを紹介してきました。次章から、実際に動くアプリケーションの構築を通して、Java言語でのWebアプリケーション開発を体験していきます。