未来を感じずにはいられないクラウドIDE 〜番外編 Codenvy〜

f:id:Naotsugu:20160718030833p:plain

前回は Cloud9 で Java開発環境の構築について見てみました。

blog1.mammb.com

Cloud9 による Java サポートはまだまだこれからといった感じでした。

今回は Eclipse Che が使えるクラウドIDE である Codenvy を簡単に見ていきましょう。


Eclipse Che とは

Eclipse Next-Generation IDE ということで、 Eclipse プロジェクト内の Eclipse Cloud Development (ECD) で開発が進められています。

そして Codenvy の CEO Tyler Jewell 氏が Eclipse Cheのプロジェクトリーダーです。

f:id:Naotsugu:20160718163200p:plain

2016年3月に EclipseCon で一般公開が発表されました。まだ新しいプロダクトで、そのままローカルの統合開発環境を置き換えるレベルには無いですが、今後に期待が持てるプロダクトだと思います。

Codenvy のはじめ方

ログイン画面にアクセスすると、Next-Generation Beta と Classic の 2つが選択できます。

今回は未来を感じるために Next-Generation Beta を選択します。

f:id:Naotsugu:20160718164554p:plain

ログイン画面となります。今回は Github で OAuth 認証でログインしました。

f:id:Naotsugu:20160718030902p:plain

ログイン後、ダッシュボードが表示されます。 ここからはそのまま Eclipse Che の操作になります。 ワークスペースを追加しましょう。

f:id:Naotsugu:20160718031455p:plain

Java を選択します。

f:id:Naotsugu:20160718031505p:plain

テンプレートが選べます。Spring や JavaEE も選べます。 今回は JavaEE を選択しました。

f:id:Naotsugu:20160718031521p:plain

「Create workspace and project」を押すとワークスペースの作成が行われます。 IDE を開きましょう。

f:id:Naotsugu:20160718031532p:plain

テンプレートプロジェクトの実行

テンプレートは Maven プロジェクトで JAX-RS + AngularJS を Apache TomEE で動かすようになっています。

f:id:Naotsugu:20160718172710p:plain

Phone クラスがあり、

package org.supertribe;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Phone {

    private int age;
    private String carrier;
    private String id;
    private String name;
    private String snippet;

    public Phone() {
    }

    public Phone(int age, String carrier, String id, String name, String snippet) {
        this.age = age;
        this.carrier = carrier;
        this.id = id;
        this.name = name;
        this.snippet = snippet;
    }
    // 略
}

Phone をリソースクラスで返す簡単なものです。

package org.supertribe;

import javax.ejb.Lock;
import javax.ejb.Singleton;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.util.Arrays;
import java.util.List;

import static javax.ejb.LockType.READ;

@Path("/phone")
@Singleton
@Lock(READ)
public class PhoneService {

    @GET
    @Path("list")
    @Produces(MediaType.APPLICATION_JSON)
    public List<Phone> getPhones() {

        return Arrays.asList(
                new Phone(0, "", "motorola-xoom-with-wi-fi", "Motorola XOOM(tm) with Wi-Fi", "The Next, Next Generation\r\n\r\nExperience the future with Motorola XOOM with Wi-Fi, the world's first tablet powered by Android 3.0 (Honeycomb)."),
                new Phone(1, "", "motorola-xoom", "MOTOROLA XOOM(tm)", "The Next, Next Generation\n\nExperience the future with MOTOROLA XOOM, the world's first tablet powered by Android 3.0 (Honeycomb)."),
                new Phone(8, "", "samsung-galaxy-tab", "Samsung Galaxy Tab(tm)", "Feel Free to Tab(tm). The Samsung Galaxy Tab(tm) brings you an ultra-mobile entertainment experience through its 7\" display, high-power processor and Adobe(R) Flash(R) Player compatibility."),
                new Phone(11, "Verizon", "droid-pro-by-motorola", "DROID(tm) Pro by Motorola", "The next generation of DOES."),
                new Phone(18, "", "t-mobile-g2", "T-Mobile G2", "The T-Mobile G2 with Google is the first smartphone built for 4G speeds on T-Mobile's new network. Get the information you need, faster than you ever thought possible.")
        );
    }
}

下部のターミナルから実行してみましょう。

$ cd web-javaee-jaxrs
$ maven clean install tomee:run

サーバが起動します。

f:id:Naotsugu:20160718173003p:plain

サーバへのアクセス

起動したサーバへのアクセスは、ここをクリックし、

f:id:Naotsugu:20160718031547p:plain

表示されるURLでアクセスできます。

f:id:Naotsugu:20160718031556p:plain

動いていますね。

f:id:Naotsugu:20160718164848p:plain

テストは Arquillian によるテストが定義されています。

まとめ

簡単ですが Codenvy を触ってみました。 Beta 版ということもあってか、無応答となるなど、操作感はまだまだといった感じです。

Cloud9 と比較すると、サジェストやインポートの編成など、Java IDE としての機能性は勝るものの、動作がもっさりしており、正直もう一度触りたいとは現時点では思えませんでした。 サーバ側が重厚なアーキテクチャになっていることが原因の一つにあるのかもしれません。

Cloud9 は安定しており、特にエディタ ACE の出来が良いため、LL 開発には使い心地抜群ですが、Java 開発を本格的に行うのはためらわれます。

Eclipse Che の開発には、多くのベンダもからんでいるため、今後の進展に期待しましょう。