読者です 読者をやめる 読者になる 読者になる

「軽量・高速モバイルデータベース Realm入門」を読んだ

軽量・高速モバイルデータベースRealm入門

軽量・高速モバイルデータベースRealm入門

Realm は個人開発でそこそこ使っててそれなりに理解しているけど、雰囲気でしか理解してない気がしていたのでちゃんと理解しようと思って読み始めた。

内容的には基礎 + 応用という感じで上級者向けという感じではない。

私は基礎がガバガバだったので、Part2 の基礎編を読むだけで今まで知らなかったことや間違いに気がつけたりしたので大変良かった。
(今まで List クラスを使っておらず、LinkingObject を乱用していたのだが多分使い方が間違っていることに気がついてしまった。)

特に良かったのが Part3 の活用編で、暗号化とか keychain とか Apple に申請するときとか、細かいけどこれを知るのには結構な経験が必要そうなのがまとめられててめっちゃためになった。

Part4 の Twitter クライアントを作る編もためになるのだが、本だけで文字を追うのが辛すぎて流し読みした。多分これはコードを Xcode で開いてちゃんと読みながらやった方が良い。
サーバサイドAPI -> Realm -> UI という流れを経ることで UI は Realm のデータだけを見ればよく、 Realm の Notification で UI も更新できるので、データの流れが綺麗でめっちゃよさそう。

内容はとても良かったのだが、1つどうしても許せない点があって、説明文とサンプルコードが読み手の想像した位置と違うのが大変つらい。
リスト10.3 のサンプルコードを参照、と書いてあるのにその下にリスト10.2のサンプルコードが載っていていて、リスト10.3は隣のページの右下にあったりする。
ページの都合なのかも知れないが、読んでるときめっちゃ混乱したしかなりイライラした。

とはいえ内容は良いし、Realm これからやる人はもちろん、 Realm それなりに理解している人なら2時間くらいでザーッっと読めるのでとりあえず読んでみるといいと思う。
Qiita などに落ちている記事よりずっとためになり、今後のリファレンスになります。

以下個人的な雑メモ:
  • String,Date, Data をオプショナル型で定義するには dynamic var を使用するが Bool, Int などの数値は RealmOptional を使う
    • これは RealmSwift 内部で ObjC の機能を使っているための技術的問題による制約
  • 一対多は List を使う
  • 逆方向の関連に LinkingObject を使う
  • 検索には indexedProperties メソッドをオーバライドする
  • マネージドオブジェクト/アンマネージドオブジェクト
    • 保存したやつをマネージド、保存前をアンマネージドと呼ぶ
  • Xcodeデバッグ
    • lldb で po object する
  • 異なる Realm に同じ object を追加できる
    • add じゃダメ、 create でやる
  • 暗号化キー
    • 文字列で持っていると ipa 解析される恐れがある
    • 動的に生成し keychain に保存するのがいいが、 keychain が消えたら復元できない
    • ローカルに貯めとくデータは最悪見られても良いものにしておこう