環境設定に手間取っている新人に送る JAVA_HOME の設定方法_MAC 編

# はじめに
こちら備忘録という意味合いが強い記事となっていることをご理解の上でお読みください。
…とは言いつつも、私と同じような新人の方にとっては環境設定は最初の関門と言っても差し支えないかと思うので、そういった方に向けてということで書かせていただきました。
※また用語解説などは同様に新人に向けてということでなんとなくわかれば程度に書いてます。

# そもそも JAVA_HOME って？
簡単に言うと
**「ソフトウェアなどが ※JDK を参照する際にどこを参照するかを示すもの」**です。
※ JDK とは Java を動かすときに必要なものです。
実際のところ JAVA_HOME を設定しなくとも、java は動きます。
それは何故かと言うと、システムが pc にある標準となっている JDK を勝手に指定してくれるからです。
ものによっては最新の JDK では動かないなどのこともあるため注意が必要です。

# じゃあどう設定するの？
手順としては以下の通りとなります。
**1. 「.bash_profile」 を準備する。
2. 「.bash_profile」 に必要項目を記載する。
3. 「.bash_profile」 を読み込ませる。**

…はい、「.bash_profile」 ばかりとなっています（でもこれがわからないんですよね…）
では順番に解説していきます。

## 「.bash_profile」 を準備する。
これは人にもよるらしく、既に用意されている場合もあるらしいです（おそらく別の機会に用意した）
それでは作っていきましょう。
作成するコマンドは以下のとおりです。

```
$ touch .bash_profile
```
これをターミナルを開いて、特に移動せず実行しましょう。
ディレクトリを変える必要はありません。
念の為に生成されているか確認してみましょう。

```
$ ls -a
```
意味としては **「現在いるディレクトリにあるファイルを全て表示してください」** というものです。
このコマンド後、「.bash_profile」 が画面上に表示されていれば OK です。

## 「.bash_profile」 に必要項目を記載する。
次に生成した「.bash_profile」 に必要事項を入力していきます。
まずは Java のバージョンを確認しましょう。

```
$ java -version
```
こちらも実行する場所はどこでも構いません。ターミナルを開いてすぐに実行しても大丈夫です。
下記の赤線の場所が現在の java のバージョンです。

<img width="573" alt="スクリーンショット 2018-10-03 22.04.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/269525/c4f1e925-2096-e31e-6bdf-98f72ca44b5f.png">

上図を見ると端数は切ったとして、"1.8" とありますね。
これを覚えておきましょう。
では早速先ほど生成した「.bash_profile」 を編集してみましょう。
以下のコマンドを実行してください。

```
$ vi .bash_profile
```

そうするとなにもない画面が現れると思います。
この画面、編集画面には間違いないですが、この状態は**コマンドモード**という状態です。
この vi コマンドで開ける画面について今回は詳しい説明は省きますが、今後のために多少調べておくと良いです。[vi コマンド]でググれば出てくるかと思います。

それではまずキーボードの[i]を押してみましょう。すると**編集モード**に切り替わり文字を入力できるようになります。
ここに以下をコピーアンドペーストします。

```
export JAVA_HOME=`/usr/libexec/java_home -v "1.8"`
```
おっと少し待ってください。先程確認した java のバージョンを思い出しましょう。今回私のバージョンは **"1.8"** だったので上記にはそうありますが、最新だと **"11"** という方が多いのではないでしょうか？
その場合は **"1.8"** の部分を **"11"** に変えましょう。
（もちろん **"10"** の場合は **"10"** と変えて OK です。）

貼り付けましたら **[esc]** ボタンを押下しましょう。すると**コマンドモード**に戻るかと思います。そこで **[:wq]** を入力し Enter を押してください。やっていることを簡単に説明すると**「セーブして終了」**です。
また入力している時、画面左下に入力したボタンが表示されますので確認してから Enter を押しましょう。

念の為確認を行いましょう。以下のコマンドを実行してください。

```
$ cat .bash_profile
```
これで画面上に先程ペーストした文字が表示されていれば OK です！

## 「.bash_profile」 を読み込ませる。
これはまあやらなくても構わないのですが、念の為。
以下のコマンドを入力してください。

```
$ source .bash_profile
```
はい、これで読み込まれたはずです。
もいっちょ念を入れて確認してみましょう。以下を実行してください。

```
$ echo $JAVA_HOME
```
これで設定した java のバージョンを持っていたら設定成功です。お疲れ様でした。再起動しても問題なく設定されているはずです。


# 他知っておくとよい知識
## 「.bash_profile」 ってそもそもなんやねん
ターミナルが起動されると実行されるもの、という認識で大丈夫です。
似たような役割を持つものに「.bashrc」 というものがありますが優先度は 「.bash_profile → 「.bashrc」 だそうです。
[.bash_profileと.bashrcについて](https://qiita.com/shyamahira/items/260862743e4c9794b5d2)

## java がそもそも入ってないんだけど
じゃあ落としましょう。と、サイトに案内してもいいのですが、私が使っているもので**「homebrew」**というパッケージがあります。
簡単に言えば**「自分に変わって各ソフトなどをインストール、更新してくれる便利屋さん」**です。
これをインストールして java を落とすのが良いのかなと。他のソフトもインストールできるので単純におすすめです。
（というか私がそうしているため、同じようにやらないとここまでの方法でうまくいかない可能性が微レ存…？）
[パッケージ管理システム Homebrew]
(https://qiita.com/b4b4r07/items/6efebc2f3d1cbbd393fc)
→ちなみにですが上記の中で**「Command Line Tools のインストール」** の項目がありますが、確か今は **「homebrew」** をインストールするときに勝手に落としてくれたような気がします…

## 古い JDK 入れようとしてもできないよ？
以下を御覧ください。
[MacのBrewでJava8 + Java10 + Java11を利用する](https://qiita.com/seijikohara/items/56cc4ac83ef9d686fab2)

# おまけに Apache NiFi ＆ groovyConsole について
こんなエラーが出まして。

```
WARNING: Illegal reflective access by org.codehaus.groovy.vmplugin.v7.Java7$1 (file:/Users/MISERARENAIYO!!/.sdkman/candidates/groovy/current/lib/groovy-2.5.2.jar) to constructor java.lang.invoke.MethodHandles$Lookup(java.lang.Class,int)
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.vmplugin.v7.Java7$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
```
Apache NiFi のスタート及び groovyConsole の起動時に起きていた現象です。どうなってんだと頭抱えてましたがなんと **JDK のバージョンが新しすぎたようで(そんなことあるんか…)**
古い **"1.8"** に変えたらうまくいきました。
まあこういったこともあるのでもし似たようなエラーが出たらこの記事を参考に古い JDK を設定し直してみるのも良いかもです。

# 終わりに
環境設定ってホント初級者殺しというかなんというか…社内開発をやっていたり先輩などと交流があれば教えてもらえるでしょうが、自己学習がメインとなるとこれだけでプログラムを諦める人もいるのではないでしょうか。
願うは一人でもそういった方の助けになれれば嬉しいです。
お付き合いいただきありがとうございました。