銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

Eclipse Che Language Server版でASP.NET Coreプロジェクトを作成する

先日、Microsoft, Red Hat, CodeEnvyが協力して、「Language Services」と呼ばれるサービスにJSON-RPCベースなオープンな仕様のプロコトルを発表しました。Visual Studio Codeで使っているものを公開して、より汎用的に使えるようにしていきたいという流れのようです。

developers.redhat.com

code.visualstudio.com

IDE側には、ブラウザ上で操作できる Eclipse Cheが対応を表明しています。

che.eclipse.org

デモで動かしたというブランチで動作するといっているので、今回はこれを試してみることにしました。

リポジトリはここにあるのですが、開発中のブランチであるためドキュメントが対応していません。

github.com

Issueに投げたら、ルートのリポジトリでmvn clean installすればいけるよと教えてもらいましたが、いくつかはまったのでメモしておきます*1

github.com

ツールのセットアップ

環境ですが、RHEL7.2です。この後mavenから実行するbowerの都合上、rootではないユーザーで実行するのがよいかと思います*2。おそらくLinux系は同様の手順でよいかと。一部OSXでビルドすること前提の処理があったので、OSXは楽になる可能性があります。Windowsはツールのインストールのところを変えれば同様でしょう。まずはドキュメントにもある通り、Oracle JDK と Mavenを入れておきます。

$ java -version
java version "1.8.0_92"
Java(TM) SE Runtime Environment (build 1.8.0_92-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode)
# mvn -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T01:41:47+09:00)
Maven home: /opt/apache-maven-3.3.9
Java version: 1.8.0_92, vendor: Oracle Corporation
Java home: /usr/java/jdk1.8.0_92/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-327.18.2.el7.x86_64", arch: "amd64", family: "unix"

また、 maven経由でいくつかのコマンドを実行するため、それのコマンドもインストールしておきます。nodejsはお好きな方法でインストールしてください。今回はscl経由でインストールしています。

# yum install patch

# npm install -g bower
# npm install -g gulp

git cloneしておきます。

$ git clone https://github.com/eclipse/che.git
$ cd che
$ git checkout devnation

さらにmavenを実行するとわかるのですが、patchを当てるときにReversePatchになっている部分があってエラーになるのであらかじめReversePatchを許可するようにしておきます。git diffの結果をはっておきますが、1行追加すればよいです。

$ git diff
diff --git a/plugins/plugin-orion/che-plugin-orion-editor/pom.xml b/plugins/plugin-orion/che-plugin-orion-editor/pom.xml
index 2087b93..c4a0b63 100644
--- a/plugins/plugin-orion/che-plugin-orion-editor/pom.xml
+++ b/plugins/plugin-orion/che-plugin-orion-editor/pom.xml
@@ -128,6 +128,7 @@
                             <strictPatching>true</strictPatching>
                             <strip>1</strip>
                             <targetDirectory>${project.build.directory}/classes</targetDirectory>
+                           <reverse>true</reverse>
                         </configuration>
                     </execution>
                 </executions>

あとはmavenを実行するのですが、途中でテストコードがfailしたり、ライセンスヘッダのチェックがfailしたりします。そしてfindbugsの実行に時間がかかるなどするので、思い切って全部無効にしておきます。プロジェクトのルートのpom.xmlで実行したあとは、起動するためのパッケージを作成します。

$ mvn clean install -DskipTests -Dfindbugs.skip -Dlicense.skip -Denforcer.skip  -Dmdep.analyze.skip
$ cd assembly/assembly-main/src/assembly/assembly-main
$ mvn install

これでいけると思うのですが、もしかするとnpmの実行やgulpの実行で失敗するかもしれません。試行錯誤していたときは、いったんそのディレクトリにcdしてシェルから直接npm install --no-optionalとか実行していました。実は必要な手順かもしれません。

あとは、出来た実行ファイルを実行します。実行するユーザーがdockerグループにはいっていなかったり、dockerのsocketファイルの権限が足りないと警告がでるので対応します。

# A new assembly is placed in:
cd target/eclipse-che-<version>/eclipse-che-<version>

# Executable files are:
bin/che.sh

これでブラウザから接続すれば表示されるはずですが、Eclipse Cheのworkspaceを作成した後に入ろうとするとき、localhost以外からのアクセスをしていると入ることができません。workspaceごとにdocker環境を作成しているようですが、これとの通信ができなくなる関係のようです*3。同じマシン上のブラウザからlocalhostでアクセスしましょう。

workspaceに入ったら、ASP.NET Webプロジェクトを作成するとこんな風になって、dotnet restore, dotnet runができます。コード編集するときに補完が効かないのですが、これの原因まではまだ追えていないです。

f:id:tanaka733:20160630174719p:plain

すでにここまで動いているということで、秋のリリースが楽しみです。

*1:Issueの最後のコメントにまとめているものとほぼ同じ

*2:rootで実行するときはオプションが必要なので

*3:まだ詳しくはみていない