背景
AppleのCPUであるM1を搭載したMacbook AirでRStudioのスクリプトを使用したところ、以前のIntel CPUのMacbook Airで動いていたRのパッケージの一部が動かなくなってしまいました。
エラーメッセージで調べてみた所、それらのパッケージに共通するのがJavaをRで使用するrJavaパッケージで、Javaの仕様が異なり、必要なJavaを入れないと動作しなくなったことがわかりました。
今回、解決方法を見つけたので、自分の備忘録としてこの記事を投稿します。
この記事ではmacをM1のCPUに買い換えたら動作しなくなった場合の対策方法をまとめました。
出典はosuzukiさんの以下の記事です。
発生する環境と状況
発生環境
- 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パッケージがインストールされないことを確認。
install.packages("rcdk")
library(rcdk)
> library (rcdk)
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
発生原因
- 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のエラーメッセージをよく確認すると、 Ins/JavaAppletPlugin.plugin/Contents/Home/lib/jli/libjli.dylib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e')) って書いてありますね。
対策方法
上記の原因から、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をインストールします。
- VS Codeで動作確認を行う
- Command + Shift + Pを押してJavaと入力し Create Java Project選ぶ
- Project TypeとLocationを指定
今回はJavaが動作するか簡易に確認するプロジェクトなので、Project Typeを"No build tools"、Locationをダウンロードフォルダに指定しました。
- 適当なProject名を入れます。
私はM1 macという名前を入れました。
- src/App.java を開く
- Run押して実行して、画面の右下のTerminalに以下のような"Hello World!"の文字列が表示されれば、無事Javaがインストールされています。
この設定を行うことで、M1 macのRStudioでrJavaやrJavaを使用しているパッケージが使用できるようになりました。
参考サイト
M1 Mac に Java の開発環境構築(インストール〜実行)してみた
https://zenn.dev/osuzuki/articles/b41dc7be15e2b5