DynamoDB Local: Failed to load native library sqlite4java

TL;DR — DynamoDB Local のストレージエンジンは起動時にネイティブライブラリ(sqlite4java)をロードしますが、JVM がそれを見つけられないか実行できません。2つの典型的な原因: -Djava.library.path=./DynamoDBLocal_lib なしで jar を起動した、または Apple Silicon の Mac 上で同梱のバイナリが x86_64 向けである。JVM をネイティブライブラリフォルダに向ける、最新の DynamoDB Local に更新する、またはマルチアーキテクチャの Docker イメージを実行してください。

意味

Failed to load native library:'libsqlite4java-osx-1.0.392.dylib'. ...
java.lang.UnsatisfiedLinkError: no sqlite4java-osx-x86_64-1.0.392 in java.library.path

DynamoDB Local は、そのディスク上のストレージがネイティブ(OS ごと、アーキテクチャごと)ライブラリで支えられている Java アプリケーションです。UnsatisfiedLinkError は、JVM がそのバイナリをリンクできなかったと言っています。ライブラリパスにまったくないか、ファイルは存在するが JVM とは異なる OS/CPU アーキテクチャ向けにビルドされているかのどちらかです。エミュレータはそれなしでは起動できません。

発生する理由

  • -Djava.library.path の欠落 — ダウンロードはネイティブを DynamoDBLocal_lib/ に同梱しており、ドキュメントの起動コマンドは JVM をそこに向ける必要があります。java -jar DynamoDBLocal.jar を素で(または別の作業ディレクトリから)実行するとそれらを失います。
  • Apple Silicon(M シリーズ) + x86_64 ネイティブ — 古い DynamoDB Local ビルドやラッパーは Intel の libsqlite4java-osx バイナリのみを同梱しており、ARM64 の JVM はそれらのロードを拒否します("no matching architecture")。
  • 古いコピーを固定したラッパーjest-dynamodbserverless-dynamodb-local などのツールは独自の DynamoDB Local をダウンロードします。キャッシュされた古いバージョンは、「更新」した後でも古いネイティブを残します。
  • クリーンアップされた temp ディレクトリに展開されたネイティブ — 一部のセットアップは OS がクリアする temp フォルダに展開するため、再起動まで動作します。

修正方法

  1. 展開したフォルダから、ドキュメントどおりの方法で起動します:

    java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
  2. DynamoDB Local を更新します — 最新リリースをダウンロードします。新しいビルドは古いものを悩ませた Apple Silicon の問題を解決します。ラッパーがインストールを管理している場合は、そのキャッシュをクリア/再インストールして、実際に新しいバージョンを取得させてください。

  3. または Docker でネイティブを完全に回避しますamazon/dynamodb-local イメージが最も壊れにくい経路で、Apple Silicon 上でも動作します:

    docker run -p 8000:8000 amazon/dynamodb-local
  4. 変更できない古いビルドの Apple Silicon では: Rosetta 2 下で x86_64 の JDK を実行する(そうすると Intel ネイティブが JVM に一致する)か、libsqlite4java-osx.dylib をコミュニティが公開した sqlite4java の ARM64 ビルドに置き換えます。

  5. インメモリの抜け道: -inMemory は現在のビルドでも依然としてライブラリを必要とします。欠落したネイティブの回避策ではありません。代わりにパス/アーキテクチャを修正してください。

エミュレータが起動したら、ツールをそれに向けます。DynoTable デスクトップアプリ は DynamoDB Local に http://localhost:8000 で接続するため、スクリプトを書かずにテーブルを作成しデータを検査できます。DynamoDB JSON コンバーター を使って、ワイヤーフォーマットのシードアイテムを準備しましょう。

関連するエラー

References

最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。

Console なしで DynamoDB を扱う

DynoTable は DynamoDB 向けの高速なデスクトップクライアントです — テーブルを閲覧し、SQL スタイルのクエリを実行し、アイテムをローカルで編集できます。