Realm Database

Realm Database は 10 万人以上の開発者と 20 億人を超えるユーザーに利用されています。
高速で使いやすく、オープンソース ソフトウェアで、SQLite や Core Data の代わりに無料で利用できます。


Realm Database を無料ダウンロード

Realm Java Realm Object-C Realm JavaScript Realm Swift Realm .NET

データの保存はとてもシンプルで、高速に検索できます。開発時間を何週間も短縮できます。

Realm Database は、SQLite や Core Data の代替となるテクノロジーです。ゼロコピーを実現した設計により、Realm Database は他の OR マッパーや SQLite よりも高速に動作します。使い方はとても簡単で、ほんの数分で理解できます。

リアクティブなモバイルアプリ

モバイル向けにビルドされたデータベースの利点

 

オフラインファースト オフラインファースト機能

アプリがオフラインの場合でも、オンライン時と同様の動作を実現します。

クロスプラットフォーム クロスプラットフォーム対応

あらゆる主要なプラットフォームすべてにおいて、同じデータベースを使用できます。

高速な検索 高速なクエリ

複雑なクエリも、ナノ秒単位で結果を得ることができます。さらに、データは常に自動的に最新の状態に更新されます。

暗号化 暗号化

透過的に行われる暗号化と復号化により、データを保護します。

スレッドセーフ スレッドセーフ

同じデータに対して、複数のスレッドから同時にアクセスしてもクラッシュすることはありません。

リアクティブアーキテクチャ リアクティブなアーキテクチャ

Realm と UI コンポーネントを接続して、データの更新に応じて自動的に画面を更新できます。

ドキュメント


コードを簡素化

RealmObject をサブクラス化してスキーマを定義します。軽量なトランザクションを用いてオブジェクトを保存し、流れるようなインターフェースで検索できます。非常に簡単にデータを扱うことができます。

public class Dog extends RealmObject {
  public String name;
  public int age;
}

Dog dog = new Dog();
dog.name = "Rex";
dog.age = 1;

Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
realm.copyToRealm(dog);
realm.commitTransaction();

RealmResults<Dog> pups = realm.where(Dog.class)
                               .lessThan("age", 2)
                               .findAll();

 

マルチスレッド対応

新しいスレッドを利用する場合、Realm に新しい参照を追加します。各スレッドは一貫性のあるデータのビューを持つため、データが不整合な状態になることはありません。

public void onActivityCreated(Bundle savedInstanceState) {
  realm = Realm.getDefaultInstance();
  customers = realm.where(Customer.class).findAllAsync();
  changeListener = new RealmChangeListener() {
    @Override
    public void onChange(RealmResults<Customer> results) {
      listAdapter.notifyDataSetChanged(); // Update the UI
    }
  };
  customers.addChangeListener(changeListener);
}

 

暗号化

AES-256 で暗号化して、ユーザー データを安全に保持します。世界中の金融システムなどにおいても十分は安全性を確保できます。

// Generate a random encryption key
byte[] key = new byte[64];
new SecureRandom().nextBytes(key);

// Open the encrypted Realm file
RealmConfiguration realmConfiguration = new RealmConfiguration.Builder()
        .encryptionKey(key)
        .build();

// Use the Realm as normal
Realm realm = Realm.getInstance(config);
RealmResults<Dog> results = realm.where(Dog.class).contains("name", "Fido").findAll();

 

ライブ オブジェクトでリアクティブなアプリを開発

Realm のオブジェクトは、常に最新のデータを保持します。更新に関する通知を受けて、UI を更新します。アプリが古いデータを表示することはありません。

Realm realm = Realm.getDefaultInstance();

// Query in the background
RealmResults<Dog> results = realm.where(Dog.class)
  .greaterThan("age", 5)
  .findAllAsync();

// Use ChangeListeners to be notified about updates
results.addChangeListener(new RealmChangeListener<RealmResults<Dog>() {
  @Override
  public void onChange(RealmResults<Dog> results) {
    // Update UI
  }
});

// Or RxJava
Observable<RealmResults<Dog>> obs = results.asObservable();

 

シームレスにデータを同期

Realm Platform の拡張機能により、Realm Database は、Realm Platform と完璧に連携します。Realm Object Server の URL を指定するだけで、その他のすべてに変更はありません。データを保存すると自動的に同期されます。

Realm JavaRealm Objective‑CRealm SwiftRealm JavaScript、および Realm Xamarin で利用できます。

// Authenticating the User
User user = User.login(Credentials.google("google token"),
                       "http://realm.example.com:9080/auth");
// Opening a remote Realm
String realmURL = "realm://realm.example.com:9080/~/userRealm";
SyncConfiguration config = new SyncConfiguration.Builder(user,
                                                         realmURL).build();
Realm realm = Realm.getInstance(config);
// Any changes made to this Realm will be synced across all devices!

コードを簡素化

RealmObject をサブクラス化してスキーマを定義します。軽量なトランザクションを用いてオブジェクトを保存し、流れるようなインターフェースで検索できます。非常に簡単にデータを扱うことができます。

Dog *dog = [Dog new];
dog.name = @"Rex";
dog.age = 1;

RLMRealm *realm = [RLMRealm defaultRealm];
[realm transactionWithBlock:^{
  [realm addObject:dog];
}];

RLMResults<Dog *> *allDogs = [Dog allObjects];
RLMResults<Dog *> *pups = [allDogs objectsWhere:@"age < 2"];

 

マルチスレッド対応

新しいスレッドを利用する場合、Realm に新しい参照を追加します。各スレッドは一貫性のあるデータのビューを持つため、データが不整合な状態になることはありません。

// Query and update the result in another thread
dispatch_async(dispatch_queue_create("background", 0), ^{
  Dog *theDog = [[Dog objectsWhere:@"age == 1"] firstObject];
  RLMRealm *realm = [RLMRealm defaultRealm];
  [realm beginWriteTransaction];
  theDog.age = 3;
  [realm commitWriteTransaction];
});

 

暗号化

AES-256 で暗号化して、ユーザー データを安全に保持します。世界中の金融システムなどにおいても十分は安全性を確保できます。

// Generate a random encryption key
NSMutableData *key = [NSMutableData dataWithLength:64];
(void)SecRandomCopyBytes(kSecRandomDefault, key.length, (uint8_t *)key.mutableBytes);

// Open the encrypted Realm file
RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
config.encryptionKey = key;
RLMRealm *realm = [RLMRealm realmWithConfiguration:config error:nil];
// Use the Realm as normal
RLMResults<Dog *> *dogs = [Dog objectsInRealm:realm where:@"name contains 'Fido'"];

 

ライブ オブジェクトでリアクティブなアプリを開発

Realm のオブジェクトは、常に最新のデータを保持します。更新に関する通知を受けて、UI を更新します。アプリが古いデータを表示することはありません。

self.notificationToken = [[Dog objectsWhere:@"age > 5"]
                            addNotificationBlock:^(RLMResults<Dog *> *results,
                                                   RLMCollectionChange *change,
                                                   NSError *error) {
  if (error) {
    // handle error
    return;
  } else if (!changes) {
    [self.tableView reloadData];
    return;
  }

  // Update table view to animate deletions, insertions and modifications
  [tableView beginUpdates];
  [tableView deleteRowsAtIndexPaths:[changes deletionsInSection:0]
    withRowAnimation:UITableViewRowAnimationAutomatic];
  [tableView insertRowsAtIndexPaths:[changes insertionsInSection:0]
    withRowAnimation:UITableViewRowAnimationAutomatic];
  [tableView reloadRowsAtIndexPaths:[changes modificationsInSection:0]
    withRowAnimation:UITableViewRowAnimationAutomatic];
  [tableView endUpdates];
}];

 

シームレスにデータを同期

Realm Platform の拡張機能により、Realm Database は、Realm Platform と完璧に連携します。Realm Object Server の URL を指定するだけで、その他のすべてに変更はありません。データを保存すると自動的に同期されます。

Realm JavaRealm Objective‑CRealm SwiftRealm JavaScript、および Realm Xamarin で利用できます。

// Authenticating the User
[RLMSyncUser logInWithCredentials:[RLMSyncCredentials credentialsWithGoogleToken:@"google token"]
                    authServerURL:[NSURL URLWithString:@"http://realm.example.com:9080"]
                     onCompletion:^(RLMSyncUser *user, NSError *error) {
  if (user) {
    // Opening a remote Realm
    NSURL *realmURL = [NSURL URLWithString:@"realm://realm.example.com:9080/~/userRealm"];
    RLMRealmConfiguration *config = [[RLMRealmConfiguration alloc] init];
    config.syncConfiguration = [[RLMSyncConfiguration alloc] initWithUser:user realmURL:realmURL];
    RLMRealm *realm = [RLMRealm realmWithConfiguration:config error:nil];
    // Any changes made to this Realm will be synced across all devices!
  } else if (error) {
    // handle error
  }
}];

コードを簡素化

RealmObject をサブクラス化してスキーマを定義します。軽量なトランザクションを用いてオブジェクトを保存し、流れるようなインターフェースで検索できます。非常に簡単にデータを扱うことができます。

class Dog {}

Dog.schema = {
  name: 'Dog',
  properties: {
    name: 'string',
    age: 'int',
  }
};

let realm = new Realm({ schema: [Dog] });
realm.write(() => {
  realm.create('Dog', {name: 'Rex', age: 1});
});

let pups = realm.objects('Dog').filtered('age < 2');

 

マルチスレッド対応

新しいスレッドを利用する場合、Realm に新しい参照を追加します。各スレッドは一貫性のあるデータのビューを持つため、データが不整合な状態になることはありません。

// Query and update the result in another thread
dispatch_async(dispatch_queue_create("background", 0), ^{
  Dog *theDog = [[Dog objectsWhere:@"age == 1"] firstObject];
  RLMRealm *realm = [RLMRealm defaultRealm];
  [realm beginWriteTransaction];
  theDog.age = 3;
  [realm commitWriteTransaction];
});

 

暗号化

AES-256 で暗号化して、ユーザー データを安全に保持します。世界中の金融システムなどにおいても十分は安全性を確保できます。

let key = new Int8Array(64);  // pupulate with a secure key

let realm = new Realm({ schema: [Dog], encryptionKey: key });

let dogs = realm.objects('Dog').filtered('name CONTAINS "Fido"');

 

ライブ オブジェクトでリアクティブなアプリを開発

Realm のオブジェクトは、常に最新のデータを保持します。更新に関する通知を受けて、UI を更新します。アプリが古いデータを表示することはありません。

let realm = new Realm({ schema: [Person] });
realm.addListener((sender, name) => {
  if (name === 'change') {
    this.setState({ source: sender.objects('Dog') });
  }
});

 

シームレスにデータを同期

Realm Platform の拡張機能により、Realm Database は、Realm Platform と完璧に連携します。Realm Object Server の URL を指定するだけで、その他のすべてに変更はありません。データを保存すると自動的に同期されます。

Realm JavaRealm Objective‑CRealm SwiftRealm JavaScript、および Realm Xamarin で利用できます。

// Authenticating the User
Realm.Sync.User.registerWithProvider('http://realm.example.co:9080', 'google', googleAccessToken, (error, user) => {
  if (!error) {
    // Opening a remote Realm
    var realm = new Realm({
      sync: {
        user: user,
        url: 'realm://realm.example.co:9080/~/userRealm',
      }
    });
    // Any changes made to this Realm will be synced across all devices!
  }
})

コードを簡素化

RealmObject をサブクラス化してスキーマを定義します。軽量なトランザクションを用いてオブジェクトを保存し、流れるようなインターフェースで検索できます。非常に簡単にデータを扱うことができます。

class Dog: Object {
  dynamic var name = ""
  dynamic var age = 0
}

let dog = Dog()
dog.name = "Rex"
dog.age = 1

let realm = try! Realm()
try! realm.write {
  realm.add(dog)
}

let pups = realm.objects(Dog.self).filter("age < 2")

 

マルチスレッド対応

新しいスレッドを利用する場合、Realm に新しい参照を追加します。各スレッドは一貫性のあるデータのビューを持つため、データが不整合な状態になることはありません。

// Query and update from any thread
DispatchQueue(label: "background").async {
  let realm = try! Realm()
  let theDog = realm.objects(Dog.self).filter("age == 1").first
  try! realm.write {
    theDog!.age = 3
  }
}

 

暗号化

AES-256 で暗号化して、ユーザー データを安全に保持します。世界中の金融システムなどにおいても十分は安全性を確保できます。

// Generate a random encryption key
var key = Data(count: 64)
_ = key.withUnsafeMutableBytes { bytes in
  SecRandomCopyBytes(kSecRandomDefault, 64, bytes)
}

// Open the encrypted Realm file
let realm = try! Realm(configuration: Realm.Configuration(encryptionKey: key))
// Use the Realm as normal
let dogs = realm.objects(Dog.self).filter("name contains 'Fido'")

 

ライブ オブジェクトでリアクティブなアプリを開発

Realm のオブジェクトは、常に最新のデータを保持します。更新に関する通知を受けて、UI を更新します。アプリが古いデータを表示することはありません。

let realm = try! Realm()
notificationToken = realm.objects(Dog.self).filter("age > 5").addNotificationBlock { changes in
  switch changes {
  case .initial:
    tableView.reloadData()
    break
  case .update(_, let deletions, let insertions, let modifications):
    // Update table view to animate deletions, insertions and modifications
    break
  case .error(let error):
    // handle error
    break
  }
}

 

シームレスにデータを同期

Realm Platform の拡張機能により、Realm Database は、Realm Platform と完璧に連携します。Realm Object Server の URL を指定するだけで、その他のすべてに変更はありません。データを保存すると自動的に同期されます。

Realm JavaRealm Objective‑CRealm SwiftRealm JavaScript、および Realm Xamarin で利用できます。

// Authenticating the User
SyncUser.logIn(with: .google(token: "google token"),
               server: URL(string: "http://realm.example.com:9080")!) { user, error in
  if let user = user {
    // Opening a remote Realm
    let realmURL = URL(string: "realm://realm.example.com:9080/~/userRealm")!
    let config = Realm.Configuration(syncConfiguration: SyncConfiguration(user: user, realmURL: realmURL))
    let realm = try! Realm(configuration: config)
    // Any changes made to this Realm will be synced across all devices!
  } else if let error = error {
    // handle error
  }
}

コードを簡素化

RealmObject をサブクラス化してスキーマを定義します。軽量なトランザクションを用いてオブジェクトを保存し、流れるようなインターフェースで検索できます。非常に簡単にデータを扱うことができます。

public class Dog : RealmObject 
{
  public string Name { get; set; }
  public int Age { get; set; }
}

var realm = Realm.GetInstance();
realm.Write(() => 
{
  realm.Add(new Dog
  {
    Name = "Rex",
    Age = 1
  });
});

var pups = realm.All<Dog>().Where(d => d.Age < 2);

 

マルチスレッド対応

新しいスレッドを利用する場合、Realm に新しい参照を追加します。各スレッドは一貫性のあるデータのビューを持つため、データが不整合な状態になることはありません。

// Query and update from any thread
Task.Run(() =>
{
  var realm = Realm.GetInstance();
  var theDog = realm.All<Dog>().First(d => d.Age == 1);
  realm.Write(() => theDog.Age = 3);
});

 

暗号化

AES-256 で暗号化して、ユーザー データを安全に保持します。世界中の金融システムなどにおいても十分は安全性を確保できます。

// Generate a random encryption key
var random = new Random();
var key = new Byte[64];
rnd.NextBytes(key);
var config = new RealmConfiguration("Mine.realm");
config.EncryptionKey = key;

// Open the encrypted Realm file
var realm = Realm.GetInstance(config);
// Use the Realm as normal
var dogs = realm.All<Dog>().Where(d => d.Name.Contains("Fido"));

 

ライブ オブジェクトでリアクティブなアプリを開発

Realm のオブジェクトは、常に最新のデータを保持します。更新に関する通知を受けて、UI を更新します。アプリが古いデータを表示することはありません。

// To bind a ListView to results of a query
public partial class DogsPage : ContentPage
{
  internal Realm realm;
  internal IEnumerable<Dog> Entries { get; }

  public DogsPage()
  {
    InitializeComponent();
    realm = Realm.GetInstance();

    // Results from queries will automatically notify the Binding
    // and update the ListView accordingly
    Entries = realm.All<Dog>().Where(d => d.Age > 5)
    DogsList.ItemsSource = Entries;
  }

<ListView x:Name="DogsList">
  <ListView.ItemTemplate>
    <DataTemplate>
      <TextCell Text="{Binding Name}" 
        Detail="{Binding Age, StringFormat='is {0:#}'}" /> 
    </DataTemplate>
  </ListView.ItemTemplate>
</ListView>

 

シームレスにデータを同期

Realm Platform の拡張機能により、Realm Database は、Realm Platform と完璧に連携します。Realm Object Server の URL を指定するだけで、その他のすべてに変更はありません。データを保存すると自動的に同期されます。

Realm JavaRealm Objective‑CRealm SwiftRealm JavaScript、および Realm Xamarin で利用できます。

var user = await User.LoginAsync(Credentials.Google("google token"),
                                 new Uri("http://realm.example.com:9080"));

var realmUrl = new Uri("realm://realm.example.com:9080/~/userRealm");
var config = new SyncConfiguration(user, realmUrl);

var realm = Realm.GetInstance(config);
// Any changes made to this Realm will be synced across all devices!

オープン ソース

Realm Database はオープン ソース ソフトウェアとして開発されています。数千の開発者が GitHub 上のコードを改善し、さらに数百の開発者の方が Realm Database を利用したアドオン ライブラリを公開しています。Realm のリポジトリは 25,000 個以上のスターが付いています。

Realm Studio

Realm Studio は、Realm Database と Realm Platform を簡単に管理するための開発者向けツールです。Realm Studio により、ローカルまたは同期された Realm データベースの編集や Realm Object Server のインスタンス管理を簡易化するインターフェイスを提供します。macOS、Windows、または Linux でダウンロードできます。

Realm Studio をダウンロード

Wistia video thumbnail

Realm のセットアップは無料で、かかる時間はほんの数分です。


 

製品の詳細、価格、ライセンス体系、お見積り、デモの依頼など、お気軽にお問い合わせください。

価格/お問い合わせ

ページトップへ