| 開発者 | アップル社 |
|---|---|
| 安定リリース | 3.2.0
|
| オペレーティング·システム | macOS、iOS、tvOS、watchOS |
| タイプ | システムユーティリティ |
| ライセンス | 独自 |
| Webサイト | Apple Developer コアデータ プログラミング ガイド |
Core Dataは、 macOSおよびiOSオペレーティングシステムでAppleが提供するオブジェクトグラフおよび永続化フレームワークです。Mac OS X 10.4 TigerおよびiOSでiPhone SDK 3.0とともに導入されました。 [1]リレーショナルエンティティ-属性モデルによって整理されたデータをXML、バイナリ、またはSQLiteストアにシリアル化できます。データは、エンティティとその関係を表す高レベルのオブジェクトを使用して操作できます。Core Dataはシリアル化されたバージョンを管理し、オブジェクトのライフサイクルとオブジェクトグラフ管理(永続化を含む)を提供します。Core DataはSQLiteと直接インターフェイスし、開発者を基礎となるSQLから切り離します。[2]
Cocoa Bindings がモデル - ビュー - コントローラ設計におけるコントローラの多くの役割を処理するのと同様に、Core Data はデータ モデルの多くの役割を処理します。その他のタスクの中でも、変更管理、ディスクへのシリアル化、メモリ フットプリントの最小化、データに対するクエリを 処理します。
使用法
Core Data は、エンティティとその関係、および特定の条件を満たすエンティティを取得するフェッチ要求の観点から表現される高レベルのデータ モデルを使用してデータを記述します。コードは、ストレージと取得の詳細を気にすることなく、純粋にオブジェクト レベルでこのデータを取得および操作できます。Interface Builderで使用可能なコントローラー オブジェクトは、これらのエンティティを直接取得および操作できます。Cocoa バインディングと組み合わせると、UI はバックグラウンド コードを必要とせずにデータ モデルの多くのコンポーネントを表示できます。
たとえば、開発者がvCard を処理するプログラムを作成するとします。これらを管理するために、作成者は vCard をオブジェクトに読み込み、それらを 1 つの大きな XML ファイルに格納するつもりです。Core Data を使用して、開発者はXcodeのデータ デザイナーからインターフェイス ビルダー ウィンドウにスキーマをドラッグし、スキーマの GUI を作成します。次に、標準のObjective-CまたはSwiftコードを記述して vCard ファイルを読み取り、そのデータを Core Data 管理エンティティに格納します。その時点から、作成者のコードは、基礎となる vCard ではなく、これらの Core Data オブジェクトを操作します。メニュー項目をコントローラー オブジェクトの適切なメソッドに接続すると、コントローラーはオブジェクト スタックを調べ、どのオブジェクトがダーティであるかを判断し、これらの変更で Core Data ドキュメント ファイルを書き換えます。
Save
Core Data はクラスの大きな階層に編成されていますが、相互作用が行われるのはクラスのごく一部に限られます。
出典: [3] [2] [4] [5]
保存形式
Core Dataは、オブジェクトをXML、バイナリ、またはSQLiteにシリアル化して保存できます。[2] Mac OS X 10.5 Leopardのリリースにより、開発者は独自のカスタムアトミックストアタイプを作成することもできます。各方法には、人間が読みやすい(XML)か、メモリ効率が良い(SQLite)かなど、長所と短所があります。
Core Data のこの部分は、かなり洗練されたクエリを記述できるという点で、オリジナルのEnterprise Objects Framework (EOF) システムに似ています。EOF とは異なり、基盤となるストアが SQL ベースではない可能性があるため、独自の SQL を記述することはできません。最近、ODBC 用の Core Data ストアが ODBC フレームワークで利用可能になりました。[6]
Core Data スキーマは標準化されています。Xcode Data Model ファイルがあれば、その形式のファイルを自由に読み書きできます。ただし、EOF とは異なり、Core Data は ODBC フレームワークを使用しない限り、現在マルチユーザーまたは同時アクセス用に設計されていません。[6]
スキーマの移行も簡単ではなく、ほとんどの場合コードが必要です。他の開発者がデータ モデルにアクセスしてそれに依存している場合、スキーマが変更されると、新しいデータ モデルに加えてバージョン変換コードを提供する必要がある場合があります。
歴史と起源
Core Dataの設計の多くは、以前のNeXT製品であるEnterprise Objects Framework (EOF)に負っている。[7]
EOF は、 Microsoft SQL ServerやOracleなどのハイエンド SQL データベース エンジン用のオブジェクト リレーショナル マッピングでした。EOF の目的は 2 つあります。1 つ目は、データベース エンジンに接続して実装の詳細を隠すこと、2 つ目は、リレーショナル形式からデータを読み取って、それを一連のオブジェクトに変換することです。開発者は通常、オブジェクトのみを操作します。これにより、データをオブジェクトにマッピングするための設定が多少必要になりますが、複雑なプログラムの開発が簡素化されます。EOF オブジェクト モデルは、結果として得られるプログラムがドキュメントのように機能するように意図的に設計されています。ユーザーは、データをメモリ内でローカルに編集し、1 回の保存コマンドですべての変更を書き出すことができます。
EOF には、その歴史を通じて、 NeXTSTEP / OpenStepでは利用できなかった便利なコードが数多く含まれていました。たとえば、EOF では、どのオブジェクトがダーティであるかを追跡して、後でシステムがそれらを書き出せるようにする機能が必要でした。これは、ドキュメントのようなシステムとしてだけでなく、無制限の Undo コマンド スタックの形式でも開発者に提供され、データに適用された各コマンドは、元に戻せるアクションとして表されました。多くの開発者は、この状態管理コードは EOF に分離するにはあまりにも便利すぎると不満を述べ、後にMac OS Xへの移行中にCocoa APIに移動されました。
当初、翻訳されなかったのは EOF 自体でした。EOF は主に、元々Objective-Cに基づいたアプリケーション サーバーである別の OpenStep 時代の製品であるWebObjectsとともに使用されていました。当時、Apple は WebObjects をJava プログラミング言語に移植するプロセスにあり、この変換の一環として、Cocoa から EOF を使用することがはるかに困難になりました。再び、サードパーティの開発者の間でかなりの苦情がありました。
重要な認識の 1 つは、EOF のオブジェクト状態管理システムはリレーショナル データベースとはまったく関係がないということです。開発者は同じコードを使用して、他のオブジェクトのグラフを管理することもできましたし、実際にそうしていました。この役割において、EOF の本当に便利な部分は、生データからオブジェクト セットを自動的に構築し、それを追跡する部分でした。この概念が Core Data の基礎を形成しています。
注記
- ^ Apple、「iPhone OS 向け Core Data チュートリアル」。
- ^ abc Apple、「Core Data プログラミング ガイド」。
- ^ Zarra、Core Data。
- ^ Stevenson、「コアデータクラスの概要」
- ^ Jurewitz、「コアデータの操作」
- ^ Github、「ODBC フレームワーク」より
- ^ Apple、「EOModeler ユーザーガイド」
参考文献
- Apple Inc. (2009 年 9 月 17 日)。「Core Data プログラミング ガイド」。https://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CoreData/cdProgrammingGuide.html から取得
- Apple Inc. (2009 年 9 月 9 日)。「iPhone OS 向け Core Data チュートリアル」。https://developer.apple.com/iphone/library/documentation/DataManagement/Conceptual/iPhoneCoreData01/Introduction/Introduction.html から取得
- Apple Inc. (2006)。「EOModeler ユーザー ガイド」。https://developer.apple.com/legacy/mac/library/documentation/WebObjects/UsingEOModeler/Introduction/Introduction.html#//apple_ref/doc/uid/TP30001018-CH201-TP1 から取得
- Jurewitz, M. & Apple Inc. (2010)。「iPhone 開発ビデオ: Core Data の操作」。https://developer.apple.com/videos/iphone/#video-advanced-coredata から取得
- Stevenson, S. (2005). 「コア データ クラスの概要」。http://cocoadevcentral.com/articles/000086.php から取得[盗用]
- Zarra, MS (2009)。Core Data Apple の Mac OS X でデータを永続化するための API。The Pragmatic Programmers。
- LaMarche, J.、Mark, D. (2009)。 『iPhone 3 開発のさらなる進展: iPhone SDK 3 への取り組み』Apress。
外部リンク
- Apple Inc. (2018) 「Core Data」。https://developer.apple.com/documentation/coredata から取得
- Apple Inc. (2009)。「Web オブジェクト チュートリアル」。https://developer.apple.com/legacy/mac/library/documentation/DeveloperTools/Conceptual/WOTutorial/Introduction/Introduction.html から取得
- CocoaDev. (nd). https://web.archive.org/web/20080801025517/http://www.cocoadev.com/ から取得
- GitHub。「ODBC フレームワーク」。https://github.com/mhakman/osx-cocoa-odbc
- mFluent LLC. 「コアデータ永続ファイルの表示」 https://github.com/yepher/CoreDataUtility
- Stevenson, S. (2005) 「コア データ アプリケーションの構築」 http://cocoadevcentral.com/articles/000085.php から取得[盗用]
