react-native-mmkv
MMKVは、WeChatが開発した効率的で小型のモバイルキーバリューストレージフレームワークです。@amazon-devices/react-native-mmkvは、ネイティブC++ライブラリへの高速かつ直接的なJSバインディングを通じて、React Nativeアプリ内でMMKVを簡単に使用できるようにするライブラリです。詳細については、Tencent/MMKV(英語のみ)を参照してください。
インストール
package.jsonファイルに依存関係を追加します。"dependencies": { ... "@amazon-devices/react-native-mmkv": "~1.0.0", ... }npm installコマンドを使用して、依存関係を再インストールします。
例
以下は、ランダムなキーと値のペアを格納するシンプルなストレージを作成する例です。
import React, { useState } from 'react';
import { Button, StyleSheet, Text, View } from 'react-native';
import { MMKV, useMMKVString, useMMKVNumber, useMMKVBoolean } from '@amazon-devices/react-native-mmkv';
const storage = new MMKV();
export const App = () => {
const [hookUsername, setHookUsername] = useMMKVString('hookUsername');
const [hookAge, setHookAge] = useMMKVNumber('hookAge');
const [hookIsLoggedIn, setHookIsLoggedIn] = useMMKVBoolean('hookIsLoggedIn');
const [status, setStatus] = useState<string>("");
const handleSetData = () => {
storage.set('username', 'JohnDoe');
storage.set('isLoggedIn', true);
storage.set('age', 30);
setStatus('username、isLoggedIn、ageが保存されました');
};
const handleGetStringData = () => {
const username = storage.getString('username');
setStatus(`データから取得したユーザー名:${username || 'なし'}`);
};
const handleGetNumberData = () => {
const age = storage.getNumber('age');
setStatus(`データから取得した年齢:${age}`);
};
const handleGetBooleanData = () => {
const isLoggedIn = storage.getBoolean('isLoggedIn');
setStatus(`データから取得したログイン状態:${isLoggedIn}`);
};
const handleCheckKey = () => {
const hasUsernameKey = storage.contains('username');
setStatus(`ユーザー名キー(${hasUsernameKey})が存在します`);
};
const handleListKeys = () => {
const allKeys = storage.getAllKeys();
setStatus(`キー:${allKeys.join(', ')}`);
};
const handleDeleteKey = () => {
storage.delete('username');
setStatus('"username"キーを削除しました。');
};
const handleClearAll = () => {
storage.clearAll();
setStatus('すべてのデータがストレージから消去されました。');
};
const handleRecryptStorage = () => {
storage.recrypt('newEncryptionKey');
setStatus('保存されている値が新しいキーで再暗号化されました。');
};
const handleDisplaySize = () => {
setStatus(`保存されているサイズ:${storage.size}バイト`);
};
const handleHookSetData = () => {
setHookUsername('JaneDoe');
setHookIsLoggedIn(false);
setHookAge(25);
setStatus('username、isLoggedIn、ageが保存されました');
};
const handleUseMMKVStringData = () => {
setStatus(`フックで取得したユーザー名:${hookUsername || 'なし'}`);
};
const handleUseMMKVNumberData = () => {
setStatus(`フックで取得した年齢:${hookAge}`);
};
const handleUseMMKVBooleanData = () => {
setStatus(`フックで取得したログイン状態:${hookIsLoggedIn}`);
};
return (
<View style={styles.container} testID="mmkv-app-container">
<Text style={styles.title}>React Native MMKVの例</Text>
<Text style={styles.title} testID="mmkv-status">ステータス:{status}</Text>
<Button title="データを設定" onPress={handleSetData} testID="mmkv-app-set-button" />
<Button title="文字列を取得" onPress={handleGetStringData} testID="mmkv-app-get-string-button" />
<Button title="数値を取得" onPress={handleGetNumberData} testID="mmkv-app-get-number-button" />
<Button title="ブール値を取得" onPress={handleGetBooleanData} testID="mmkv-app-get-boolean-button"/>
<Button title="キーの存在を確認" onPress={handleCheckKey} testID="mmkv-app-contains-button"/>
<Button title="すべてのキーを一覧表示" onPress={handleListKeys} testID="mmkv-app-get-all-keys-button"/>
<Button title="'Username'キーを削除" onPress={handleDeleteKey} testID="mmkv-app-delete-key-button"/>
<Button title="すべてのデータを消去" onPress={handleClearAll} testID="mmkv-app-clear-all-button"/>
<Button title="ストレージを再暗号化" onPress={handleRecryptStorage} testID="mmkv-app-recrypt-button"/>
<Button title="ストレージサイズを表示" onPress={handleDisplaySize} testID="mmkv-app-size-button"/>
<Button title="フックでデータを設定" onPress={handleHookSetData} testID="mmkv-app-hook-set-button"/>
<Button title="フックで文字列データを取得" onPress={handleUseMMKVStringData} testID="mmkv-app-hook-get-string-button"/>
<Button title="フックで数値データを取得" onPress={handleUseMMKVNumberData} testID="mmkv-app-hook-get-number-button"/>
<Button title="フックでブール値データを取得" onPress={handleUseMMKVBooleanData} testID="mmkv-app-hook-get-boolean-button"/>
</View>
);
};
const styles = StyleSheet.create({
container: {
flexGrow: 1,
justifyContent: 'center',
alignItems: 'center',
padding: 20,
backgroundColor: '#fff',
},
title: {
fontSize: 20,
marginBottom: 20,
textAlign: 'center',
},
button: {
marginVertical: 10,
},
});
APIリファレンス
VegaのMMKVライブラリは、以下のメソッドのサポートを追加するターボモジュールを提供します。
このライブラリの情報、APIリファレンス、その他の詳細については、専用のドキュメントページ(英語のみ)を参照してください。
ネイティブMMKV
| メソッド | 説明 |
|---|---|
MMKV |
MMKVのベースストレージクラス。 |
size |
ストレージの現在の合計サイズをバイト単位で取得します。 |
set |
指定されたkeyに値を設定します。 |
getBoolean |
指定されたkeyのブール値を取得します。存在しない場合はundefinedになります。 |
getString |
指定されたkeyの文字列値を取得します。存在しない場合はundefinedになります。 |
getNumber |
指定されたkeyの数値を取得します。存在しない場合はundefinedになります。 |
getBuffer |
符号なし8ビット(0~255)データの生バッファを取得します。 |
contains |
指定されたkeyがこのMMKVインスタンスに保存されているかどうかを確認します。 |
delete |
指定されたkeyを削除します。 |
getAllKeys |
すべてのキーを取得します。 |
clearAll |
すべてのキーを削除します。 |
recrypt |
このMMKVインスタンスのすべてのデータを暗号化するための暗号化キーを設定(または更新)します。 |
trim |
ストレージスペースを整理し、メモリキャッシュを消去します。 |
toString |
MMKVの文字列表現を取得します。 |
toJSON |
MMKVのJSON表現を取得します。 |
addOnValueChangedListener |
値の変更に対するリスナーを追加します。リスナーは、このストレージインスタンスの値が変更(設定または削除)されるたびに呼び出されます。 |
フック
| メソッド | 説明 |
|---|---|
useMMKV |
デフォルトの共有MMKVインスタンスを使用します。 |
useMMKVString |
指定されたMMKVストレージインスタンスから、指定されたkeyの文字列値を使用します。 |
useMMKVNumber |
指定されたMMKVストレージインスタンスから、指定されたkeyの数値を使用します。 |
useMMKVBoolean |
指定されたMMKVストレージインスタンスから、指定されたkeyのブール値を使用します。 |
useMMKVObject |
指定されたMMKVストレージインスタンスから、指定されたkeyのオブジェクト値を使用します。 |
useMMKVListener |
指定されたMMKVストレージインスタンスの変更をリッスンします。 |
構成
| メソッド | 説明 |
|---|---|
id |
MMKVインスタンスのID。複数のインスタンスを使用する場合は、必ず異なるIDを使用してください。 |
path |
MMKVインスタンスのルートパス。 |
encryptionKey |
MMKVインスタンスの暗号化/復号化キー。 |
mode |
MMKVの処理モードを構成します。 |
モード
| メソッド | 説明 |
|---|---|
SINGLE_PROCESS |
MMKVインスタンスは、単一のプロセス(このアプリ)からのみ使用されます。 |
MULTI_PROCESS |
MMKVインスタンスは、アプリクリップ、共有拡張機能、バックグラウンドサービスなど、複数のプロセスから使用できます。 |
既知の問題
recryptメソッドはVega仮想デバイスではサポートされていませんuseMMKVBufferフックはサポートされていません。
サポートされるreact-native-keplerのバージョン
| パッケージのバージョン | @amazon-devices/react-native-kepler version |
|---|---|
| 1.0.x+3.0.2 | 2.0.x+rn0.72.0 |
関連リソース
その他のライブラリについては、サポート対象のサードパーティのライブラリとサービスを参照してください。
Last updated: 2025年9月30日

