Eclipse/Che で lejOS EV3 のビルドをしてみる。

→[Che7での手順を別稿に書き下ろしました](https://qiita.com/monamour555/items/79b6ca0c10f39603a1a2)

> # 注意: 本稿の内容は古い!
>
> 最近、Eclipse/Che のバージョン7がリリースされ、ユーザインタフェースが一新されました。紹介されている PizzaFactory/Camino も既に Che7 ベースに移行しています。本稿は バージョン6以前の Che に基づいています。

# はなしのまくら

こんにちは。
ETロボコンは，技術委員会に名前だけ載っていたことがあって，振り返ってみたら5年前の話でした。
ほぼ無関係者なのですが，ツールについて書いてみます。

昔話を思い出すと，ETロボコンへの参加に際しては開発環境構築が大きな壁になっていたように思います。ざっとぐぐってみたところ，今も楽になっているわけでもないようですね。

そこで，半月ほど前に [Docker を使った EV3RT のビルド方法](http://qiita.com/monamour555/items/4bf28b7a775a17f33a14) と，その応用として [Eclipse/Che を使った EV3RT のビルド方法](http://qiita.com/monamour555/items/506fb3c44ff29131717b) を紹介し，いずれも開発環境構築の手間を大幅に削減できることを示しました。

しかし，ETロボコンでは EV3RT よりも leJOS のほうがメジャーですね。
leJOS EV3 ではどういう感じに楽になるのか，擬似ハンズオンをしてみたいと思います。

# 開発環境の紹介と調達

クラウドIDE である [Eclipse/Che](http://eclipse.org/che) を用います。バージョンは，執筆時点での最新版である 5.0.0-M7 です。
Eclipse/Che の概要は[以前，別記事に書きました](http://qiita.com/monamour555/items/506fb3c44ff29131717b#che-%E3%81%A3%E3%81%A6%E3%81%A9%E3%82%93%E3%81%AA%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83)ので，省略します。

調達方法は，大きく3つあります。

* 自前の Docker ホストの上に立てる
* クラウド上にインスタンスを立てる
* Cheをホスティングしているサービスを使う

でもこれは ETロボコン固有の話ではないので，近いうちに別記事にします。
後述するように，今回は Che をホスティングしているサービスを使いました。しかし，全ての選択肢に一長一短があります。

# 擬似ハンズオン

…というわけで，Eclipse/Che のサーバは立ち上がって，お手元の Web ブラウザから Che へアクセスできたところから始めます。

ソースコードは， github:yoshioterada さんのリポジトリから fork し若干の修正を加えたものを使います。

## ワークスペースの作成

左のメニューから `Workspaces` を選択し，`Add Workspace` という青いボタンを押します。

![add-workspace.png](https://qiita-image-store.s3.amazonaws.com/0/5414/115507b2-07b7-8425-1c1b-66cab5fa0807.png)

New Workspace 画面では，`Runtime` のタブを選択し，`Ready-to-go Stacks` の一覧で`JAVA`をクリックします。(クリックして有効になると，グレーから濃い青色になります。)

![select-stack.png](https://qiita-image-store.s3.amazonaws.com/0/5414/6128ae5d-e4c3-b11a-d308-381fbe063059.png)

`CREATE` ボタンをおしてワークスペースを作成します。

![open-workspace.png](https://qiita-image-store.s3.amazonaws.com/0/5414/718c2ec4-d5fa-0de2-a20c-271d796fb529.png)

ワークスペースが作成されましたので，右上の `OPEN` ボタンを押して，ワークスペースを開きます。この時点でワークスペース用の環境 (Docker コンテナ)が生成されます。コンテナイメージがホストにない場合には，ダウンロードされます。初回だけ，時間がかかりますので，待ちます。


## プロジェクトのインポート

ワークスペースが立ち上がったら，GitHub からプロジェクトをインポートしてきます。

メニューバーから `Workspace` - `Import Project`。開いたダイアログに入力していきます。

![choose-import-project.png](https://qiita-image-store.s3.amazonaws.com/0/5414/e888d0ec-537a-ab4a-812c-1462be0cfbaa.png)

左上の `Source Control` のところに `GITHUB` なる選択肢もありますが，`GIT`を使います[^GITHUB]。


[^GITHUB]: GitHubとのインテグレーションには少し混みいった設定が要ります。今回は説明を割愛します。

右側の `URL` に `https://github.com/PizzaFactory/Java-Sample-app-for-LEGO-Mindstorms` と入力し，下の 'Name:' がそれっぽい名前になっていることを確認します。

![import.png](https://qiita-image-store.s3.amazonaws.com/0/5414/38246be0-7b8b-de54-ce65-a95a41193454.png)

最後に `Import` ボタンを押すと，GitHub からソースコードが clone されてきます[^ssh]。

[^ssh]: 実際の開発では，https ではなく ssh で clone してくる必要があります。そうしないと変更したものをリポジトリに push できません。この場合，鍵の作成と登録といった作業になるのですが，ここでは割愛します。より詳しくは [Che 本家の情報](https://eclipse-che.readme.io/docs/git) を参照してください。

## Project configuration

リポジトリの clone が終わると，ダイアログがプロジェクトの設定に遷移します。
`Maven` を選んで，右下の `Save` ボタンを押してください。

![project-configuration.png](https://qiita-image-store.s3.amazonaws.com/0/5414/f462da94-7cf7-df15-5ba4-bd0320c8a49a.png)

## ビルド

### GUI でビルド

ここまでくればあと少しです。再生ボタン(実行ボタン)を押せばビルドが走ります…ます…ます? ん?

![execute.png](https://qiita-image-store.s3.amazonaws.com/0/5414/228434e6-6aa8-1883-049a-433e843dec1b.png)

<del>今回使用した版の Che (5.0.0-M7) には，Maven 周りの設定にバグがあるようで</del>，エラーを吐いてビルドが止まってしまいました。

(追記: [原因が判りましたので，別記事に書きました。](http://qiita.com/monamour555/items/1314db11d982d51eb163))

![error.png](https://qiita-image-store.s3.amazonaws.com/0/5414/ff09cd22-cc35-7e60-eddc-a53ea4a1ce33.png)

バグがなければ，実行ボタンを押すと `mvn clean install` が走り，jar ファイルが作られるはずです。残念。

### CLI ビルド

こういうときに助かるのが，コマンドライン(CLI)ビルドです。

![cli-build.png](https://qiita-image-store.s3.amazonaws.com/0/5414/2e3c38f7-3497-749f-46f8-86417e517940.png)

まず，ウインドウ下方の `Terminal` タブを選択します。
Bash [^bash] が動いています。

[^bash]: コンテナは Ubuntu なので，Bash 互換の Dash かもしれない。細かいことですが。

次に `cd` と打って，タブキーを2回押します。直接 `Java-Sample...` と打たなくても補完されます。
リターンを押してカレントディレクトリを移動したら `mvn package` と入力してリターンを打ちます。

Maven が必要とする jar ファイル群がずらずらとダウンロードされ，ビルドが終了します。

## デプロイ

適切な設定 [^how-to-deploy] を行った上で `mvn deploy` とすると，生成されたアプリケーションを LAN 上にある EV3 に直接デプロイできます。楽ですね。
しかし，今回は，[PizzaFactory Camino]() というクラウドホスティングサービスを用いましたので，そのデモはできません。

[^how-to-deploy]: [SlideShare にあるハンズオン資料](http://www.slideshare.net/OracleMiddleJP/lego-mindstormslejos-hands-on-lab) が参考になります。

クラウド上に Che がある場合の，ファイルの取り出し方は簡単です。
Explorer タブで jar ファイルを選び，コンテキストメニューから `Download` を選びます。
これを scp で送るなりして EV3 へデプロイしてください。

![download.png](https://qiita-image-store.s3.amazonaws.com/0/5414/c7c44ed0-c523-11bb-092a-a7191a62e7a6.png)

# まとめ

EV3RT に比べると leJOS は環境構築の手間は元々少なめなので，インパクトは大きくないかもしれません。
それでも Che を用いるとメリットがあるとするならば…

* 後片付けが楽(コンテナを消せば環境が綺麗に消える)
* 複数台の開発機へのインストールでも環境を同じにし易い
* 複数のブラウザから同時編集が可能なので，ペアプロし易い
* 端末側の計算能力は低くても構わない。なんなら iPad でも OK。
* 管理の外部委託が可能。

といった，教材として求められるような特徴かもしれません。

あと，これはちょっと嬉しい人も居るかも。

* いざとなれば CLI でほぼ何でもできる。GUI が嫌いな人も妥協して使える。

環境構築のご参考になれば幸いです。