JestでDynamoDBのテストする方法を調べると、Jest公式のドキュメントの Using with DynamoDB が見つかります。「めっちゃ便利!」と思って進めたのですが、M1 Macの場合はちょっと一工夫必要だったので、その問題と解決策を書こうと思います。
問題
ドキュメント通りに進めて、jestを実行すると以下のようなエラーが発生します。
重大: [sqlite] SQLiteQueue[]: error running job queue
com.almworks.sqlite4java.SQLiteException: [-91] cannot load library: java.lang.UnsatisfiedLinkError: Can't load library: /private/var/folders/5c/h19nr7xj51l7rgbj889mc1y00000gn/T/dynamodb-local/DynamoDBLocal_lib/libsqlite4java-osx.dylib
ざっくり言うと、jest-dynamodb は内部的にsqlite4java
というライブラリを使っているらしく、これが x86_64 にしか対応してないようです。M1 Macを使っている方だと、僕のように ARM版のJavaをインストールしている方も多いと思いますが、そうすると sqlite4java
を実行できないということっぽいです。
なので、解決法としては2通り考えられます。
- x86_64版Java をインストールして置き換える
- ARM対応の
sqlite4java
をインストールして置き換える
Java自体を置き換えるのは嫌だったので、後者を実施することにしました。
サードパーティ製のライブラリをインストールするという性質上、自己責任でお願いします!
何が起きても当方は責任を負いかねます🙇♂️
STEP 1. ARM対応板 sqlite4java
をダウンロード
ここにアクセスして io.github.ganadist.sqlite4java:libsqlite4java-osx-arm64
をダウンロードします。
STEP 2. ファイルを置き換える
エラー文で出たディレクトリを開いて、ダウンロードしたファイルを移動して置き換えます。このとき、名前の変更も忘れないようにしてください。前のファイルはリネームして残しておくのがいいと思います。
$ open /private/var/folders/5c/h19nr7xj51l7rgbj889mc1y00000gn/T/dynamodb-local/DynamoDBLocal_lib/
STEP 3. 一旦開く
このままだと、Macのセキュリティに引っかかって実行できません。
なので、一旦 追加したファイルを左クリック > 開く
でアプリケーションを実行してください。
すると警告っぽいのでますが、開く
を選択してください。
これで、アプリケーションを開くことを許可できます。
STEP 4. 改めてjestを実行する
$ jest
これで問題は解決しました!