Seleniumの薄っすい話5:俺とEclipse Che

この記事は[Selenium/Appium Advent Calendar 2015](http://qiita.com/advent-calendar/2015/selenium)の10日目の記事です。

薄っすい記事は5日目です！こんにちは！
Seleniumは使う方より動かす方のが好きです！

# Seleniumはたまに動かなくてつらい

Selenium、自分ひとりでやってる分にはそうそうトラブルになることも無く楽しめるのですが、チームを組んだりして複数の人の開発環境に入れ始めると、たまに誰か難しいハマり方でSeleniumを動かせなくなったりしてだいぶつらくなります。

いっそみんな1つの環境だったらメンテ楽でいいのにね〜ウフフアハハと現実逃避しているうちに、ふと思ってしまうわけです。
最近、Web IDEって流行ってるけど、あれって1つのサーバーにみんなの開発環境を集約できるってことだから、Selenium実行環境もマジな意味で1つだけにできて構築・維持が楽になるのでは？それこそ、Mac MiniくらいのサイズでWeb IDEサーバーを現場に持ち込んで、と...

![ホワホワホワ〜ン](https://qiita-image-store.s3.amazonaws.com/0/33963/694c0fbd-a12b-115f-29b3-9d03c2c10968.png)

ホワホワホワ〜ン（イラスト by [嫁](http://www.sawayunagi.net/)）

# そこでEclipse Che

Web IDEと言ってもいろいろありますが、コードアシストしてくれるWeb IDEのうち、オンプレミスな構築ができてオープンソースなもの、という条件でいろいろ調べてみたところ、[Codenvy](https://codenvy.com/)のベースである[Eclipse Che](https://eclipse.org/che/)が有望そうでした。

![che01.png](https://qiita-image-store.s3.amazonaws.com/0/33963/b07f427e-1c8f-29cd-0122-5dfdd79d6f19.png)

「Next Generation Eclipse IDE」とはずいぶん思い切った表現ですよね〜
でも、ちょっと触ってみた感じ、なかなか良くできていて口だけじゃない感あります。

この記事では、Ubuntu 14.04 LTS上にEclipse Cheを構築してSeleniumを動かせるようになるまでの手順をざっくり書いていきます。
手順はざっくりでもビルドはそこそこ時間がかかるので気をつけてね！

# Che構築やってみよう

私は、Seleniumを動かすためのLinuxディストリビューションはUbuntu推しです。aptでざくーっと必要なソフトを入れられるからです。まず最初に景気良くやってみましょう。

```bash
$ sudo aptitude install -y \
    chromium-browser chromium-chromedriver \
    firefox firefox-locale-ja \
    phantomjs

# chromedriverだけ、既定でパスが通っていないところに入ります。
# 私はパスの通っているところにシンボリックリンクを作ります。

$ sudo ln -s \
    /usr/lib/chromium-browser/chromedriver \
    /usr/local/bin/chromedriver
```

すげー楽です。

FirefoxやChromiumを動かすためにはGUIコンソールが必要になるので、ここではとりあえず軽量なデスクトップ環境のLXDEを入れておきます。

```bash
$ sudo aptitude install -y lxde
```

Eclipse Cheは要件が少し厳しくて、Ubuntu 14.04の既定のaptリポジトリーではインストールできない新しいバージョンのJDKやMavenを利用する必要があります。PPAを併用してなんとかしましょう。（Ubuntu 15以上だと、たぶんPPAがらみの手順は不要です）

```bash
# add-apt-repositoryコマンドが入っているパッケージを先にインストールします。
$ sudo aptitude install -y software-properties-common

# 既定のaptリポジトリーに入ってるよりも新しいMavenが必要なので、適当なPPAを探して引っ張ってきます。
$ sudo add-apt-repository ppa:andrei-pozolotin/maven3
$ sudo aptitude update
$ sudo aptitude install -y maven3

# JDK 8を入れます。
$ sudo add-apt-repository ppa:openjdk-r/ppa
$ sudo aptitude update
$ sudo aptitude install -y openjdk-8-jdk

# 既定のJDKを8にアップデートします。
$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac

# Cheは既定でGitとSubversionへのインターフェイスを持っているので入れておきます。
$ sudo aptitude install -y git subversion

# Cheの既定のワークスペースのディレクトリーを作っておきます。
$ sudo mkdir /var/lib/che
```

これで下準備ができました。
次に、CodenvyのCheリポジトリーからリリースバージョンのソースコードをチェックアウトして、ビルドします。
私の趣味で、`/usr/local/share`の下に入れますよ。

```bash
$ cd /usr/local/share
$ sudo git clone https://github.com/codenvy/che.git
$ cd che
$ sudo git checkout -b 3.13.4.4 3.13.4.4
$ sudo mvn clean install
```

この記事の書き始めで動作を検証した時の最新バージョンは3.12.5.2だったのですが、この記事の公開時点では既に3.13.4.4まで上がっていました。数日に1回のペースでリリースされています。えらいスピードだな...

Mavenのビルドが完了したら、サービスとして起動させるための準備をします。

起動スクリプトのche.shの冒頭を編集して、Cheのプロセスから起動するプラウザーを表示させるディスプレイについて、次のような感じで環境変数`DISPLAY`を設定し、`BASEDIR`にCheのチェックアウト先のディレクトリーを明示的に設定するように修正します。

```bash:che.shの冒頭
export DISPLAY=:0
BASEDIR=/usr/local/share/che
```

`/etc/init.d`にシンボリックリンクを作って、serviceコマンドで起動します。

```bash
$ sudo ln -s /usr/local/share/che/che.sh /etc/init.d/che
$ sudo service che start
```

これでCheが起動します。8080/tcpでWebサービスを待ち受けるので、Webブラウザーでアクセスしてみましょう。

![che03.png](https://qiita-image-store.s3.amazonaws.com/0/33963/0f0baf11-1bf4-c9a7-2467-404a23c4c64a.png)

初回アクセス時に、既定のワークスペースの設定を求められます。先ほど作成した`/var/lib/che`を設定しましょう。
設定後は、だいたい従来のデスクトップ版のEclipseと同じような操作をWebブラウザーで実現できます。

![che02.png](https://qiita-image-store.s3.amazonaws.com/0/33963/5ab7c4f3-dcf9-a390-2084-01011607acf6.png)

おお！ちゃんとIDEっぽいしSeleniumでブラウザーも動かせるぞ！

これだけでも既定のユーザーで動かせて個人的に楽しめるのですが、もう少しマルチユーザー向け利用を想定したユーザーダッシュボードなんかを組み合わせてみたいところですよね。
Cheはユーザー情報やプロジェクト情報の操作が可能な[REST API](https://eclipse-che.readme.io/docs/rest-api)を一通り備えていて、これと連携して管理系のUIを提供するダッシュボードアプリもオープンソースになっています。追加して楽しんでみましょう。

# dashboard構築やってみよう

```bash
# RubyGemsを入れてCompassを使えるようにしましょう。ダッシュボードアプリのビルドで必要になります。
$ sudo aptitude install -y make ruby-dev rubygems1.9.1
$ sudo gem install rubygems-update
$ sudo update_rubygems
$ sudo gem install compass

# npm関連も整備しておきましょう。nodejs-legacyが必要なことに注意してください。
$ sudo aptitude install -y nodejs-legacy npm
$ sudo npm install --global bower gulp
```

これで下準備ができました。
次に、Codenvyのdashboardリポジトリーからリリースバージョンのソースコードをチェックアウトして、ビルドします。
やっぱり戸田の趣味で`/usr/local/share`の下に入れますよ。

```bash
$ cd /usr/local/share
$ sudo git clone https://github.com/codenvy/dashboard.git
$ cd dashboard
$ sudo git checkout -b 2.1.5 2.1.5
$ sudo npm install
$ sudo bower install --allow-root
```

gulpコマンドでダッシュボードアプリを起動しましょう。

```bash
$ sudo gulp serve:dist --server http://[CHEを起動したホストの名前 またはIPアドレス]:8080/che
```

これでダッシュボードが起動して、先ほど立ち上げたCheと連携します。既定では5000/tcpでWebサービスを待ち受けます。アクセスしてみましょう。

![che04.png](https://qiita-image-store.s3.amazonaws.com/0/33963/cc0eb92c-e229-684b-8c19-e384a809fd51.png)

かっこいい感じのダッシュボードが使えるようになりました！

# 薄っすい話なので以上です。

ほんとうに複数人で使うにはまだまだ手を入れる必要があるのですが、もうちょいがんばればなんとかなりそうな、なかなかの可能性を感じませんか？

次回はmkawausokunです。よろしくお願いします。
[Selenium/Appium Advent Calendar 2015](http://qiita.com/advent-calendar/2015/selenium)はまだまだ薄っすいのも濃ゆいのも募集中です！