Eclipseの超基本的な使い方


PE-BANK関西支店の 2017-04-15 Java勉強会で使用する資料です。
超初心者向けの内容となっております。

## Pleiades All in One Eclipseのインストール

*pleiades* （プレアデス）は MergeDoc Project で配布されている Eclipse 日本語化プラグインです。

*Pleiades All in One Eclipse* は日本語化プラグイン（と、いくつかのよく使用されるプラグイン）を組み込み済みの Eclipse本体になります。

以下からご使用の環境に合わせた *Java Full Edition* をダウンロードしてください。
http://mergedoc.osdn.jp/pleiades_distros4.6.html

下の画像の赤枠のいずれかになります。
![2017-04-15-pleiades.png](https://qiita-image-store.s3.amazonaws.com/0/39362/85b55fd8-1ca6-9180-92be-f32e33217d06.png "2017-04-15-pleiades.png")


*Java Full Edition* は Eclipse本体に加え、JRE, JDKを含んでいます。
そのため、PATH指定などの設定が不要になります。


### Windowsの場合

ダウンロードフォルダなどでそのままzipファイルを展開するとパスの長さが Windows の許容範囲を超えてしまい、エラーとなる場合があります。

以下の手順が確実です。

* `C:¥app` などのフォルダを作成
* ダウンロードしたzipファイルを移動
* ファイル名を `pleiades-4.6.3.zip` に変更
* ZIPファイルを展開
* 展開したフォルダ内の `pleiades` を `C:¥app` に移動

`C:¥App¥pleiades¥eclipse¥eclipse.exe` へのショートカットをデスクトップに作成しておくと便利でしょう。


### Macの場合

以下のページを参考にインストールを行ってください。

[Mac 版 Eclipse Pleiades All in One リリース](http://qiita.com/cypher256/items/233795f4fc58a704ee47)

初回起動時は右クリック -> `開く` を選択してください。
セキュリティの警告ダイアログが表示されますので、`開く` をクリックします。

### Eclipse用語について

最低限押さえておきたい用語について、以下のページがよくまとまっていますので参考にしてください。

[Eclipse用語「ワークベンチ」「パースペクティブ」「エディター」「ビュー」「ワークスペース」について](http://www.hitachi.co.jp/Prod/comp/soft1/cosminexus/useful/tips/081202_eclipse-workbench-workspace.html)


## Eclipseの起動

### ワークスペースの指定

Eclipseを起動すると、「ワークスペース」をどこに保存するかを尋ねられます。

* Windowsの方は、とりあえずデフォルトで構いません。
* Macの方はデフォルト (`../workspace`) だと Applications の中に作る気がするので、適当な箇所 (`/Users/{ユーザー名}/workspace`) に変更してください。(すみません、未検証です。)

「次回から表示しない」というチェックボックスがありますが、Eclipseに慣れるまでは表示しておいた方がよいと思います。


### 初期設定

Eclipseが起動したら、先程の「Eclipse用語」と実際の画面を見比べてください。

画面が狭い人は「アウトライン・ビュー」と「問題ビュー」はとりあえず使用しませんので最小化してしまいましょう。


今回の勉強会では Windows を使用されている方と Mac を使用されている方が混在していますので、今後サンプルコードを取り込んだ際に問題が起きないように、文字コードを `UTF-8` に統一したいと思います。

* `ウィンドウ` -> `設定` をクリック
* `一般` -> `ワークスペース` をクリック
* `テキスト・ファイルのエンコード` が `その他: UTF-8` となっていることを確認します。

*Pleiades All in One Eclipse* のデフォルトでは `その他: UTF-8` となっているはずです。
eclipse本体のみをダウンロードした場合は `デフォルト` (Windowsだと MS932) となっています。

------

## Eclipseを使用した簡単なプログラムの作成

### 作成するプログラムの仕様

今回は引数から数字を受け取り、その値を2乗した結果を出力するプログラムを作成します。


### プロジェクトの作成

まずはプロジェクトを作成しましょう。
「パッケージ・エクスプローラー」を右クリックし、`新規` -> `Javaプロジェクト` を選択します。

プロジェクト名は何でも構いません。
とりあえず `JavaStudy001` としておきましょう。

その他の項目はデフォルトのまま、「次へ」をクリックします。

Javaのビルド設定画面が表示されますが、今回はデフォルトのまま「完了」をクリックしてください。

起動時に指定した workspace に `JavaStudy001` フォルダが生成され、
eclipseが使用する各種設定ファイルと共に
ソースコードを格納する `src` フォルダ、
生成したクラスファイルを格納する `bin` フォルダが生成されます。

### クラスの作成

以下のようなパッケージとクラスの構成になるように、クラスを作成していきます。

* パッケージ名: myPackage.calc
  - Calculationクラス
  - Squareクラス
* パッケージ名: myPackage.main
  - Programクラス

#### Calculationクラスの作成

* 「パッケージ・エクスプローラー」で `src` フォルダを右クリックし、`新規` -> `クラス` を選択します。
* `パッケージ` を `myPackage.calc` とします。
* `名前` を `Calculation` とします。

```java:Calculation.java
package myPackage.calc;

public class Calculation {

}
```

#### Squareクラスの作成

* 「パッケージ・エクスプローラー」で `myPackage.calc` を右クリックし、`新規` -> `クラス` を選択します。
* `名前` を `Square` とします。
* `スーパークラス` の `参照(E)...` をクリックします。
* 「スーパークラスの選択」で「calc」と入力すると、「一致する項目」に先程作成した `Calculation` クラスが表示されますので、それを選択して `OK` をクリックします。

```java:Square.java
package myPackage.calc;

public class Square extends Calculation {

}
```

#### Programクラスの作成

* 「パッケージ・エクスプローラー」で `src` フォルダを右クリックし、`新規` -> `クラス` を選択します。
* `パッケージ` を `myPackage.main` とします。
* `名前` を `Program` とします。
* `public static void main(String[] args)(V)` にチェックを入れ、`完了` をクリックします。

```java:Program.java
package myPackage.main;

public class Program {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

	}

}
```

TODOコメントが入っており、`TODO` の箇所が強調されていると思います。
コードに TODOコメント を記載しておくと、「タスク・ビュー」に一覧表示されます。
「タスク・ビュー」から該当コメントの箇所にジャンプする機能があるので、後で実装しなければならない箇所や他の開発者に実装を依頼する場合などは、TODOコメントを残しておきましょう。

「タスク・ビュー」は `ウィンドウ` -> `ビューの表示` -> `タスク` をクリックすると表示されます。

#### Calculationクラスの実装

値を保持する `value` フィールドを定義しましょう。

```java
package myPackage.calc;

public class Calculation {

	protected int value = 0;

}
```

続いて、`value` を右クリックし `ソース` -> `getter および setter の生成` をクリックします。

「getter および setter の生成」ダイアログで、デフォルトのまま `OK` をクリックします。

`getValue()`, `setValue(int value)` メソッドが生成されることを確認してください。


つづけて、計算結果を保持する `result` フィールドを作成します。
`value` フィールドの直下に `protected int result = 0;` と定義を追加しましょう。

さらに計算結果を出力する `output` メソッドを作成します。
これは外部のクラスからも呼べるように `public` として作りましょう。

Eclipseにはコードを補完する機能があります。

```java
public void output() {
  System.
}
```

↑この状態でしばらく待つと、候補となる項目が表示されます。
`out` を選択し、さらに `.` を入力しましょう。
`out` クラスのメンバが表示されますので、`println` を選択します。

最後に `println` メソッドに `this.result` を渡してあげます。

最終的に、以下のようになっていることを確認してください。

```java:Calculation.java
package myPackage.calc;

public class Calculation {

	protected int value = 0;

	protected int result = 0;

	public int getValue() {
		return value;
	}

	public void setValue(int value) {
		this.value = value;
	}

	public void output() {
		System.out.println(this.result);
	}

}
```

Javaには Javadoc という ソースコードのコメントを元にHTML形式のAPI仕様書を生成する仕組みがあります。

`output` メソッドにJavadocコメントを追加しましょう。

Javadoc は `/**` から始まり `*/` で終わるコメントです。
慣習的にコメントが複数行に渡った場合、2行目以降の行頭には `*` を入れます。

Eclipseでは `/**` と入力してEnterを押下すると、自動的にJavadocコメントが挿入されます。

```java
/**
 * 計算結果をコンソールに出力します。
 */
public void output() {

}
```

`getValue` にもJavadocコメントを追加しましょう。

```java
/**
 * 
 * @return
 */
public int getValue() {
  return value;
}
```

そうすると、↑のように `@return` というのが自動的に生成されます。
これは Javadocタグと言われるもので、`@return` はメソッドの戻り値を記述します。

Javadocタグを使用してメソッドの定義を記述しておくと、HTMLを生成した際にJavadocがキレイに整形してくれます。

```java
/**
 * 計算に使用する値を取得します。
 * @return 計算に使用する値
 */
public int getValue() {
  return value;
}
```

`setValue` にも Javadocを追加しましょう。

```java
/**
 * 計算に使用する値を設定します。
 * @param value 計算に使用する値
 */
public void setValue(int value) {
  this.value = value;
}
```

`@param` は引数のタグです。


クラスやフィールドにも Javadocコメントを付けることができます。
Eclipseでコード補完する際にも表示されますので、積極的に書くようにしましょう。


#### Squareクラスの実装

2乗の計算を行う `calculate` メソッドを定義します。

```java:Square.java
package myPackage.calc;

public class Square extends Calculation {

	/**
	 * 値を2乗します。
	 */
	public void calculate() {
		// valueを2乗する
		this.result = this.value * this.value;

		// 結果を出力する
		this.output();
	}

}
```

#### Programクラスの実装

最後に mainメソッド の実装を行います。
「タスク・ビュー」を開き、該当のTODOコメントをダブルクリックしましょう。

以下のように実装します。

```java:Program.java
package myPackage.main;

public class Program {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

		Square square = new Square();
	}

}
```

`Square` クラスに赤い波線が表示されると思います。
これは該当箇所にエラーがあるという表記で、`myPackage.calc.Square` クラスが見えない事が原因です。

波線が表示されている箇所にマウスを当て、しばらく待つと「クイック・フィックス」が表示されます。
`'Square'をインポートします (myPackage.calc)` をクリックしてください。

`import myPackage.calc.Square;` が追加され、赤い波線が消えます。

続いて `square` に黄色い波線が表示されます。
これは該当箇所に警告があるという表記です。プログラム中で定義した `square` 変数が使用されていない、という内容です。
実装を進めると消えますので、そのまま進めます。

```java
public static void main(String[] args) {
  // TODO 自動生成されたメソッド・スタブ

  Square square = new Square();

  square.setValue(Integer.parseInt(args[0]));
}
```

プログラム起動時に与えられたパラメータは `main` メソッドの `args` に格納されます。
今回は最初に渡されたパラメータを `int` に変換して `Square` の `value` にセットします。

`setValue`メソッドにマウスを合わせると Javadocコメントの内容が表示されることを確認しましょう。

さらに、`setValue` の内容を確認したい、という場合は、右クリックから「宣言を開く」を選択すると該当メソッドが定義されている箇所に飛べます。

最後に計算を行い、結果を出力します。

```java
public static void main(String[] args) {
  // TODO 自動生成されたメソッド・スタブ

  Square square = new Square();

  square.setValue(Integer.parseInt(args[0]));

  square.calculate();
}
```

ひととおり実装が完了したので、TODOコメントを削除しましょう。

### 実行

実行ボタン（丸い緑色に白抜き三角のボタン）をクリックします。
「実行構成」ダイアログが表示されますので、「Java アプリケーション」を選択して「新規の起動構成」ボタンをクリックします。

* プロジェクト: JavaStudy001
* メイン・クラス: myPackage.main.Program

となっていることを確認し、`実行`をクリックします。

コンソールが表示され、以下のように表示されます。

```
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
	at myPackage.main.Program.main(Program.java:11)
```

`ArrayIndexOutOfBoundsException` とは配列にアクセスする際に指定した配列の添字が要素数を超えたときに発生する *例外* です。

今回は `args[0]` と配列の先頭要素を取得していますが、パラメータをひとつも指定せずに実行したので `args` の配列は空っぽです。

実行時に引数を与えるように、「実行構成」を変更しましょう。

* 実行ボタンの右側の下向きの三角形をクリックし、「実行の構成」を選択します。
* 「引数」タブを表示します。
* 「プログラムの引数」に `3` と入力します。
* `実行`をクリックします。

コンソールが表示され、`9` と出力されることを確認します。


### デバッグ

計算結果が意図した内容と異なるなど、処理の過程を確認したい場合があります。
ソースコードに *ブレークポイント* を設定し、処理を該当箇所で一時停止させることが可能です。

`Square.java` の 10行目、valueを2乗している箇所にブレークポイントを設定しましょう。
行番号の箇所をダブルクリックしてください。行番号の左側に青い丸が設定されます。

つづいて、虫アイコンのボタンをクリックします。
「パースペクティブ切り替えの確認」が表示されますので、「はい」をクリックしてください。

「デバッグ パースペクティブ」が表示され、先程ブレークポイントを設定した行が強調表示されています。
`this.result` や `this.value` にマウスオーバーすると、変数の中身が確認できます。

`ステップ・オーバーボタン` をクリックすると、その行の処理が行われ、次の行に移ります。
改めて `this.result` にマウスオーバーすると、計算結果が変数に格納されている事が確認できます。

`this.output();` の行が強調表示されている状態で `ステップ・インボタン`をクリックします。
`Calculation.java` の `output` メソッドが表示され、`System.out.println(this.result);` 行が強調表示されます。

`再開ボタン` をクリックすると、次のブレークポイントまで後続行を一気に処理します。

デバッグが完了したら、右上の `Java` と書かれたボタンをクリックし、「Java パースペクティブ」に戻りましょう。


------

Eclipseの基本的な操作について解説しました。
テキストエディタなどでプログラムを作成することと比較すると、非常に便利であることを実感していただけるかと思います。