質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Core Data

Core DataはAppleのOS X and iOSのためのオブジェクトモデリングと持続性を持ったフレームワークです。Xcodeはエンティティー、属性そして関係性を特定するためのオブジェクトモデルの編集機能を提供します。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

7350閲覧

日記アプリ、Core Dataを使うべきか、Realmを使うべきか

funkyfrea

総合スコア86

Core Data

Core DataはAppleのOS X and iOSのためのオブジェクトモデリングと持続性を持ったフレームワークです。Xcodeはエンティティー、属性そして関係性を特定するためのオブジェクトモデルの編集機能を提供します。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2015/08/02 00:13

編集2015/08/02 04:04

自分は日記のようなiosアプリを作ろうとしている初心者です。

そこでデータベースを実装する必要があるので選択肢を調べて見たところ、CoreDataとRealmが候補にあがりました。

現状では、とりあえずRealmを使ってみようと思ったのですが、エラーが出てうまく使えません。
仕方ないので、CoreDataにしようかと調べてみたところ、使い方が難しいとか、とっつきづらいとの情報がありました。また、Realmのほうが簡単で、スピードも速いとの文言も目にし、どちらを勉強していくべきか迷っています。

そんな自分にIOSアプリのデータベースの使い分けについて、アドバイスをお願いします。
__________________________________________
Realmのエラーについて

BOOK.Swift

lang

1import Foundation 2 3import Realm 4 5class Book : RLMObject{ 6 dynamic var isbn = "" 7 dynamic var name = "" 8 dynamic var price = 0 9 10 11 12} 13 14

ViewController.swift

lang

1 override func viewDidLoad() { 2 super.viewDidLoad() 3 // Do any additional setup after loading the view, typically from a nib. 4 5 saveData() 6 7 8 9 10 } 11 12 override func didReceiveMemoryWarning() { 13 super.didReceiveMemoryWarning() 14 // Dispose of any resources that can be recreated. 15 } 16 17 func saveData(){ 18 19 let realm = RLMRealm.defaultRealm() 20 21 let book = Book() 22 book.name = "本の本" 23 24 realm.beginWriteTransaction() 25 realm.addObject(book) 26 realm.commitWriteTransaction() 27 28 for realmBook in Book.allObjects(){ 29 println("book isbn:\((realmBook as! Book).name)") 30 println(RLMRealm.defaultRealmPath()) 31 println(realm.path) 32 33 } 34 } 35 36 37} 38 39

上記のようにやってみたところ、何回かはうまくいったのですが、何回目からか、Threed1EXC_Bad_Accessと出て落ちるようになってしまいました。

なにかわかることがありましたら、アドバイスをお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Stripe

2015/08/02 02:57

Realmを使っていてエラーが出た、ということなら、まずはそのエラーについて質問するべきでは?もしも、今度はCoreDataを使ってエラーが出たらどうするつもりですか?
guest

回答2

0

ベストアンサー

あまり詳しくないのでご参考程度に。

結論から先に書くと、自分なら Realm を使用します。が、必ずしもオススメしている訳ではありません。

まず、DBの選択肢という観点で考えると、CoreData 自体はDBではなく CocoaFrameworkに搭載されている O/Rマッパー なので、DB自体としての比較なら SQLite vs. Realm ということになると思います。

DBに限らず、複数の選択肢がある場合、何を優先するかで結果が違ってきますが、たとえば以下のような観点で検討することになると思います。
①速度
②(トランザクション等の)使いやすさ
③安定性(バグ、仕様変更など)
④情報の入手性(実装例やTipsなど)

①②については、当然、後発(Realm)の方が有利になりますし、逆に③④については先発(SQLite)の方が有利になります。

大規模なアプリを開発するのであれば慎重に選択する必要があると思いますが、(初心者とのことでしたので)アプリを実際に作成しながら学習し、いずれサービスを公開するというようなアプローチならば、率直に言ってどちらを選んでも構わないと思います。
その上で、情報の入手性 を優先させたければ SQLite先進性 のあるものにチャレンジしたければ Realm を選択すれば良いのではないでしょうか?
(自分の場合は、たまたま後者だっただけ)

確かに、Realm については 高速性 が話題になっていて下記のような情報もあります(ただし Android の例です)が
RealmとSQLiteを速度比較してみました
テスト用アプリの実装方法がそれぞれのDBに合っていたか?も関係してくるので、その数値を自分のアプリにそのまま単純に当てはめて考えることはできません。あくまでも参考レベルです。

また、自分が作成しようとしているアプリでは、本当にそれ程の速度が必要なのか?も見落としがちな観点です。
SQLite だって、軽量で結構速いです。
パフォーマンス比較 Cassandra、Mongodb、SQLite、H2、MySQL、Postgres

一方、情報の入手性については、ネットでざっと検索してみた限りでは、まだ Realm を使ってみました のような記事が多くヒットする段階ですし、開発が盛んということは仕様の変更が多くて入手した情報がすぐに陳腐化してしまうという問題もあります。
なので、一次情報源から最新の情報を自力で取得できるかどうかが重要になってきます。
幸い、日本語でも良い情報源がありますのでご参考になさってください。
Realm Swift 0.93.1

#バージョンがまだ1未満だということは、まだまだ仕様変更がありそうということを示唆しています。。

O/Rマッパー CoreData の使い勝手についても、同様の観点で別途検討する必要があると思います。

それで、事前に「決定」しようと思うと結構大変だと思いますが、世間の評判を気にし過ぎず、現時点でより「興味」の湧く方を(こうした質問サイトで質問しながらでも良いので)まずは使ってみたら良いと思います。
最低限、ある程度動くレベルまで作りこんで見て、実装上あまり上手く行かない部分が見つかったら、改めて「選択」し直すというアプローチもあるかと思います。
実装上、一番問題になるのは ②使いやすさ の部分ですが、これってある程度、実際に使い込んでみないと分からないので。

投稿2015/08/02 02:22

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

funkyfrea

2015/08/02 03:09

すごく丁寧に回答していただきありがとうございます。 アドバイスを受けて、とりあえずRealmで実装を頑張ってみて、行き詰まったら違う方法を検討するという形で進めていこうと思います。 いろいろと質問させていただきたいので、また回答していただければと思います。よろしくお願いします。
guest

0

CoreDataとRealmの使い分けのポイントとしてAndroidに移植する可能性があるかどうかという点もあります。
RealmはAndroidでも使えるのでAndroid版を将来考えているならRealmを使うのが良いと思います:-)

投稿2015/08/02 16:25

jollyjoester

総合スコア1585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

funkyfrea

2015/08/03 10:28

将来的にアンドロイド版も考えているので、やはりRealmを使いたいと思います。 とても参考になりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問