🏝️

NativeScriptのクライアントサイドストレージ探し

2022/09/26に公開

なぜクライアントサイドストレージを探すのか

動的なアプリであれば、APIを利用してバックエンドから情報をもらってきたり、逆にこちらから情報を与えたり消したりなど、HTTPSなどの通信手段でやり取りをしている。が、通信なしで、アプリ側だけで(つまりスマホのストレージだけで)保存したいデータが出てきた。そしてそれはアプリを一度閉じても、残っていてほしい。(補足:vueを使っている方は、アプリ起動中のstoreであればvuexでできる)
私の場合は、ログイン済みのユーザーを識別するために、ユーザー固有のAPIヘッダー情報を、スマホ内に記憶させたい。

クライアントサイドストレージの詳細は以下を参照にしていただきたい。私もまだよくわかっていない。
mdn - クライアント側ストレージ

利用環境

Nativescript-vueを使って、iOSとAndroidの両方で使えるアプリを開発中。

  • nativescript-vue 2.9.0
  • @nativescript/core 8.2.4
  • @nativescript/webpack 5.0.6

Nativescriptのプロジェクト内コードから、ストレージをいじれるプラグインを探す。

探してみた所感まとめ

初学者なのもあり、セキュアに使えるか、シンプルにつかえるか、という2点を重視してまとめた。
今の所、私の場合はnativescript-secure-storageを使うのが良さそうに思っているが、更新が2年前で止まっており、現在も問題なく使えるか不明。やってみたら、こちらに追記したいと思っている。
→2022/11/7追記 nativescript-secure-storageは、使っているSAMKeychainというのがもうメンテナンスされていないためか、シミュレータだと動くが、実機では動かなかった。
関連issue Is it still safe to use this? SAMKeychain is deprecated and Hawk library seems to be dying.
なので使わないほうがいい

2022/11/7更新

プラグイン名 セキュアさ シンプルさ 備考
ApplicationSettings ?? 公式のやり方なので挙動が安定していそう
CouchDB利用 ?? データベースの基礎が必要になりそう、NativeScriptチームのtriniwizさんがつくっているので、安定していそう
nativescript-sqlite 商用利用版(有料)にすると暗号化できる
nativescript-localstorage 有料(サブスク)
nativescript-secure-storage Outdated、動かない

あまり分からず調べているので、誤っている部分や、追加すべき情報があれば、ご指摘いただけると助かります。

2022/11/7追記:結局ApplicationSettingsで作った

nativescript-secure-storageが使えず、他にいい方法がないか、NativeScriptのDiscordで聞いてみたが、初学者でも使えるような代物は返ってこなかった。
諦めて、一番安定して動きそう、かつ、シンプルな、ApplicationSettingsで実装した。
不安要素としてセキュアであるのか、があるのだが、同じようなログイン情報保持目的で使っている方々もいたので、まあいいか(というか他に代替手段がない)と思って使った。
ApplicationSettings loses setting despite using flush()
Nativescript application settings will not persist username and password

利用の具体例
Client-Side Storage in NativeScript Applications
細かい利用方法(少し古いので、すべてのmethodsが動くかは不明)
NativeScript Core - ApplicationSettings

上記に載っているget,set,remove関連のmethodsはiOS、Androidともに問題なく動くので、実用に耐えうると思う。
注意)const appSettings = require("tns-core-modules/application-settings")で呼び出すと書いてあるが、tns-core-modulesは滅びて、@nativescript/coreに統合されたので、const appSettings = require('@nativescript/core/application-settings')と書く。

Discussion