プロジェクト

全般

プロフィール

Java SEアプリケーション開発環境構築 alfa

想定プロジェクト

Java SE 8でアプリケーションソフトウェアを開発するプロジェクト「alfa」を想定し、そのalfaプロジェクトにおける開発環境を構築します。
対象となるアプリケーションソフトウェアの主な機能は次とします。

  • GUI(JavaFX)
  • TCP/IPネットワーク
  • ファイルI/O
  • データベース

デスクトップアプリケーションとしてユーザーインタフェース(GUI)を持ち、ネットワークで他のマシンのソフトウェアとデータ交換を行い、ファイル入出力処理を行い、データベース(アプリケーション固有に使うクライアントサイドDBで、Java DBなど)を持つとします。デスクトップアプリケーションは、必ずしもインターネット接続環境にはないとし、また、実行にあたりサーバーとの常時接続もないとします。

開発者は数十人が関わるとし、その人数に対応できるインフラ(ビルド、構成管理、不具合管理)を持つとします。

基本方針

開発者それぞれが自分用に占有できる開発マシンを持ちます。開発は主に統合開発環境(IDE)を使用します。
プロジェクト資産は共有のサーバーで管理します。
開発者が作成したソースコードは開発者自身のマシン上だけでなく、共有のビルドサーバー上でビルド可能とします。
開発者間で共有する設計情報(APIなど)は構成管理対象とします。具体的にはAPIのJavadocドキュメント、補足ドキュメントはリリース番号を付与して共有サーバーで公開するものとします。
使用するサードパーティ製ライブラリとのその参照設定を一貫させるため、ライブラリと設定を配布します。
ソースコードの書式を開発者間で一貫させるため、開発ツールの設定(ソースコード整形設定、ファイル先頭コメント、プロジェクトで共通化するコードスニペットなど)を作成・管理・配布します。
静的検証ツールは開発者の環境にインストールし、適用するルールセットを作成・管理・配布します。ルールセットはビルドサーバーでも使用し結果をレポートします。
サーバーのビルド環境は、CI(継続的インテグレーション)を指向します。

基本方針におけるポイント、メモ

統合開発環境の選定

開発者の使用する統合開発環境に対してプロジェクト共通の各種設定、ツールの組込みを行います。Javaにおいては、統合開発環境が複数製品存在するため、プロジェクト推奨統合開発環境を一つ定め、各種設定・ツールの組込みは推奨統合開発環境について提供します。本来は推奨ではなくマストにしてもいいと思っていますが、そうすると統合開発環境戦争が勃発し不幸な歴史を繰り返すことになるので、推奨以外の使用を禁止することはしません。ただし、自己責任において環境構築を行ってもらいます(推奨統合開発環境用に配布した設定を取り込んでもらう、配布したプラグイン相当のことは手作業でもしてもらう、ソースコードは推奨統合開発環境用のプロジェクトとしてコミットしてもらう、など)。自分が使いたいツールを使う環境を整えることで、これを機にツールマスターが育つのもうれしいことです。

Java SE標準ライブラリ以外に、サードパーティ製ライブラリを使う場合、ライブラリの配置場所、クラスパスの指定方法が個人の環境依存にならないよう考慮した設定をする必要があります。

ビルドツールの選定

開発者各自の統合開発環境上でビルドするほか、共通のビルドサーバーで自動ビルドするので、コマンドラインからもビルドできるAnt、Maven、Gradleなどを使います。それぞれ得手不得手があるので、インターネット接続可否、使用する統合開発環境との整合性などの状況に応じて選択します。
また、ビルドした後、実機への展開(デプロイ)を検討し、インストーラが必要であればインストーライメージの作成までできるようにします。「alfa」プロジェクトでは、実機はスタンドアロンのPCを想定しているので、実行するPCのOSのネイティブ形式インストーラを作成します。

静的検証ツールの利用

プログラムを仕上げてから静的検証ツールをかけて、指摘箇所の対応をするのはロスが大きいので(再帰テスト実施、時には設計変更)、プログラムを書き始めた当初から適用します。そのため、開発者個人の統合開発環境に自動で指摘を知らせるよう性的検証ツールと適用ルールセットを組み込んでもらいます。また、同じルールセットでビルドサーバー側で定期的に検証します。サーバー側の検証では状況をレポートできるよう可視化まで作りこみます。可視化しておくことで随時プロジェクトの問題状況を把握できるようになります。

テストツール

テストツール選択は、プロジェクトのテスト計画(テスト戦略)によって変わってしまうので、最初にテスト計画を考える必要があります。
Java言語は強い型付けの言語なのでコンパイラでの検証が強力ですが、それでもコンパイラが通ったからといって終わりにしてしまうとバグが多数後逸してしまいます。バグの対処は早期発見早期治療が肝なので、後逸すればするほどプロジェクト全体のロスを増やします。本プロジェクトは、GUIやネットワーク、ファイルなどプログラム外のイベントやデータに基づき動作するため、テストが不十分だと運用に入ってから「想定外1」の事象によりエラーとなって慌てることになりかねません。そこで、ユニットテスト段階でテストを厚く実施するテスト計画(戦略)を採ることにします。特に外界との境界を担う部分に注力します。逆に、単純なロジック(Beanに値をセット/ゲットする的なもの)はテスト効果が薄いので手を抜きます。

テストツールとして、ビジネスロジック中心のコード(処理へのインプットとアウトプットがプログラム内で閉じる機能)であれば、JUnit等のユニットテストツールでテストが可能ですが、UI、ネットワーク、ファイルI/O、データベースなどプログラムの境界の内外を通した処理になるのでユニットテストの敷居が高くなります。JUnit等の基本的なユニットテストツールだけでは不十分なので、FEST-SwingやTestFXなどのGUI自動テスト用のツール、JMockitなどのモックライブラリを使ったネットワーク・ファイル・データベース等のI/Oのテストを行います。

1 「想定外」:十分に検討していれば「想定内の事象に対する対処(エラー処理コード等)」をしていたはずなのに、設計時に正常系にちょこっと異常系を加えただけのユースケースしか考えず、ユニットテストレベルでも異常データ(境界条件)を扱わず、結合テストでは設計時に考慮したちょこっと異常系のテストしかしないと、「想定外」と言い訳する羽目になります。

開発ツールチェインの作成

標準ツールチェイン

種類 ツール名 配置場所 備考
開発者PC ビルドサーバー
Java開発キット Oracle Java SE 8 Development Kit
統合開発環境 Oracle NetBeans IDE 8.0
ビルドツール Apache Ant (NetBeans搭載)
Apache Ant 1.9.3
GUIデザインツール Oracle SceneBuilder 2
データベース H2 Database Engine
ライブラリ EclipseLink
C.I.ツール Jenkins
WiX Windows OSが動くビルドサーバー
静的検証ツール NetBeans CheckStyleプラグイン
NetBeans PMDプラグイン EasyPMD 4.0(PMD 5.0.5)はJava SE 8未対応
NetBeans FindBugsプラグイン FindBugs Integration 1.27(FindBugs 2.0.3)はJava SE 8未対応
CheckStyle 5.7 ラムダ式、デフォルトメソッド等でエラーが出る
Jenkins CheckStyleプラグイン
PMD
Jenkins PMDプラグイン
FindBugs
Jenkins FindBugsプラグイン
ユニットテスト NetBeans JUnitプラグイン
JUnit 4.11
TestFX
JMockit 1.7
動的検証ツール NetBeans JaCoCoプラグイン
Jenkins JaCoCoプラグイン
JaCoCo
NetBeansプロファイラ
構成管理 Subversion(NetBeans搭載)
Subversion 1.8
不具合・課題・情報共有 Redmine 2.5
Chrome または Firefox RedmineのAttach image from clipboardプラグイン動作条件

オプションツール

ソフトウェア開発にあると効率がよいツール、幾つか代替ツールがあるので好みのものを使えばよいツール、全員は必要ないので作業をする場合に使えばよいツールなどをオプションツールとして列挙します。

  • Cygwin
    Unixエミュレーションとその上で動くUnix系各種ツールの集まりです。bash, find, grep, awk, sedほか
  • 7zip
    zip, tar等のアーカイブ形式, gzip, bzip2, 7zip等の圧縮形式に対応したツール
  • NetBeans JPA Modelerプラグイン
  • FreeMind
    マインドマップツール
  • WinMerge
    ファイル・ディレクトリの比較ツールで、3wayマージ機能を持つのでバージョン管理ツールから外部マージツールとして呼び出すようにすると快適
  • Git
    プログラム開発は紆余曲折(試行錯誤)を経るので、いったりきたりを記録するために開発者のローカル上ではGitを使ってソースコードを管理すると便利です。git-svnを使ってプロジェクトのSubversionリポジトリと同期させることで、開発者のローカルでの履歴管理とプロジェクトに公開する履歴を分けることができます。WindowsでGitを使うには、コマンドライン派ならCygwin git、GUI派ならSourceTreeとNetBeans標準搭載のGit機能がいいでしょう。

構築手順

開発者PCへの開発環境構築手順

開発者用PC(Windows OS 64bit版)とし、インストール作業はインターネット接続ができる状況で実施します。

Java SE Development Kit 8のインストール

SceneBuilder 2のインストール

JavaFX Scene Builderサイト から、Download項の[Scene Builder 2.0 Early Access]へのリンクを辿り、Windows 32/64bit用インストーラをダウンロードします。

  • 2014-03-31現在ダウンロードできるファイル名 javafx_scenebuilder-2_0-ea-b14-windows-13_feb_2014.msi

インストーラを実行しインストールします。

NetBeans IDEのインストール

NetBeans IDE 8.0のインストール手順(公式、日本語) に沿ってインストールします。
インストールにあたっての補足事項を次に示します。

  • 「インストーラのダウンロードオプション」は、"Java SE"とします(ダウンロードファイル名:netbeans-8.0-javase-windows.exe)。
  • インストール途中で、JUnitをインストールするかどうか問われるのでインストールするを選択します。

ソースファイルの文字コード、インデント設定、自動整形設定などのNetBeansの設定については、別途プロジェクト共通設定として配布します。

NetBeans Checkstyleプラグイン(Checkstyle Beans)

2014-06-03時点ではインストール見合わせ

Checkstyleに設定するルールは、別途プロジェクト共通設定として配布します。

NetBeans PMDプラグイン(EasyPMD)

PMDに設定するルールは、別途プロジェクト共通設定として配布します。

NetBeans FindBugsプラグイン(FindBugs Integration)

FindBugsに設定するルールは、別途プロジェクト共通設定として配布します。

NetBeans JaCoCoプラグイン

EclipseLinkのインストール

2014-06-03時点ではインストール見合わせ
NetBeans IDE 8.0は、EclipseLink 2.5.1を同梱しているので別途インストールは不要です。
EclipseLinkの公式Webサイトダウンロードページ から、最新版のEclipseLink(Installer Zip)を入手します。

  • eclipselink-2.5.1.v20130918-f2b9fc5.zip

ダウンロードしたアーカイブファイルを一時作業ディレクトリに展開し、生成されたeclipselinkディレクトリをC:\Program Files\Javaディレクトリの下に移動します。

NetBeansのライブラリ設定は、別途プロジェクト共通設定として配布します。

H2 Databaseのインストール

H2 Database Engine公式サイト から、Windows Installer形式のインストーラをダウンロードします。

  • h2-setup-2014-01-18.exe

インストーラを実行します。

TestFXのインストール

Windows MSI形式インストーラを実行してインストールします。

NetBeansのライブラリ設定は、別途プロジェクト共通設定として配布します。

JMockitのインストール

Windows MSI形式のインストーラを実行してインストールします。

NetBeansのライブラリ設定は、別途プロジェクト共通設定として配布します。

Webブラウザ

Redmine利用時に、画像をクリップボードから直接添付ファイルとして貼り付ける機能をRedmineに用意していますが、対応ブラウザがFirefoxかChromeに限られます。そこで、FirefoxかChromeをインストールします。