Javaプログラマは、大きくはサーバサイドプログラマとAndroidスマートフォンアプリプログラマに分かれます。Javaプログラマは、アプリケーションの開発にあたり、有無を言わさず多くの知識を習得せざるを得ません。
本記事では二回にわたり、実際のプロジェクトの現場でJavaプログラマが使用する必須ツールについて解説していきます。
1. Eclipse
Javaの定番の統合開発環境(IDE)です。IBMにより開発され、現在はEclipse Foundationの管理するオープソースとなっています。
JavaのIDEとしては、NetBeansとIntelliJ IDEAもあります。しかし、まずは、Eclipseを使いこなせるようになるのが一番です。理由は、1.プラグインが豊富であること、2.Eclipseを拡張したIDEを各社が提供しているためEclipseに慣れていると習得しやすいこと、3.Googleの提供するAndroidのIDEであるAndroid StudioがEclipseベースであることの三つです。
NetBeansとIntelliJ IDEAにもメリットはありますので、Eclipseを一通り使えるようになったら、それらも使ってみて比較しても良いでしょう。しかし、まずは、Eclipseの習得が最初です。
Eclipse本体はシンプルなIDEですが、豊富なPluginによりJavaプログラマに必要とされる作業を一通り支援してくれます。例えば、JUnitによるユニットテスト、網羅度測定、MavenやGradleによるビルド、SubversionやGitによるソース管理、ヒープメモリ解析など多岐にわたります。
→ Gitとは?
2. javapコマンド
Java SDKに付属のJavaのクラスファイル逆アセンブラです。アセンブラを使用したことがない方は逆アセンブラに馴染みがないかもしれません。Javaはjavacコマンドにより、ソースコードからJavaVMで実行可能なバイトコードをコンパイルして生成します。javapコマンドは、そのコンパイル後の拡張子が.classのファイルを逆アセンブルします。逆コンパイルでないことに注意してください。生成するのは、バイトコードです。使い方は、
https://docs.oracle.com/javase/jp/6/technotes/tools/windows/javap.html
を参照してください。
普通のJavaプログラマであればjavapコマンドを使う機会は少ないかもしれません。しかし、以下のような人はこのコマンドを使用することになります。
・Javaのソースコードと実行結果がなぜか一致しない
・Javaの実行環境が途中で落ちる
大抵の場合にはjavapに行くまでに解決するのですが、どうしてもわからない障害については、javapで逆コンパイルして、Java Virtual Machine Specificationに示されたinstruction(命令)を調べて、クラスファイルに描かれているバイトコードが正しいか、または想定外の動きをしていないか確認します。Java Virtual Machine Specificationは以下にあります。和書も出版されています。
https://docs.oracle.com/javase/specs/
3. jdbコマンドまたはEclipse Javaデバッガ
Javaスタンドアロンアプリケーションの場合、Java SDKに付属のjdbコマンドでデバッグしても良いでしょう。しかし、Eclipseを使用しているのであればEclipseのソースレベルデバッガの方を使用します。
jdbが効いてくるのは、リモートデバッグの場合です。WebアプリケーションをJavaで開発した場合、Webアプリケーションサーバのリモートデバッグ機能を有効にすることで、jdbやEclipseのデバッガからWebアプリケーションサーバにネットワーク接続し、リモートデバッグが可能になります。
4. JUnit
開発標準がウォーターフォールモデルの場合、ユニット(単体)テスト工程で、JUnitが必要です。他の言語、例えば、C言語の場合には、ソースコードを印刷して、gdbなどのデバッガで一行ごとにステップしながら、紙に、通過したコードを色塗りしたりします。
JUnitは、Javaプログラム、実際にはクラスの単体テストを容易にします。デファクトスタンダードですので、必ず使用します。
EclipseなどのIDEにおいてJUnitプラグインを使用することで、単体テストはボタン一発で出来ます。予め単体テストでの正否の条件をテスト用のクラス(ドライバと言います)のソースファイルに記述しますが、慣れると簡単です。
EclipseのJUnitプラグインを使用すると、HTML形式で各クラスの網羅度を示すグラフを表示する機能もありますので、テスト工程終了判定や出荷判定会議での証拠となります。
JUnitを使用する際には、Mock(モック)についても理解してください。JUnitで一気にテストを実施する場合に、テスト対象のクラスのメソッドを実行するわけですが、そのメソッドの中で条件分岐がある場合、その条件をドライバに記載することが出来ます。
5. JConsole,VisualVM
いずれもJava SEに付属のJava仮想マシン(JavaVM,JVM)の詳細情報を取得し、グラフィカルに画面に表示してくれるスタンドアロンアプリケーションです。必要とする情報により、どちらのツールを使用するかを決めます。VisualVMの方が機能豊富です。
VisualVMでは、ヒープダンプを簡単に取得することが出来ます。そのヒープダンプをEclipseのヒープダンププラグインで解析すると、どのクラスがどれだけのメモリを消費しているかがわかります。メモリリークの検出に役立ちます。
Javaプログラマが身に付けておくべき必須知識5ついかがでしたでしょうか。
次回は残り4つのJavaプログラマの必須知識をご紹介します。