Realm データベースについて
Realm は、電話、テーブル、またはアイテム内で直接実行されるモバイル データベースです。 このリポジトリには、iOS、macOS、IPvOS、watchOS の Realm Swift および Realm Objective-C のバージョンのソースコードが保持されています。
Realm を使用する理由
- 開発者直感: Realm のオブジェクト指向データモデルは簡単に学習できるため、ORM は必要なく、記述するコードが少なくなります。
- モバイル向け構築: Realm はフル機能、軽量、メモリ、ディスク容量、バックアップ容量を効率的に使用します。
- オフラインでの使用を可能にするために設計されています: Realm のローカルデータベースはディスク上にデータを保持するため、アプリはオンラインと同様にオフラインでも機能します。
オブジェクト指向: コードの効率化
Realm は、簡素化を念頭に置いてからモバイル開発者向けに構築されています。 慣用的なオブジェクト指向データモデルにより、数千のコードを節約できます。
// Define your models like regular Swift classes
class Dog: Object {
@Persisted var name: String
@Persisted var age: Int
}
class Person: Object {
@Persisted(primaryKey: true) var _id: String
@Persisted var name: String
@Persisted var age: Int
// Create relationships by pointing an Object field to another Class
@Persisted var dogs: List<Dog>
}
// Use them like regular Swift objects
let dog = Dog()
dog.name = "Rex"
dog.age = 1
print("name of dog: \(dog.name)")
// Get the default Realm
let realm = try! Realm()
// Persist your data easily with a write transaction
try! realm.write {
realm.add(dog)
}
ライブ オブジェクト: リアクティブ アプリの構築
Realm のライブ オブジェクトとは、どこでアップデートされたデータでも、どこでも自動的にアップデートされることを意味します。
// Open the default realm.
let realm = try! Realm()
var token: NotificationToken?
let dog = Dog()
dog.name = "Max"
// Create a dog in the realm.
try! realm.write {
realm.add(dog)
}
// Set up the listener & observe object notifications.
token = dog.observe { change in
switch change {
case .change(let properties):
for property in properties {
print("Property '\(property.name)' changed to '\(property.newValue!)'");
}
case .error(let error):
print("An error occurred: (error)")
case .deleted:
print("The object was deleted.")
}
}
// Update the dog's name to see the effect.
try! realm.write {
dog.name = "Wolfie"
}
SwiftUI
Realm は SwiftUI と直接統合され、ビューを更新するため、ユーザーは必要ありません。
struct ContactsView: View {
@ObservedResults(Person.self) var persons
var body: some View {
List {
ForEach(persons) { person in
Text(person.name)
}
.onMove(perform: $persons.move)
.onDelete(perform: $persons.remove)
}.navigationBarItems(trailing:
Button("Add") {
$persons.append(Person())
}
)
}
}
完全な暗号化
データは移動中と保管時に暗号化されるため、最も機密性の高いデータも安全に保たれます。
// Generate a random encryption key
var key = Data(count: 64)
_ = key.withUnsafeMutableBytes { (pointer: UnsafeMutableRawBufferPointer) in
guard let baseAddress = pointer.baseAddress else {
fatalError("Failed to obtain base address")
}
SecRandomCopyBytes(kSecRandomDefault, 64, baseAddress)
}
// Add the encryption key to the config and open the realm
let config = Realm.Configuration(encryptionKey: key)
let realm = try Realm(configuration: config)
// Use the Realm as normal
let dogs = realm.objects(Dog.self).filter("name contains 'Fido'")
スタートガイド
Swift パッケージ マネージャー、 CocoaPods、Chartage を介した、または動的な OCフレームワークのインポートによる Realm のインストールをサポートしています。
詳細については、 Docs内の 詳細な手順 を参照してください。
ドキュメンテーション
このドキュメントはmongodb.com/ja-jp/docs/atlas/device-sdks/sdk/swift/で確認できます。 API リファレンスはmongodb.com/ja-jp/docs/realm-sdks/swift/latest/にあります。
サポートを受けるには
- コードのサポートが必要な場合: Stack Overflow で
realm
タグを持つ以前の質問を検索するか、 新しい質問をする。 Stack Overflow の範囲が一般的ではない一般的なディスカッションについては、コミュニティ フォーラムを使用してください。 - 報告するバグはありますか。 Githubの課題 を開きます。 可能であれば、Realm のバージョン、完全なログ、Realm ファイル、問題を表示するプロジェクトを含めます。
- 機能リクエストをお持ちの場合 Githubの課題 を開きます。 機能によって実行される操作と、その機能が必要な理由を伝えてください。
Realm の構築
プレコンパイルされたバージョンを使用しない場合は、ソースから自分で Realm をビルドできます。
前提条件:
- Realm を構築するには Xcode 15.3以上が必要です。
- Realmドキュメントの構築には
必要な前提条件がすべて揃っている場合は、Realm をビルドするには次の単一コマンド: sh build.sh build
のみを使用します。 Realm を初めて構築するときにコア バイナリをダウンロードするには、インターネット接続が必要です。 これにより、 build/Release/
に Realm.xc フレームワークと RealmSwift.xc フレームワークが生成されます。
実行できるすべてのアクション( iOS /osx のビルド、 Docsの生成 、テストなど)を確認するには、sh build.sh help
を実行します。
貢献
詳しくは、 CONTRIBUTING.mdを参照してください。
行動規範
このプロジェクトは、 MongoDB の行動規範 に準拠しています。 参加することで、このコードをサポートすることが期待されます。 受け入れられない動作はCommunity-construct@mongodb.comに報告してください。
ライセンス
Realm Objective-C および Realm Swift は Apache 2.0ライセンスで公開されています。 Realm Core は Apache 2.0ライセンスでも公開されており、こちら から入手できます。
フィードバック
Realm を使用しており、それが満足のいくものであれば、考えを共有するために@realmを使用してアカウントを送信することを検討してください。
また、それが望ましくない場合は、改善点をぜひお知らせください。そうすれば、修正できます。