SlideShare uma empresa Scribd logo
1 de 49
Baixar para ler offline
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-1000要素ぐらいが
限界)
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

Mais conteúdo relacionado

Semelhante a Core Data バッドプラクティス

20180217 hackertackle geode
20180217 hackertackle geode20180217 hackertackle geode
20180217 hackertackle geodeMasaki Yamakawa
 
Microsoft の深層学習への取り組み
Microsoft の深層学習への取り組みMicrosoft の深層学習への取り組み
Microsoft の深層学習への取り組みHirono Jumpei
 
.NET 6の期待の新機能とアップデート
.NET 6の期待の新機能とアップデート.NET 6の期待の新機能とアップデート
.NET 6の期待の新機能とアップデートTomomitsuKusaba
 
The seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurugThe seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurugSAKURUG co.
 
データをどこに溜めよう?ローカル?クラウド?どのデータベース?
データをどこに溜めよう?ローカル?クラウド?どのデータベース?データをどこに溜めよう?ローカル?クラウド?どのデータベース?
データをどこに溜めよう?ローカル?クラウド?どのデータベース?- Core Concept Technologies
 
コンテナ環境でJavaイメージを小さくする方法!
コンテナ環境でJavaイメージを小さくする方法!コンテナ環境でJavaイメージを小さくする方法!
コンテナ環境でJavaイメージを小さくする方法!オラクルエンジニア通信
 
【解説】データ指向アプリケーションデザイン 12章 データシステムの未来
【解説】データ指向アプリケーションデザイン 12章 データシステムの未来【解説】データ指向アプリケーションデザイン 12章 データシステムの未来
【解説】データ指向アプリケーションデザイン 12章 データシステムの未来Shinya Mori (@mosuke5)
 
(続) Effective SQLite for Android
(続) Effective SQLite for Android(続) Effective SQLite for Android
(続) Effective SQLite for AndroidShinobu Okano
 
[D33] そのデータベース 5年後大丈夫ですか by Hiromu Goto
[D33] そのデータベース 5年後大丈夫ですか by Hiromu Goto[D33] そのデータベース 5年後大丈夫ですか by Hiromu Goto
[D33] そのデータベース 5年後大丈夫ですか by Hiromu GotoInsight Technology, Inc.
 
db tech showcase2019 オープニングセッション @ 石川 雅也
db tech showcase2019 オープニングセッション @ 石川 雅也db tech showcase2019 オープニングセッション @ 石川 雅也
db tech showcase2019 オープニングセッション @ 石川 雅也Insight Technology, Inc.
 
MapReduceを置き換えるSpark 〜HadoopとSparkの統合〜 #cwt2015
MapReduceを置き換えるSpark 〜HadoopとSparkの統合〜 #cwt2015MapReduceを置き換えるSpark 〜HadoopとSparkの統合〜 #cwt2015
MapReduceを置き換えるSpark 〜HadoopとSparkの統合〜 #cwt2015Cloudera Japan
 
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイントKentaro Matsui
 
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version - ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version - Tetsutaro Watanabe
 
G-Tech2015 Hadoop/Sparkを中核としたビッグデータ基盤_20151006
G-Tech2015 Hadoop/Sparkを中核としたビッグデータ基盤_20151006G-Tech2015 Hadoop/Sparkを中核としたビッグデータ基盤_20151006
G-Tech2015 Hadoop/Sparkを中核としたビッグデータ基盤_20151006Cloudera Japan
 
Microsoft AI Solution Update / DLL community Update
Microsoft AI Solution Update / DLL community UpdateMicrosoft AI Solution Update / DLL community Update
Microsoft AI Solution Update / DLL community UpdateHirono Jumpei
 
IoT World Conference 2017 - Microsoft AI Platform
IoT World Conference 2017 - Microsoft AI PlatformIoT World Conference 2017 - Microsoft AI Platform
IoT World Conference 2017 - Microsoft AI PlatformDaiyu Hatakeyama
 
20140713 ハッカソン基調講演
20140713 ハッカソン基調講演20140713 ハッカソン基調講演
20140713 ハッカソン基調講演Code_for_Sakai
 
WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料Recruit Technologies
 

Semelhante a Core Data バッドプラクティス (20)

20180217 hackertackle geode
20180217 hackertackle geode20180217 hackertackle geode
20180217 hackertackle geode
 
Microsoft の深層学習への取り組み
Microsoft の深層学習への取り組みMicrosoft の深層学習への取り組み
Microsoft の深層学習への取り組み
 
.NET 6の期待の新機能とアップデート
.NET 6の期待の新機能とアップデート.NET 6の期待の新機能とアップデート
.NET 6の期待の新機能とアップデート
 
The seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurugThe seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurug
 
データをどこに溜めよう?ローカル?クラウド?どのデータベース?
データをどこに溜めよう?ローカル?クラウド?どのデータベース?データをどこに溜めよう?ローカル?クラウド?どのデータベース?
データをどこに溜めよう?ローカル?クラウド?どのデータベース?
 
コンテナ環境でJavaイメージを小さくする方法!
コンテナ環境でJavaイメージを小さくする方法!コンテナ環境でJavaイメージを小さくする方法!
コンテナ環境でJavaイメージを小さくする方法!
 
【解説】データ指向アプリケーションデザイン 12章 データシステムの未来
【解説】データ指向アプリケーションデザイン 12章 データシステムの未来【解説】データ指向アプリケーションデザイン 12章 データシステムの未来
【解説】データ指向アプリケーションデザイン 12章 データシステムの未来
 
(続) Effective SQLite for Android
(続) Effective SQLite for Android(続) Effective SQLite for Android
(続) Effective SQLite for Android
 
[D33] そのデータベース 5年後大丈夫ですか by Hiromu Goto
[D33] そのデータベース 5年後大丈夫ですか by Hiromu Goto[D33] そのデータベース 5年後大丈夫ですか by Hiromu Goto
[D33] そのデータベース 5年後大丈夫ですか by Hiromu Goto
 
Microsoft AI Platform
Microsoft AI PlatformMicrosoft AI Platform
Microsoft AI Platform
 
db tech showcase2019 オープニングセッション @ 石川 雅也
db tech showcase2019 オープニングセッション @ 石川 雅也db tech showcase2019 オープニングセッション @ 石川 雅也
db tech showcase2019 オープニングセッション @ 石川 雅也
 
MapReduceを置き換えるSpark 〜HadoopとSparkの統合〜 #cwt2015
MapReduceを置き換えるSpark 〜HadoopとSparkの統合〜 #cwt2015MapReduceを置き換えるSpark 〜HadoopとSparkの統合〜 #cwt2015
MapReduceを置き換えるSpark 〜HadoopとSparkの統合〜 #cwt2015
 
Oracle設計
Oracle設計Oracle設計
Oracle設計
 
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント
 
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version - ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
 
G-Tech2015 Hadoop/Sparkを中核としたビッグデータ基盤_20151006
G-Tech2015 Hadoop/Sparkを中核としたビッグデータ基盤_20151006G-Tech2015 Hadoop/Sparkを中核としたビッグデータ基盤_20151006
G-Tech2015 Hadoop/Sparkを中核としたビッグデータ基盤_20151006
 
Microsoft AI Solution Update / DLL community Update
Microsoft AI Solution Update / DLL community UpdateMicrosoft AI Solution Update / DLL community Update
Microsoft AI Solution Update / DLL community Update
 
IoT World Conference 2017 - Microsoft AI Platform
IoT World Conference 2017 - Microsoft AI PlatformIoT World Conference 2017 - Microsoft AI Platform
IoT World Conference 2017 - Microsoft AI Platform
 
20140713 ハッカソン基調講演
20140713 ハッカソン基調講演20140713 ハッカソン基調講演
20140713 ハッカソン基調講演
 
WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料
 

Mais de Kaname Noto

SwiftUIのライブコーディングするとxcodeが◯回落ちる
SwiftUIのライブコーディングするとxcodeが◯回落ちるSwiftUIのライブコーディングするとxcodeが◯回落ちる
SwiftUIのライブコーディングするとxcodeが◯回落ちるKaname Noto
 
iOS13 SDK による 全機能置き換え Part1
iOS13 SDK による 全機能置き換え Part1iOS13 SDK による 全機能置き換え Part1
iOS13 SDK による 全機能置き換え Part1Kaname Noto
 
Photos vs Assets Library - いまさら始めるPhotos.framework
Photos vs Assets Library - いまさら始めるPhotos.frameworkPhotos vs Assets Library - いまさら始めるPhotos.framework
Photos vs Assets Library - いまさら始めるPhotos.frameworkKaname Noto
 
明日のためのBaaS - BaaS for tomorrow
明日のためのBaaS - BaaS for tomorrow明日のためのBaaS - BaaS for tomorrow
明日のためのBaaS - BaaS for tomorrowKaname Noto
 
iOS グラフィックス Tips
iOS グラフィックス TipsiOS グラフィックス Tips
iOS グラフィックス TipsKaname Noto
 

Mais de Kaname Noto (6)

SwiftUIのライブコーディングするとxcodeが◯回落ちる
SwiftUIのライブコーディングするとxcodeが◯回落ちるSwiftUIのライブコーディングするとxcodeが◯回落ちる
SwiftUIのライブコーディングするとxcodeが◯回落ちる
 
iOS13 SDK による 全機能置き換え Part1
iOS13 SDK による 全機能置き換え Part1iOS13 SDK による 全機能置き換え Part1
iOS13 SDK による 全機能置き換え Part1
 
Photos vs Assets Library - いまさら始めるPhotos.framework
Photos vs Assets Library - いまさら始めるPhotos.frameworkPhotos vs Assets Library - いまさら始めるPhotos.framework
Photos vs Assets Library - いまさら始めるPhotos.framework
 
Firebase 概要
Firebase 概要Firebase 概要
Firebase 概要
 
明日のためのBaaS - BaaS for tomorrow
明日のためのBaaS - BaaS for tomorrow明日のためのBaaS - BaaS for tomorrow
明日のためのBaaS - BaaS for tomorrow
 
iOS グラフィックス Tips
iOS グラフィックス TipsiOS グラフィックス Tips
iOS グラフィックス Tips
 

Último

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 

Último (7)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

Core Data バッドプラクティス