このプロジェクトについて

# Realmデータベースについて Realmは、スマートフォン、タブレット、ウェアラブル端末内で直接動作するモバイルデータベースです。このリポジトリには、iOS、macOS、tvOS、watchOS向けのRealm SwiftおよびRealm Objective-Cのソースコードが含まれています。 ## Realmを使う理由 * **開発者にとって直感的:** Realmのオブジェクト指向データモデルは学習が簡単で、ORMを必要とせず、より少ないコードで記述できます。 * **モバイル向けに設計:** Realmはフル機能を備えつつ軽量で、メモリ、ディスク容量、バッテリー寿命を効率的に使用します。 * **オフライン利用向けに設計:** Realmのローカルデータベースはデータをディスクに永続化するため、アプリはオンラインと同様にオフラインでも動作します。 ## オブジェクト指向: コードを合理化 Realmはモバイル開発者向けに、シンプルさを念頭に置いて構築されました。慣用的なオブジェクト指向データモデルにより、数千行のコードを節約できます。 ```swift // 通常のSwiftクラスのようにモデルを定義 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 // Objectフィールドを別のクラスに指すことでリレーションシップを作成 @Persisted var dogs: List<Dog> } // 通常のSwiftオブジェクトのように使用 let dog = Dog() dog.name = "Rex" dog.age = 1 print("name of dog: \(dog.name)") // デフォルトのRealmを取得 let realm = try! Realm() // 書き込みトランザクションで簡単にデータを永続化 try! realm.write { realm.add(dog) } ``` ## ライブオブジェクト: リアクティブアプリを構築 Realmのライブオブジェクトは、どこかで更新されたデータが自動的にすべての場所で更新されることを意味します。 ```swift // デフォルトのrealmを開く。 let realm = try! Realm() var token: NotificationToken? let dog = Dog() dog.name = "Max" // realmに犬を作成。 try! realm.write { realm.add(dog) } // リスナーを設定し、オブジェクト通知を監視。 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.") } } // 犬の名前を更新して効果を確認。 try! realm.write { dog.name = "Wolfie" } ``` ### SwiftUI RealmはSwiftUIと直接統合され、ビューを自動的に更新するため、手動での更新は不要です。 ```swift 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()) } ) } } ``` ## 完全暗号化 データは転送中および保存時に暗号化でき、最も機密性の高いデータでも安全に保たれます。 ```swift // ランダムな暗号化キーを生成 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) } // 設定に暗号化キーを追加し、realmを開く let config = Realm.Configuration(encryptionKey: key) let realm = try Realm(configuration: config) // 通常通りRealmを使用 let dogs = realm.objects(Dog.self).filter("name contains 'Fido'") ``` ## はじめに Realmは、Swift Package Manager、CocoaPods、Carthage、または動的XCFrameworkのインポートによりインストールできます。 詳細については、[クイックスタート](docs/guides/quick-start.md)を参照してください。 ## ドキュメント ドキュメントは[docs/](docs/README.md)ディレクトリにあります。 APIリファレンスは、このリポジトリのルートから`sh build.sh docs`を実行することで、[jazzy](https://github.com/realm/jazzy/)を使用してソースから生成できます。 ## サポート - **コードについてのヘルプが必要ですか?**: Stack Overflowで[`realm`タグ](https://stackoverflow.com/questions/tagged/realm?sort=newest)の過去の質問を検索するか、[新しい質問](https://stackoverflow.com/questions/ask?tags=realm)を投稿してください。Stack Overflowには広すぎる一般的な議論については、[コミュニティフォーラム](https://developer.mongodb.com/community/forums/tags/c/realm-sdks/58/swift/)を使用してください。 - **バグを報告しますか?** [GitHub issueを開いてください](https://github.com/realm/realm-swift/issues/new)。可能であれば、Realmのバージョン、完全なログ、Realmファイル、問題を示すプロジェクトを含めてください。 - **機能リクエストがありますか?** [GitHub issueを開いてください](https://github.com/realm/realm-swift/issues/new)。機能が何をすべきか、なぜその機能が必要なのかをお知らせください。 ## Realmのビルド コンパイル済みバージョンを使用したくない場合は、ソースからRealmを自分でビルドできます。 前提条件: * RealmのビルドにはXcode 15.3以降が必要です。 * Realmドキュメントのビルドには[jazzy](https://github.com/realm/jazzy)が必要です。 必要な前提条件がすべて揃ったら、Realmのビルドは`sh build.sh build`の単一コマンドだけで完了します。初回ビルド時にコアバイナリをダウンロードするため、インターネット接続が必要です。これにより、`build/Release/`にRealm.xcframeworkとRealmSwift.xcframeworkが生成されます。 実行可能なすべてのアクション(ios/osxのビルド、ドキュメント生成、テストなど)を確認するには、`sh build.sh help`を実行してください。 ## 貢献 詳細については、[CONTRIBUTING.md](CONTRIBUTING.md)を参照してください。 ## 行動規範 このプロジェクトは[MongoDB行動規範](https://www.mongodb.com/community-code-of-conduct)に準拠しています。参加することにより、この規範を守ることが期待されます。受け入れがたい行動は[community-conduct@mongodb.com](mailto:community-conduct@mongodb.com)に報告してください。 ## ライセンス Realm Objective-CおよびRealm SwiftはApache 2.0ライセンスのもとで公開されています。Realm CoreもApache 2.0ライセンスのもとで公開されており、[こちら](https://github.com/realm/realm-core)で入手できます。 ## フィードバック **_Realmを使用して満足している場合は、[@realm](https://twitter.com/realm)に言及したツイートを送信して、あなたの考えを共有することを検討してください!_** **_また、気に入らない場合は、改善してほしい点をお知らせください。修正します!_**