CSVからRealm Databaseへの変換~Realm Studio編

Posted by 技術ブログ by Strawhat.net on Monday, January 8, 2018

TOC

CSVファイルをRealmファイルに変換する方法について、Realm Studioを使う方法のメモ。

Realm Studioのインストール

Realm Studioは、このサイトからWindows版・Linux版・Mac版を入手可能。

Realm StudioでのCSVファイル変換

Realm Studioを起動して、File>Create Realm from>CSVとメニューを選択。

2018-01-08_10-55-04 { width=300 }{ target="_blank" }

CSVファイルからのRealmファイルの作成メニュー

ファイルオープンダイアログが表示されるので、CSVファイルを選択します。

例えば、このようなCSVファイルを指定すると、

prefecture_code,prefecture_name
1,北海道
2,青森県
3,岩手県
4,宮城県
5,秋田県
6,山形県
7,福島県
8,茨城県
9,栃木県
10,群馬県
11,埼玉県
12,千葉県
13,東京都
14,神奈川県
(以下、省略)

以下のように、CSVファイルと同じフォルダにdefault.realmファイル(と関連ファイル)が作成されます。

2018-01-08_10-55-04 { width=300 }{ target="_blank" }

作成されたRealmファイル

Realmファイルの内容は、CSVファイルのファイル名がクラス名となり、CSVファイルの1行目のヘッダに書かれたカラム名が列名となっています。

2018-01-08_10-55-04 { width=300 }{ target="_blank" }

作成されたRealmファイルの内容

なお、この画面から行の追加、および列の追加が可能。またクラスも増やすことができます。

モデル定義クラスの生成

アプリから作成したRealmファイルを使う場合、モデルを定義したクラスが必要になります。これもrealm Studioから可能。

File>Save model definitoinsメニューから、クラス定義の言語を選択します。

2018-01-08_10-55-04 { width=300 }{ target="_blank" }

モデル定義クラスファイルの作成メニュー

すると、作成先のフォルダを指定するダイアログが表示されるので、指定してOKを押すと、そのフォルダにファイルが作成されます。

2018-01-08_10-55-04 { width=300 }{ target="_blank" }

作成先フォルダの入力ダイアログ

2018-01-08_10-55-04 { width=300 }{ target="_blank" }

作成されたモデル定義クラス

クラスのファイル名はCSVファイル名(クラス名)と同じで、以下のような内容です。

// Please note : [Backlink] properties and default values are not represented
// in the schema and thus will not be part of the generated models

using System;
using System.Collections.Generic;
using Realms;

namespace MyProject.Models
{
    public class pref : RealmObject
    {
        [MapTo("prefecture_code")]
        public long? Prefecture_code { get; set; }

        [MapTo("prefecture_name")]
        public string Prefecture_name { get; set; }
    }
}

アプリには、名前空間など必要な修正をしたうえで、ファイルを取り込むことになります。

まとめ

モデル定義クラスへの反映を踏まえて、CSVファイルのファイル名、およびヘッダに記載する列名を考慮する必要がありますが、CSVファイルを自由に定義できて、かつ手動での変換操作のコストが無視できる場合は、Realm Studioを利用するのもよいかと思います。

ただし、CSVファイルの仕様が他者によって決まる場合、もしくは頻繁に更新される場合は、別途ツールを作ったほうがよさそうです。