Eclipseにおけるビルド、クリーン、デバッグ

# はじめに
こんばんわ、きりです。
本記事は[Nablarchを使ってみよう](https://qiita.com/kirin1218/items/242ee0f174f1cb12ef17)のサブ記事として作成しております。

今回はEclipseにおけるビルド、クリーン、デバッグ方法について整理します。
先に申し上げておくと、今回説明する方法はシンプルなJavaプロジェクトにおいての操作となり、
warファイルを生成するWebアプリケーションのプロジェクトでは一部操作が異なる可能性があります。
しかしながら、デバッグ中の操作は同じですので、まずはシンプルなプロジェクトで試して頂ければと思います。

本記事以外のコンテンツは[こちら](https://qiita.com/kirin1218/items/242ee0f174f1cb12ef17#nablarch%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E8%A8%98%E4%BA%8B%E4%B8%80%E8%A6%A7)から閲覧可能です。

なるべく、初心者目線で作成するつもりですが、分かりづらい部分ありましたら、コメント頂きたいです。

## ビルド
Javaのプロジェクトを実行するには各javaファイルからclassファイルを生成する必要があります(プロジェクトによってはclassや設定ファイルを固めたjarファイルや設定ファイルも内包したwarファイルの場合もある）。

これらの処理をビルドといいます（厳密に言えばコンパイルと言ったほうが正しい場合もありますが、本記事ではビルドという表現で統一します）。

Eclipseではデフォルトで「自動的にビルド」が有効になっているため、javaファイルを編集した場合などは自動的にclassファイルが再ビルドにより更新されます。

### 自動ビルドを無効にしたい場合
メニュー>プロジェクト>自動的にビルド にチェックがついている場合は自動ビルドが有効となっており、クリックすると自動ビルドが無効となります。
私だけかもしれませんが、自動ビルドですとちゃんと更新されたか不安になり、動作OKでも心配になるので、ビルドは手動でやることが多いです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/f1be921a-c3c6-1149-ff0a-e043148730dc.png)

### 手動でビルドする
自動ビルドを無効にしている場合は当然、必要なタイミングでビルドしないとclassなどの成果物ファイルは更新されません。

手動でのビルド方法は
* プロジェクト名を右クリック>プロジェクトのビルド をクリックする
* メニュー>プロジェクト>プロジェクトのビルド をクリックする

となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/9dfc15dd-dad4-0cf4-2d1a-da3e696cf25a.png)

## クリーン
ビルドで生成したclassファイルを削除する処理をクリーンと呼びます。(プロジェクトによってはjarやwar、targetフォルダなど削除対象が異なります）
謎のビルドエラー時、実行エラー時などに(私は)利用します。

ソース量や依存ライブラリが増えてくると、（なぜか）中途半端にビルドされ、期待通り動作しないことがある。
そういうときは、原因を考えるよりクリーンした方が早いことは多いのかなと（私は）思います。

クリーン方法は
* メニュー>プロジェクト>クリーン

となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/49050b14-37a1-bf33-1675-14728f625eb8.png)
※自動ビルドが無効の場合、クリーン後、即時ビルドを行うかを選択します

# デバッグ
デバッグとは、実行を任意の場所で中断させ、中断時の変数の値やコールスタックの状態を確認する作業です。
また、中断状態で変数値を変更し、処理を再開させて、動作を確認することができます。
開発時の必須作業となります。

以降のソースは[EclipseのダウンロードとHello World](https://qiita.com/kirin1218/items/02bfeb333335842c56ae)で作成したhelloworldプロジェクトのHelloWorld.javaファイルを以下の用に編集して行います。

```HelloWorld.java
package helloworld;

/**
 * デバッグテスト用プロジェクト.
 *
 * @author kirin
 *
 */
public class HelloWorld {
  /**
   * mainクラス.
   *
   * @param args 引数の説明
   */
  public static void main(String[] args) {
    int item1 = 3;
    int item2 = 5;
    int sum = item1 + item2;
    System.out.println("item1 + item2 = " + sum);
  }
}
```

## デバッグの手順
1. ソースにブレークポイントを作成する
2. プロジェクトをデバッグ実行する

### ソースにブレークポイントを作成する
実行を中断したい行の行番号の左隣をダブルクリックする。
※右クリック>ブレークポイントの切り替えでも可

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/bad0e8a1-002e-7165-c3bd-aa47ad7ea0c5.png)

### プロジェクトをデバッグ実行する
プロジェクト名を右クリック>デバッグ>Javaアプリケーションを選択
※メニュー→実行>デバッグ>Javaアプリケーションでも可
※ツールバーの虫みたいなボタンからも実行可

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/a51cf157-b551-88d6-75b8-7c64d0af39fc.png)

ブレークポイントの箇所で処理が中断する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/c529e210-6a53-d0ce-6d86-125beece1219.png)

ビューを「デバッグ」に切り替える
メニュー→ウィンドウ→パースペクティブ→パースペクティブを開く→デバッグ
デバッグではコーディング時には使わないビューをいっぱい使うので、必ずパースペクティブを切り替えること

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/479f1e67-1482-6f39-2815-1a30f6d2752d.png)

切り替え後は以下のような画面となる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/58573bbd-66cc-8a8b-2870-be7207bb7b4c.png)

パースペクティブを戻した場合は、ウィンドウ右上あたりのJavaをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/ae396ebf-5ea3-df82-3955-2c4d29d46308.png)

### デバッグ中の操作
#### 変数値の確認と変更
変数ビューから値の確認ができる。
下図では、item1とitem2がそれぞれ３と５になっていることがわかると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/688170f2-d620-c368-eac3-1882318e2e40.png)

変数ビューで値をクリックすると編集状態になるので、値を変更できます。
試しに、item1を3から30に変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/df682d23-11b2-9fd3-948a-12f6ba05c391.png)

今回のプログラムではitem1とitem2を足し算した結果を出力しますが、足し算の処理の前にブレークポイントを作成し(18行目)、変数の値を変更したため、実行を再開すると出力が35となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/7697d5db-9e63-2f0d-007c-5d1dc102cf90.png)

デバッグは、各の変数が期待どおりの値となっているかの確認や変数の値をデバッグ途中で変更することで、if文の分岐の確認を行うなどの利用用途があります。


#### その他の操作

|キー操作|操作|
|---|---|
|F6キー|次の行へ進む|
|F5キー|カレント行で関数を呼び出している場合に関数内部に進む|
|F7キー|呼び出し元まで進める（メソッドの終了まで実施)|
|F8キー|次のブレークポイントまたは処理終了まで進む|


### 行ブレークポイント以外のデバッグ
行ブレークポイントが基本的なデバッグトリガーだが、指定した例外が発生した場合にブレークするなどの方法もあるようです。
こちらについては機会があれば別途整理したいと思います。

# 最後に
本記事ではEclipseにおけるビルドとデバッグの方法について整理しました。

関数や条件分岐、ループを作成した場合などにこまめにデバッグを実施しましょう。
値が期待通り設定されているか、if文の条件分岐が期待通り動作するか、などをしっかり確認しましょう。

本記事以外のコンテンツは[こちら](https://qiita.com/kirin1218/items/242ee0f174f1cb12ef17#nablarch%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E8%A8%98%E4%BA%8B%E4%B8%80%E8%A6%A7)を御覧ください。