[試行錯誤編] Ansible on cygwinを活用した、実用開発環境構築 ②少し苦労してgit+java+sbt


(序) cygwin知識のなさではまる。

以下、試行錯誤の末、git+java+sbtをcygwin 32bit版に導入した記録。
前提は、こちらで構築した"Ansible on cygwin with zsh"。

...構築時に入れた、apt-cygがチェックサム周りの不整合によりgitやcurlのパッケージを入れられなくなっていた。zshだけはすんなり入っていたので、原因究明が遅れる。原因さえわかっていれば、実作業時間はわずかなので、以下、cygwin+java+sbtなどモダンな周辺環境を何らかの理由で必要とする人向けのメモとして残しておく。

1) javaをlinux流に入れる。

"cygwin java"でググり、このあたり、いかにも、と思ったので、

Windows用のJavaをCygwinで使おうとすると、パスの書き方をWindowsのパスの書き方にしないといけなかったりで、なかなか煩わしい(Windowsのディレクトリ構造を表す円マークはCygwinではエスケープ文字という扱いがされていたりして)

出典の指示に従い、java_wrapper経由で、windows上のJavaをcygwinで扱えるようにする。

Tips:

  • windows上のJavaを予めインストール(私の環境ではintelliJを使った時に既にインストール済)
  • JAVA_HOMEの設定が必要となるため、"windowsキー+Pauseボタン"でシステムを起動し、作業

2) gitを使うために...

java自体は動作している。ということで、マイクロサービスをscalaとkotlinとかで動かしたい人間として、とりあえず、scalaベースをfinatraを持ってきて動作確認・・・というところで、問題発生。gitがdll不足で動かない。ついでに、curlもdll不足で動かない。

64bit版windows環境とcygwin or apt-cygの不整合かと思い、
uname -m
してみるとと、案の定i686の文字を発見(cygwinは32bit版)。
64bit版windowsの上に、cygwin32bit版を入れたことが問題かと思い、その手の問題に関する先人の苦労(こことか)を読み、対策を考える。

...が、そうではなくて、"Cygwinはversion 2.867からmd5sumを使うのをやめてsha512sumに切り替えたのに、パッケージ管理システムのapt-cygがその切り替えに対応できていなくて"、という問題だったことを知り、apt-cygコマンドの”md5sum”を”sha512sum”で置換。

Tips:

  • "cygstart ."でカレントディレクトリをwindowsフォルダとして開くことができる。MacのOpen相当なので、普段Mac使いな人は、.zshrcに、alias open='cygstart'とか、alias o='cygstart'とかしておくのが良いかも。
  • apt-cygコマンドのチェックサムが正常化した後は、誤動作していたものをいったんremoveし再びinstall(今回は、apt-cyg install git curl) ※ curlはsbtの動作に必要

3) sbtでwebサーバを動かす。

今回は、finatraをsbtで動かす。
sbtをどうしようか迷ったが、力技で、scala-sbtサイトの配布箇所からAll platforms版を直接ダウンロードし、解凍版をcygwinの/usr/local/binディレクトリ(windows上では、C:\cygwin\usr\local\bin)に放り込む。
64bit版のjavaを32bitのcygwin上のjarが呼ぶとかなにか気持ち悪いが、動くはずなので、とりあえず、 解凍先の /usr/local/bin/sbt/binで、java -jar sbt-launch.jarを実行し、sbt環境を導入する。

あとは、finatraのホームフォルダで 例えば、

/usr/local/bin/sbt/bin/sbt helloWorld/run

を実行すれば、helloworld環境が構築され、localhostでアクセスできるサーバが立ち上がる。一安心。

4) 感想

cygwinで快適java環境構築(javaに慣れていれば)、なんとかなりは、する。
誰得、という感じがひしひしとしてきたが、、

バージョンアップが続くnode環境については、もはや嫌な予感しかしないので、素直に、ansible経由でdockerなどを使うこととしたい。

Finatraとnodeの連携など、そのうち書くかも。