冥冥乃志

ソフトウェア開発会社でチームマネージャをしているエンジニアの雑記。アウトプットは少なめです。

follow us in feedly

【縛りプレイ中】Codenvy(Eclipse Che)でGradleのプロジェクトをまともに使えるようにしたい(その1)

まだまだ諦めておりませんよ?むしろコード書くより楽しくなってきています。

Codenvy(Eclipse Che)でGradleプロジェクトを扱う場合の問題点

そもそもGradleは公式で対応していないから修羅の道な訳です。大きくは以下2点。

  • Stackも公式から出てない(dockerhubから引っ張ることは可能なので、ビルドはできる)
  • インテリセンスがmaven基準(jarファイル単位でしか追加できない)

つまり、ビルドと実行コマンドを作ることはできて、その中ではパスは通ってますし、クラスパスもちゃんとgradleから見えているんですが、インテリセンスで見ているクラスパスにGradleが使えない状況です。一つ一つjarファイルをクラスパスに追加する絵しか思い浮かばなくて軽く絶望しかけました。

コード書く目的ではなくて、Githubから軽くコードを引っ張ってきて実行環境込みで動かしてみるにはいいんですが、コードを書く目的となるとエディタでコンパイルが通らないからとにかく不便です。

Github Issuesから漁ってみる

github.com

とか

github.com

とかで同じことを考えている人たちがいたんですね、やっぱり。

で、読んでみると、今後対応するつもりはあるようですが、今のところはアシスタンス機能はmavenでサポート可能なプロジェクトでのみ動く、ということのようです。対処法として示されているのは、

  • 依存関係を書いた pom.xml を用意する
  • jarファイルを一つ一つクラスパスに追加する

のどちらか。

いや、後者SpringBootとか辛すぎるでしょう。。。後者のIssueだと16のサブモジュールと13のソースディレクトリを持つGradleプロジェクトとか言ってるんですよ、一つずつjarを追加しろとか何でしょうか、その刺身タンポポ *1

Gradleからpom.xml出力すればいけるのでは?

前者をどうにか楽にできないものかと思って少し調べて見ました。mavenプラグインというのがあるんですね。

第53章 Mavenプラグイン

mavenプラグインで設定なしだとデフォルトローカルリポジトリに保存される模様。スタックのローカルリポジトリ/home/user/.m2/repository になるようです。Gradleのサンプルプロジェクトを使って gradle install してみたところ、メインのソースディレクトリのビルド結果についてはリポジトリにインストールされていますし、build/pomspom.xml は作成されています。ただ、テストに依存するライブラリはローカルリポジトリにインストールされないんですね。やりたいことに近づきはしましたが、まだまだです。

まとめ

やってやれないことはない気がしてきました。プラグインで大まかに事足りそうなのでいいですね。

テストのライブラリをローカルリポジトリに持っていければ基本的にやりたいことは全てできそうなので、次はこの辺りを調べてみようと思います。

追記

とりあえず、 gradle install タスクでできた pom.xml をプロジェクトルートにコピーするビルドコマンドを書いて、プロジェクト自体はmavenで読み込ませたところ、外部ライブラリにも追加されました。シングルソースディレクトリのプロジェクトであればこれでおそらく問題ないかと。

f:id:mao_instantlife:20161112151429p:plain

*1:ダイアログでのjarの選択がマルチでできない

【縛りプレイ中】Eclipse CheをDockerで使えるかどうか検証してみて挫折した

縛りプレイの一環です。

Eclipse Cheとは?

Eclipseが作っているクラウドIDEワークスペース管理を統合した環境です。コードエディターはOrionを使っている模様。

CodenvyがEclipse Cheを利用するサービスを提供しています。

Dockerイメージが公開されている

DockerHubを見るとイメージが公開されているんですね。

https://hub.docker.com/r/codenvy/che/

早速イメージを引っ張ってみます。

docker pull codenvy/che
abeshinsukenoMacBook-Pro:~ mao$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
codenvy/che         latest              9a261cf4b6b3        8 weeks ago         22.14 MB

いや、イメージ小さすぎないですかね?

使い方

eclipse-che.readme.io

docker for macは設定が必要らしいです。ハイパーバイザーでホストを立ち上げているので、そのIPアドレスを取得しておく必要がある模様。ちなみに、一回作っておくとIPアドレスは再起動しても変わりませんでした。推奨は .bash_profile に入れておけ、なんですが、ターミナル立ち上げるたびにパスワード訊かれるようになります。ちょっと行けてないです。

ランチャーCLI

公式に書かれているCLI使ったインストール方法はちょっと問題がありました。シェルに書かれているいくつかのイメージのタグ指定がnightlyになってて、そもそもユーザ周りがおかしくて動かないです。環境変数を指定すれば問題ないですが。。。

とりあえずは立ち上がる

docker run を使って起動しました。

適当にmavenワークスペースとプロジェクトを作ってみましたが、おそらくプロジェクトごとの開発・実行環境をdockerで内部に作っているような動きをしています。作成ご、ワークスペースがdockerで立ち上がってるのが確認できます(ホスト管理下のコンテナとして立ち上がるのは筋が悪い気がする)。

CONTAINER ID        IMAGE                                                                       COMMAND                  CREATED             STATUS              PORTS                                                                                                                                                                         NAMES
d5b1013c3a17        eclipse-che/workspacefkvue7fyxxjv8ubi_machine6xhzk3ramv4gz0oa_che_default   "/bin/sh -c 'sudo /us"   33 minutes ago      Up 33 minutes       0.0.0.0:32774->22/tcp, 0.0.0.0:32773->4401/tcp, 0.0.0.0:32772->4403/tcp, 0.0.0.0:32771->4411/tcp, 0.0.0.0:32770->8000/tcp, 0.0.0.0:32769->8080/tcp, 0.0.0.0:32768->9876/tcp   workspacefkvue7fyxxjv8ubi_machine6xhzk3ramv4gz0oa_che_default
c3f1967a84b6        codenvy/che-server:latest                                                   "/home/user/che/bin/c"   37 minutes ago      Up 37 minutes       8000/tcp, 0.0.0.0:8080->8080/tcp                                                                                                                                              che-server

ちなみに、デフォルトではgradleのワークスペースがありません。しかし、代替案はあるようです。ドキュメント自体はありました。

eclipse-che.readme.io

ちなみに、コードエディターのインテリセンスはctrl + fn + space。これがわからなくてちょっと焦った。。。

イメージを再起動すると。。。

ワークスペース消える。。。まあ、ボリュームをマウントしてなかったので、そうかもなあ、とは思ったんですが、ホストにも残っていないようです。

それ以前に、マシン再起動したりログオフしたりするとマウントエラーが出ます。 まずなんで最初に立ち上がったんだよ、というレベル。。。

これは、lib-copyとstorageが指定されていないからみたいなのですが、docker run時に-v指定してもマウントできませんでした。とりあえずKitematicで、とも思ったんですが、これをするとsockが使えなくて、ワークスペースが作れないという悪循環。

まとめ

というわけで、いざという時にローカルで立ち上げるようにしておいて、素直にCodenvy使います。今のご時世で、ネットに繋がらない状態でコードを書くというのが考えづらいのと、Codenvyから試して最終的にAWSとかに持っていった方がいいのでは?と思ったので。

【縛りプレイ中】ローカルにインストールしない開発環境構築

何を言ってるんだかわかりませんか?私もわかりません。

永らくMacBook Pro 2011 Earlyモデルで頑張ってきたわけですが、そろそろ辛くなってきたので、MacBook Proを新調しました。バタフライキーボードに少々慣れが必要ですが、薄さも大きさもちょうどいいですね。ほぼMacBook Airレベルで使えます。

ところで、以前のモデルから5年ほど経っていますので、開発環境や動作環境など、テクノロジーのトレンドも少し変わってきています。いい機会なので、旧環境からの移行をせずにまったく新規にコンセプトを立てて環境構築をしてみることにしました。まだ始まったばかりですが、既に縛りプレイです。

コンセプト

「ローカルにアプリ/ツールをインストールしない」縛り。

まったくゼロとはいかないと思うので、まあ極力というやつです。

構想

開発向けにインストールするツール

  • git
  • docker

dockerとdocker-composeを使い倒して、開発用に使うアプリケーション構成もgithubに押し込んでしまおうという構想です。こうしておくと、Macではない環境に移行した時もこの二つのツールがあれば基本的に同じ環境を作って開発ができるはず。それに、dockerを中心に構築しておけば、AWSなどにコンパイルを投げる、などもできるようになるはず。

1PasswordやChromeなど、開発以外の用途でインストールするものはありますが、一応開発向けにはこの二つに縛りを入れます。

ルール

X11を使って動かすものはなるべく使わないようにします。なるべくWebアプリケーションとして動く環境を構築するルールで。上記二つのツールとブラウザがあれば開発環境が作れてしまう、というのが理想です。

それのルールでJavaをメインに使う場合に何を選択すべきか、というのがまだ調査中です。DockerHubを見てみると、Cloud9のJavaカスタマイズのイメージもありますが、公式として出していて使いやすそうなのはEclipse Cheになるかな、と。

他にもRStudioやJIRAなんかもイメージ作っている人がいるので、この辺りを活用しようかな、と。

耐えられるか?

まだ始まったばかりなので、よくわかりませんが、コンセプトとしてはそこまで間違った方向に行ってないと思うので、ちょっとの不便は目をつぶって、どこまでいけるか試してみようと思います。とりあえず、Eclipse Cheをdockerで動かすところから。

JIRAの評価が終わったのでデータベースを外部化

公式の対応プラットフォームは見よう、本当に。

JIRA アプリケーションを PostgreSQL に接続する - アトラシアン製品ドキュメント

このあたりを参考に、データベースの移行をしていました。

できればjiraもdockerで動かしたいけど、とりあえずデータベースのみdockerでやってみようと思って、以下の様にデータベース立ち上げてデータベースの移行をやってみました。

docker run --name jira-postgres -t -i -v /root/jira-data/:/var/lib/postgresql/data/ -p 5432:5432 -e POSTGRES_PASSWORD=**** postgres

で、 <jira-install-directory>/bin/config.sh で接続情報を変えてみたら、接続テストは通るけどJIRAが起動しない、何かNullPointerExceptionで落ちてる。表示されるエラー画面がそもそもJIRAのエラー画面ですらなくてTomcatのエラー画面っぽかったので、ちょっとどうしていいかわからず。とりあえずWebのウィザード使ってみようと思って /var/atlassian/application-data/jira/dbconfig.xml を削除、JIRAを再起動してアクセスしてみました。で、やっぱりうまくいかないんですね。インポートでエラーになります。

java.lang.RuntimeException: Could not get unique fields for table 'AO_21D670_WHITELIST_RULES

どうも、あるテーブルのユニークフィールドが取得できてない模様。Atlassianのサポートに連絡して、色々と情報を集めたりしながらやりとりをしていましたが、なかなか解決せずげんなりしていたところで、ふと気づきました。

サポートバージョンじゃなくね?

PostgreSQLのイメージはlatest使っちゃダメ、という話でした。

Supported platforms - Atlassian Documentation

latestで引っ張ってくるとPostgreSQL 9.6系です。以下の様に9.4系最新を指定してデータベースを立ち上げ直したらインポートできました。

docker run --name jira-postgres -t -i -v /root/jira-data/:/var/lib/postgresql/data/ -p 5432:5432 -e POSTGRES_PASSWORD=**** postgres:9.4

こういう時にカジュアルに環境を切り替えられるので、dockerは便利ですね。

2016年10月の読書メモ

ペルソナ5をやりたいんだが、ハードの調達は相変わらずめどが立ちません。おかげさまで読書は捗っております。

今月の読書量

試してみたいことがあって、少しコードを書く時間をとったりもしていたのでここ数ヶ月の中では少なめですね。10冊です。漫画もそれなりに入っているので、多い方とは言えないと思います。

あなたの人生の物語

あなたの人生の物語 (ハヤカワ文庫SF)

あなたの人生の物語 (ハヤカワ文庫SF)

ハーレムの闘う本屋

ハーレムの闘う本屋

ハーレムの闘う本屋

ビビビ・ビバップ

ビビビ・ビ・バップ

ビビビ・ビ・バップ

3月のライオン 1巻

3月のライオン (1) (ジェッツコミックス)

3月のライオン (1) (ジェッツコミックス)

AIの遺電子 3巻

AIの遺電子 3 (少年チャンピオン・コミックス)

AIの遺電子 3 (少年チャンピオン・コミックス)

汝、コンピュータの夢

クジラの子らは砂上に歌う 8巻

コンパイルL

コンパイルL

コンパイルL

MM9

MM9 (創元SF文庫 )

MM9 (創元SF文庫 )

バーナード嬢曰く。 3巻

カンバンによるアジャイルプロジェクトマネジメント

今すぐ実践!  カンバンによるアジャイルプロジェクトマネジメント

今すぐ実践! カンバンによるアジャイルプロジェクトマネジメント

今月のベスト本

2冊を除けばどれも良かったので迷うところですが、「ハーレムの闘う本屋」をあげたいと思います。自分のやるべきことを見つけた人というのは強いですね。