Swiftにおけるデータの永続化(Persistence)にはさまざまな手法がありますが、代表的なものとして UserDefaults と Keychain があり、それぞれ用途と特徴が異なります。以下に詳細を解説します。
1. UserDefaults
概要
UserDefaults は、小規模なデータ(ユーザ設定やフラグなど)を簡単に永続化するためのクラスです。主にアプリの設定値や状態の保存に使用されます。
特徴
-
アプリのサンドボックス内にデータを保存
-
データはキーと値のペアで管理される(辞書型のような構造)
-
永続的に保存されるが、セキュリティ保護はされない
-
保存可能なデータ型:
-
String -
Int -
Float -
Double -
Bool -
URL -
ArrayやDictionary(ただし、要素も保存可能な型である必要あり)
-
使用例
注意点
-
大量のデータや頻繁な書き換えには向いていない
-
機密情報(パスワードなど)を保存してはいけない
2. Keychain
概要
Keychain は、パスワードやトークンなどの機密情報を安全に保存するための仕組みです。Appleが提供する暗号化されたデータ保存領域で、セキュリティが非常に高いのが特徴です。
特徴
-
データは自動的に暗号化され、セキュリティ的に保護される
-
Touch ID や Face ID と連携可能(Keychain Access Control)
-
ユーザーの明示的な操作なしにアプリ間共有も可能(App Groups)
-
保存可能なデータは基本的に
StringまたはData
使用にはライブラリの利用が一般的
Appleの公式APIは低レベルで扱いが難しいため、次のようなラッパーライブラリの使用が推奨されます:
-
KeychainAccess(Kishikawa Katsumi氏のSwiftラッパー) -
Valet(Square社が提供)
使用例(KeychainAccessライブラリ)
注意点
-
初期設定や導入にやや手間がかかる
-
保存サイズに制限あり(1アイテムあたり約4KB程度)
適材適所の使い分け
| 用途 | UserDefaults | Keychain |
|---|---|---|
| ユーザ設定(ダークモードなど) | ◎ 簡単に保存可能 | × 過剰なセキュリティ |
| ログイン状態のフラグ | ◎ | × 一般情報には不要 |
| パスワードやアクセストークン | × セキュリティ不十分 | ◎ セキュアに保存可能 |
| デバイス認証と連携 | × | ◎ Face ID連携可能 |
まとめ
-
UserDefaultsは、非機密情報の簡易保存に向いたAPI -
Keychainは、セキュアな情報の保存に特化したAPI -
両者を使い分けることで、安全かつ効率的なデータ永続化が可能になります
生成日:2025/05/04