fishシェル環境でjenvを使う

ここ数日また猛暑日が続いていて本当に夜も寝苦しい感じですが、オフィスでは恒例のエアコンウォーズが繰り広げられておりまして、気づくと20度以下に設定されてたり27度前後に設定されていたり、本当にいろんな意味で身体が持ちません。どうしてそう極端なのか。

さてそれはそれとして、先日新たに作ったポエム日記でも少し書いたのですが、近頃職場のシステムリプレイスで新しいテクノロジーに触れる機会がありまして、目下JavaのPlayフレームワークをお勉強中です。

で、それにかこつけて新たにIntelliJ IDEAを使い始めたりしているのですが、環境構築周りでまぁやっぱりいろいろと躓いていますので、備忘でひとつひとつまとめて行きたいと思います。

今回はIntelliJやPlayフレームワーク以前の、Java開発環境のセットアップに関するメモです。

開発環境

OS macOS High Sierra Version 10.13.16
brew Homebrew 1.7.1
Homebrew/homebrew-core (git revision 92d5; last commit 2018-08-01)
jenv 0.4.4

前提

  • パッケージやアプリは全部brewコマンドで管理したい
    • 先日の記事にも書いたけど、最近ようやくHomebrew + brew-cask + brew-bundleによるパッケージマネジメントの手法が自分の中で確立されてきたので、今回の件も含めて今後パッケージやアプリの追加は極力brewbrew caskといったHomebrewコマンドを使って管理していきたい
  • 最近fishシェルを使い始めた
    • 特段カスタマイズしなくてもzshのようなモダンライクないい感じのシェル環境が構築できて概ね気に入っているのだが、bashでいうところの.bashrcのような設定ファイルの配置やシェルスクリプトの構文が独特で、スクリプト周りの悩みも多い…(それで結局いつもbashに戻っちゃうんだけどね. 今回はもう少し頑張りたい)

これらの前提の上で、Java開発のために複数のJDKバージョンを管理することを目的としてjEnvを導入していくのが今回の目的です。

jEnvとは

  • – What’s jEnv ?
  • “jEnv is a command line tool to help you forget how to set the JAVA_HOME environment variable”
  • “jEnvはJAVA_HOME環境変数の設定を気にしなくてよいようにするためのコマンドラインツールです”
  • (本家サイトより)

手っ取り早い話がpyenvやrbenvやNodistやnのような、複数の言語バージョンや開発環境バージョンを管理するためのものです。

※pyenvはpython, rbenvはruby, NodistやnはNode.jsのためのバージョン管理ツール

インストール方法

基本的には本家サイトに書いてあるやり方をしていきたいのだけど、書いてあるとおりにやってもエラーが出たりそもそもfishシェルのためのやり方はそこではなくGitHubのほうに書いてあったり、なかなかうまくいきませんでした。

途中躓いた内容を細かく書いたほうが同じトラブルにあたっている人には有益な気がするのだけどもう若干眠くなってきたので、とりあえずいまはざっくりどんな問題にあたったかだけ書き出しておいて、最終的にどうすればよかったかと書き残しておくことにします。

  1. jenv addした際に.jenv/versions/のディレクトリが無いと怒られる
  2. .config/fish/以下に配置するfishシェル向けの設定がうまくいかない
  3. jenv addするJDKのパスをどこから持ってくれば良いのかわからない

そのうち時間があったらこのあたりの個別のトラブルの詳細も追記するかも…(しないかも)

結論

結論というか、結局どんな感じで実行したかコマンドのログを記載します。(ねむい)

# install latest java => java 10.x
$ brew cask install java

# tap brew/versions to install java 8
$ tap homebrew/cask-versions

# install java 8
$ brew cask install java8

# install jenv
$ brew install jenv

# download configuration files for fish shell ※1
$ curl https://raw.githubusercontent.com/gcuisinier/jenv/master/fish/jenv.fish > ~/.config/fish/jenv.fish
$ curl https://raw.githubusercontent.com/gcuisinier/jenv/master/fish/export.fish > ~/.config/fish/export.fish

# prepare .jenv directory to store java versions ※2
$ mkdir -p ~/.jenv/versions

# check available java(JDK) versions you have
$ /usr/libexec/java_home -V

# add java(JDK) versions to jenv management (this time I added java10 and java8)
$ jenv add (/usr/libexec/java_home -v 10)
$ jenv add (/usr/libexec/java_home -v 1.8)

# confirm versions you added
$ jenv versions

# change current java(jdk) version ※3
$ jenv global oracle64-1.8.0.181

# check current java version
$ java -version

# check current javac version
$ javac -version

ポイントは※印でつけたところ。

※1 … fish向けの設定ファイルがGitHubにあるのでそれをダウンロードしてきてfishの設定ディレクトリに格納

※2 … jenv addした際に追加したJDK(JAVA_HOME)へのシムリンクが~/.jenv/versionsに作成されるが、jenv addはそのディレクトリがない場合に面倒を見てくれないようで手動で当該ディレクトリを作成する必要がある模様.
GitHubにも本件に関するissueが(複数)報告されている. たとえば: これ

※3 … jenv globalの他にもjenv localjenv shellなどがある. 詳細は本家ドキュメントを参照のこと

まとめ

この記事を書きながらjenvのGitHubリポジトリなんかを眺めていて気づいたけど、最終コミットが2018年1月なのね. あまり積極的に開発されてないのかしら…

コンセプト自体は最近のプログラミング言語開発環境で当たり前になってきたものだし、”これだからJavaは”って言われないためにもがんばってほしいなぁ。

Leave a Reply

Your email address will not be published. Required fields are marked *