Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
CoreData バッドプラクティス
お題目
• 簡単な自己紹介
• CoreData 書籍
• バッドプラクティスCoreData
• バッドプラクティスからのリカバリ
簡単な自己紹介


• iPhoneのアプリ開発者
• 頭わるいアプリ開発
• アプリの企画提案(サービス/フレームワークの提案)
• 喫茶作業者
開発アプリ
Wifiルーター用アプリ

印刷サービス用アプリ
CoreData の書籍
iOS CoreData徹底入門
• 前半sqlite、後半CoreDataの
構成
• 利用ケースに基づいたサンプ
ルコード
• マルチスレッドについて言及
なし
• バイナリを格納する方法につ
いて詳しい
CoreData を使う
ユーザが増えるのは
うれしいかぎり。
ただしCoreDataで
思わぬ罠に陥る事も…
そもそも使う
必要がある?
SQLライクにデータを永続化&問い合わせ機
能を実現するのであれば(既にsqliteに関する
知識があれば)sqlite も選択肢かも。
規模がそれ程大きくない場合は、
NSArray、NSDictionary で永続化、
NSPredicate を使って絞り込みが可
能。
規模がそれ程大きくない場合は、
NSArray、NSDictionary で永続化、
NSPredicate を使って絞り込みが可能。
NSPredicte による
データの問い合わせ
• NSPredicate によるデータの問い合わせが可能
• 指定方法がNSString のフォーマット分に近い
ものが使える(同じではない)
• plist で絞り込めるのは(500-100...
NSPredicateについては
サンプルコード参照

https://github.com/
notoroid/SimpleSearch
CoreDataの特徴
• NSPredicte によるデータの問い合わせ
• データモデルのアップグレードがそこそこ整備(マイ
グレーション)
• データの永続化とオブジェクト管理が分離されてい
る(取り消しやマルチスレッドにも応用可)
• ...
データの永続化
• オブジェクトの形でデータを永続化できる

オブジェクトの形で
なければ他の選択肢
で良くないのでは?
データモデルの
アップグレード機能がそこそこ整備
• 複数のデータモデルを定義して、データモデ
ル間のデータモデルのアップグレードが可能
• データモデル間のアップグレード方法を指定
することができる(自動、手動)
• sqlite でもできな...
オブジェクトっぽく扱える
• NSManagedObject がCoreDataのオブジェク
ト。NSManagedObject から値を取得
• NSManagedObject をカスタマイズして、オ
ブジェクトのプロパティのように扱うことも...
CoreData の立ち位置は?
• sqlite や、plist で実現可能な事が重複してい
る。
• オブジェクトを永続化することに関して網羅
的だがCoreDataを使う上で抑えておくことが
多い。
• iOS SDKでもミドルウェア的扱...
CoreData を採用するに
あたって
• データモデルの継続的アップグレードが必要?

• バックグラウンドとフォアグランドでデータ
の更新が必要?
• 他のアプリ開発でもステレオタイプにデータ
を扱いたい?
もしそうでなければ
他の手段を探してみて
は?
バッドプラクティス
CoreData
CoreData を使う上で
悪い例を紹介
バッドプラクティス①
CoreData の
ミドルウェアを使う
MagicalRecord
• パッケージ管理(CocoaPods) で見つかる
• データモデルに基づいてカスタムクラスを自
動生成&マイグレーション機能を提供
• CreDataを使う上で便利な機能を提供
MagicalRecord
• カスタムクラス
• 無駄に巨大(全文検索の邪魔)
• 検索できる有益な情報がCoreDataそのものよ
り少ない。
• デフォルトのストレージ位置が
BundleDisplayName(アプリの表示名)
デフォルトのストレージ位置が
BundleDisplayName(アプリの表示名)

• アプリの表示を変えると、以前の保存用デー
タのパスを忘れてしまう。
• アプリの表示名を変更するだけで、データベー
スが消去されたように錯覚してしまう。
何が言いたいかと
いうと
初期の開発スピードは稼げる
が、メンテナンスに伴う作業
は悲惨なものになる
MagicalRecord へのフォロー

• おそらくは、Twitter やFacebookページをなど
もオフラインデータの利用を想定したもの
• ユーザの貴重なデータを取り扱うことはあま
り想定されていないかもしれない。
技術査定の問題
• 検索経由で探し出したミドルウェアは技術の
査定ができてないかも?
• パッケージ管理に対応しているミドルウェア
は最良の解決方法?
バッドプラクティス②
データの中に画像
データの中に画像
• CoreDataのデータモデルに定義にバイナリ
データを指定可能
• イメージもバイナリデータの形で保存可能
• ファイルで保存するよりも管理が楽。
• 本来サムネイルだけだったのがいつの間にか
多用
• 格納する画像解像度を高くすると、永続化デー
タのサイズが巨大化。メモリオーバーで落ち
る
• シミュレータや、最新機種だけでテストする
と問題を発見できない
まとめ
• ミドルウェア相当のCoreDataに対して、ミドル
ウェアは蛇足かも?
• パッケージ管理で取り入れるミドルウェアは用途
に応じて査定しましょう。査定しないミドルウェ
アを納品するとあなたの信用が目減りします。
• データモデルへの...
バッドプラクティス
からのリカバリ
バッドプラクティス
満載のアプリを
リリースしてしまった。
もうお手上げ?
CoreData 様は
バッドプラクティス満載の
アプリにも救いの手を
差し伸べてくれます。
バッドプラクティス
からの脱却
• データモデルをアップグレードして大きなバ
イナリデータを外に追い出す。
• データモデルのアップグレードには、データ
モデルマッピングを使う。
• バイナリデータを外に書き出すには手動アッ
プグレードを用意す...
新しい属性を追加するだけであれば、データマッ
ピングファイルは必要ない。
データモデル内の属性名を変
更程度であればモデルマッピ
ングソフトの作成だけで済む。
デモコード
https://github.com/
notoroid/
CoreDataImageMigrati
onSample
注意点
• データモデルの名前にアンダーバー(_) を使う
とデータマッピングを読み込まなくなる
• 誤ったデータモデルを追加した場合は、手動
でプロジェクトファイルを編集する必要が出
てくる
まとめ
• iOS CoreData 徹底入門 が出たことCoreData
が身近になりました。
• ステレオタイプにiOSアプリのデータを扱いた
いのであれば、この機会に学んでみてはいか
がでしょう?
http://irimasu.com
Twitter: @notoroid
公式: @irimasu
Core Data バッドプラクティス
Core Data バッドプラクティス
Upcoming SlideShare
Loading in …5
×

Core Data バッドプラクティス

6,532 views

Published on

2013年11月札幌iPhone開発懇談会勉強会プレゼンテーション資料。 iOS CoreData徹底入門 販売記念。CoreData のバッドプラクティスを紹介します。

Published in: Technology
  • Be the first to comment

Core Data バッドプラクティス

  1. 1. CoreData バッドプラクティス
  2. 2. お題目 • 簡単な自己紹介 • CoreData 書籍 • バッドプラクティスCoreData • バッドプラクティスからのリカバリ
  3. 3. 簡単な自己紹介 • iPhoneのアプリ開発者 • 頭わるいアプリ開発 • アプリの企画提案(サービス/フレームワークの提案) • 喫茶作業者
  4. 4. 開発アプリ Wifiルーター用アプリ 印刷サービス用アプリ
  5. 5. CoreData の書籍
  6. 6. iOS CoreData徹底入門 • 前半sqlite、後半CoreDataの 構成 • 利用ケースに基づいたサンプ ルコード • マルチスレッドについて言及 なし • バイナリを格納する方法につ いて詳しい
  7. 7. CoreData を使う ユーザが増えるのは うれしいかぎり。
  8. 8. ただしCoreDataで 思わぬ罠に陥る事も…
  9. 9. そもそも使う 必要がある?
  10. 10. SQLライクにデータを永続化&問い合わせ機 能を実現するのであれば(既にsqliteに関する 知識があれば)sqlite も選択肢かも。
  11. 11. 規模がそれ程大きくない場合は、 NSArray、NSDictionary で永続化、 NSPredicate を使って絞り込みが可 能。
  12. 12. 規模がそれ程大きくない場合は、 NSArray、NSDictionary で永続化、 NSPredicate を使って絞り込みが可能。
  13. 13. NSPredicte による データの問い合わせ • NSPredicate によるデータの問い合わせが可能 • 指定方法がNSString のフォーマット分に近い ものが使える(同じではない) • plist で絞り込めるのは(500-1000要素ぐらいが 限界)
  14. 14. NSPredicateについては サンプルコード参照 https://github.com/ notoroid/SimpleSearch
  15. 15. CoreDataの特徴 • NSPredicte によるデータの問い合わせ • データモデルのアップグレードがそこそこ整備(マイ グレーション) • データの永続化とオブジェクト管理が分離されてい る(取り消しやマルチスレッドにも応用可) • オブジェクトっぽく扱える
  16. 16. データの永続化 • オブジェクトの形でデータを永続化できる オブジェクトの形で なければ他の選択肢 で良くないのでは?
  17. 17. データモデルの アップグレード機能がそこそこ整備 • 複数のデータモデルを定義して、データモデ ル間のデータモデルのアップグレードが可能 • データモデル間のアップグレード方法を指定 することができる(自動、手動) • sqlite でもできないことはない
  18. 18. オブジェクトっぽく扱える • NSManagedObject がCoreDataのオブジェク ト。NSManagedObject から値を取得 • NSManagedObject をカスタマイズして、オ ブジェクトのプロパティのように扱うことも 可能
  19. 19. CoreData の立ち位置は? • sqlite や、plist で実現可能な事が重複してい る。 • オブジェクトを永続化することに関して網羅 的だがCoreDataを使う上で抑えておくことが 多い。 • iOS SDKでもミドルウェア的扱い。
  20. 20. CoreData を採用するに あたって • データモデルの継続的アップグレードが必要? • バックグラウンドとフォアグランドでデータ の更新が必要? • 他のアプリ開発でもステレオタイプにデータ を扱いたい?
  21. 21. もしそうでなければ 他の手段を探してみて は?
  22. 22. バッドプラクティス CoreData
  23. 23. CoreData を使う上で 悪い例を紹介
  24. 24. バッドプラクティス① CoreData の ミドルウェアを使う
  25. 25. MagicalRecord • パッケージ管理(CocoaPods) で見つかる • データモデルに基づいてカスタムクラスを自 動生成&マイグレーション機能を提供 • CreDataを使う上で便利な機能を提供
  26. 26. MagicalRecord • カスタムクラス • 無駄に巨大(全文検索の邪魔) • 検索できる有益な情報がCoreDataそのものよ り少ない。 • デフォルトのストレージ位置が BundleDisplayName(アプリの表示名)
  27. 27. デフォルトのストレージ位置が BundleDisplayName(アプリの表示名) • アプリの表示を変えると、以前の保存用デー タのパスを忘れてしまう。 • アプリの表示名を変更するだけで、データベー スが消去されたように錯覚してしまう。
  28. 28. 何が言いたいかと いうと
  29. 29. 初期の開発スピードは稼げる が、メンテナンスに伴う作業 は悲惨なものになる
  30. 30. MagicalRecord へのフォロー • おそらくは、Twitter やFacebookページをなど もオフラインデータの利用を想定したもの • ユーザの貴重なデータを取り扱うことはあま り想定されていないかもしれない。
  31. 31. 技術査定の問題 • 検索経由で探し出したミドルウェアは技術の 査定ができてないかも? • パッケージ管理に対応しているミドルウェア は最良の解決方法?
  32. 32. バッドプラクティス② データの中に画像
  33. 33. データの中に画像 • CoreDataのデータモデルに定義にバイナリ データを指定可能 • イメージもバイナリデータの形で保存可能 • ファイルで保存するよりも管理が楽。
  34. 34. • 本来サムネイルだけだったのがいつの間にか 多用 • 格納する画像解像度を高くすると、永続化デー タのサイズが巨大化。メモリオーバーで落ち る • シミュレータや、最新機種だけでテストする と問題を発見できない
  35. 35. まとめ • ミドルウェア相当のCoreDataに対して、ミドル ウェアは蛇足かも? • パッケージ管理で取り入れるミドルウェアは用途 に応じて査定しましょう。査定しないミドルウェ アを納品するとあなたの信用が目減りします。 • データモデルへの画像を含める事は可能であって も、それが妥当か検討しましょう。
  36. 36. バッドプラクティス からのリカバリ
  37. 37. バッドプラクティス 満載のアプリを リリースしてしまった。
  38. 38. もうお手上げ?
  39. 39. CoreData 様は バッドプラクティス満載の アプリにも救いの手を 差し伸べてくれます。
  40. 40. バッドプラクティス からの脱却 • データモデルをアップグレードして大きなバ イナリデータを外に追い出す。 • データモデルのアップグレードには、データ モデルマッピングを使う。 • バイナリデータを外に書き出すには手動アッ プグレードを用意する。
  41. 41. 新しい属性を追加するだけであれば、データマッ ピングファイルは必要ない。
  42. 42. データモデル内の属性名を変 更程度であればモデルマッピ ングソフトの作成だけで済む。
  43. 43. デモコード
  44. 44. https://github.com/ notoroid/ CoreDataImageMigrati onSample
  45. 45. 注意点 • データモデルの名前にアンダーバー(_) を使う とデータマッピングを読み込まなくなる • 誤ったデータモデルを追加した場合は、手動 でプロジェクトファイルを編集する必要が出 てくる
  46. 46. まとめ • iOS CoreData 徹底入門 が出たことCoreData が身近になりました。 • ステレオタイプにiOSアプリのデータを扱いた いのであれば、この機会に学んでみてはいか がでしょう?
  47. 47. http://irimasu.com Twitter: @notoroid 公式: @irimasu

×