M1 Mac上でRのパッケージでrJavaのエラーが出た場合の対処方法（備忘録）

# 背景
AppleのCPUであるM1を搭載したMacbook AirでRStudioのスクリプトを使用したところ、以前のIntel CPUのMacbook Airで動いていたRのパッケージの一部が動かなくなってしまいました。

エラーメッセージで調べてみた所、それらのパッケージに共通するのがJavaをRで使用するrJavaパッケージで、Javaの仕様が異なり、必要なJavaを入れないと動作しなくなったことがわかりました。
今回、解決方法を見つけたので、自分の備忘録としてこの記事を投稿します。

この記事ではmacをM1のCPUに買い換えたら動作しなくなった場合の対策方法をまとめました。
出典はosuzukiさんの以下の記事です。

https://zenn.dev/osuzuki/articles/b41dc7be15e2b5

# 発生する環境と状況
## 発生環境
* M1 Macbook Air
* macOS Monterey (BigSurでも発生していました）
* チップ：Apple M1
* R 4.2.1
* RStudio 2022.07.1 Build 554
* デフォルトのJava: 1.8.331.09 (x86_64) "Oracle Corporation" - "Java"がインストールされている状態

##エラーの状況
研究で使用する目的でrcdkパッケージを以下の通り読み込んだ所、以下のエラーメッセージが発生。
読んでみると `”Error: package ‘rJava’ could not be loaded”`のエラーメッセージがあり、基本となるrJavaが読み込まれておらず、それに依存するrcdkやrcdklibsパッケージがインストールされないことを確認。

``` diff_R
install.packages("rcdk")
library(rcdk)

```

\> <font color= "Blue">library</font> (rcdk)
<font color= "Red"> Loading required package: rcdklibs
Loading required package: rJava
Error: package or namespace load failed for ‘rJava’:
 .onLoad failed in loadNamespace() for 'rJava', details:
  call: dyn.load(jli, FALSE)
  error: unable to load shared object '/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/jli/libjli.dylib':
  dlopen(/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/jli/libjli.dylib, 0x000A): tried: '/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/jli/libjli.dylib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e'))
 Error: package ‘rJava’ could not be loaded </font>


# 発生原因
* macOSでデフォルトでインストールされているJavaがOracleのもので、rJavaが対応をしていない。

インストールされているJavaはTerminal.Appで`java --version`で確認が可能で、私のmacには`1.8.331.09 (x86_64) "Oracle Corporation" - "Java"`が入っていました。

また、現在のアーキテクチャーは同じくTerminal.Appの`uname -m`のコマンドから確認可能です。

* arm64 -> ARMアーキテクチャ で実行中
* x86_64 -> Rosetta利用 または ネイティブIntelアーキテクチャ で実行中

私の環境では`arm64`でしたので、rJavaを使用する場合にARMアーキテクチャーに対応したJavaが必要ですが、入っていないため、上記エラーが出ているのが原因でした。

RStudioのエラーメッセージをよく確認すると、<font color= "Red"> Ins/JavaAppletPlugin.plugin/Contents/Home/lib/jli/libjli.dylib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e'))</font> って書いてありますね。

# 対策方法
上記の原因から、ARMアーキテクチャーに対応したJavaを入れて対策を取りました。

* Apple M1シリコンに対応したJavaをインストール
azluの以下のサイトから対応するJava JDKをダウンロードしてインストールします。
https://www.azul.com/downloads/zulu-community/?os=macos&architecture=arm-64-bit&package=jdk

* Visual Studio Code (VS Code)インストール
JavaのExtension kitをインストールするために、VS Codeをインストールします。
https://code.visualstudio.com/

* VS Codeを立ち上げて、画面右側のExtensionからJavaのExtension Packをインストールします。

![スクリーンショット 2022-07-28 14.18.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531038/0062e1ed-6e58-a79b-bf01-70107cf2333d.png)

* VS Codeで動作確認を行う
> * Command + Shift + Pを押してJavaと入力し Create Java Project選ぶ
![スクリーンショット 2022-07-28 14.22.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531038/c430a51e-fb86-c8e3-4925-a7c9aa126be3.png)
> * Project TypeとLocationを指定
> 今回はJavaが動作するか簡易に確認するプロジェクトなので、Project Typeを"No build tools"、Locationをダウンロードフォルダに指定しました。
> ![スクリーンショット 2022-07-28 14.25.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531038/4382a0a3-0b55-1748-cb42-5d3296a3e554.png)
> * 適当なProject名を入れます。
> 私はM1 macという名前を入れました。
> ![スクリーンショット 2022-07-28 14.33.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531038/c1a37a37-9813-ed5a-7217-756d22fae8ba.png)
> * src/App.java を開く
> ![スクリーンショット 2022-07-28 14.36.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531038/d199d06a-f96b-3738-1aa2-0e87eb607e59.png)
> * Run押して実行して、画面の右下のTerminalに以下のような"Hello World!"の文字列が表示されれば、無事Javaがインストールされています。
> ![スクリーンショット 2022-07-28 14.39.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531038/f0640c9d-6384-59c4-0a5a-ef2bc4458ab7.png)

この設定を行うことで、M1 macのRStudioでrJavaやrJavaを使用しているパッケージが使用できるようになりました。


# 参考サイト
M1 Mac に Java の開発環境構築(インストール〜実行)してみた
https://zenn.dev/osuzuki/articles/b41dc7be15e2b5