2010年11月24日水曜日

NetBeans 7.0 で Git サポート(予定)

次期バージョンの NetBeanns 7.0(2011年3月リリース予定)にて、標準機能として Git サポートをするかもしれないとのことです
元ネタは NetBeans Wiki 、および、 NetBeans for PHP のコチラとコチラの記事です
Git が加わりますと、 NetBeans としては CVS 、 Subversion 、 Mercurialと合わせて4つのバージョン管理システムに対応することとなります(ローカル履歴は省略しています)
現在も非公式プラグインの nbgit にて Git の使用は可能ですが、標準機能としてサポートされるのは嬉しい限りです

Git サポートプラグインは現在、開発者向けのアップデートセンターで配布されています
(開発者向けのアップデートセンターは、リリース版の6.9.1や今回リリースされた 7.0 Beta でも利用可能ですが、その他の開発版のアップデートなども含まれるため、環境が壊れる、または不安定になる可能性が高いため、お勧めしません)

今回はデイリービルド版の NetBeans Dev 201011180001 を使って試してみました
※nbgit が既にインストールされている環境では正しく動かないようなのでご注意下さい
まずは、メニューより「ツール > プラグイン」と選択し、「プラグイン」ウィンドウを表示します
次に「使用可能なプラグイン」タグを選択し、「検索」テキストボックス内に、"Git"と入力します
(大文字、小文字は関係ないようなので、"git"、"GIT"などでも構わないようです)


パッケージの候補が出てきますので、チェックボックスを選択し、ウィンドウ下部の「インストール」ボタンをクリックします
インストールはウィザードの指示に従えば、すぐに完了します
完了後、再起動のダイアログが表示されますので、 NetBeans の再起動を行います

再起動後、メニューに「チーム > Git」と表示されていれば、インストール成功です


2010年11月24日現在では、機能は "Initialize" と「オプション」画面しかありません
メニューより「Initialize」を選択すると、下記のようなダイアログが表示され、ローカルリポジトリを作成することができます


「オプション」は以下のようになっています


現時点はプランの M3 の段階ですので、リポジトリのクローンやチェックアウトなどは実装されていませんが(それらは次リリースの M4 で実装予定)、なんとか NetBeans 7.0 正式リリースと Git サポートのリリースタイミングが合えばと思っています
今後も進捗がありましたら、お伝えしていきたいと思います

2010年11月20日土曜日

NetBeans IDE 7.0 Beta リリース

NetBeans IDE 7.0 Beta がリリースされました
ダウンロードはコチラからできるようになっております
具体的な新機能等は上記リリース情報、 Wiki 、または片貝さんのエントリを参照下さい

M1、M2は触る機会が少なかったので、 Beta ではいろいろと試してみたいとおもいます
(ただ、(昔よりは楽になったとはいえ) WebLogic Server や Oracle Database をサクッとお試しとは行かないですが…)

恒例のスプラッシュですが、 6.8 以降のデザインから変わりました


青が主体なのは同じですが、以前の文字の配置等は 6.5 のときに戻ったような感じです
ちなみに、以下が 6.5 のスプラッシュ画面です
(個人的には 6.5 が一番好きでした)


NetBeans IDE 7.0 の正式リリースは2011年03月の予定となっています
不具合等お気づきの点がありましたら、 ML へのご連絡頂ければと思います

2010年11月18日木曜日

Scala 2.8.1 リリース

公式に発表されて、だいぶ時間が経ってますが、Scala 2.8.1 正式版がリリースされました
今回から Macports ではなく、Homebrew でのパターンとなります
"brew outdated" を実行すると、下記のように 2.8.1 のパッケージが準備されていることが確認できます

$ brew outdated
scala (2.8.0 < 2.8.1)

あとは、これをインストールするだけとなります

$ brew install scala

インストール後のバージョン情報は下記のようになっています
(Macports と違い、2.7系、2.8系が別々にはなっていません)

$ scala -version
Scala code runner version 2.8.1.final -- Copyright 2002-2010, LAMP/EPFL

2010年11月17日水曜日

MacPorts から Homebrew へ移りました

HDD の乗せ換えで OS 丸ごとクリーンインストールしたことを契機に、長年お世話になった MacPorts から Homebrew に移ることにしました

MacPorts 自体は管理しているパッケージも豊富、動作も速く、申し分ないのですが、唯一不満なのは Mac に標準で入っている(MacPorts の管理外の)アプリケーションを考慮せずに、新たにインストールする点です
(例えば、 Mac にはデフォルトで perl 5.10 がインストールされていますが、 MacPorts でインストールするパッケージが perl に依存するものである場合、デフォルトのそれではなく、依存パッケージとして新規に perl をインストールしようとします)

ということで、その不満を解消してくれる Homebrew の導入に踏み切りました
※Homebrew も管理パッケージがまだまだ少ないなど、全く不満がないわけではないので、インストールされる際は、各々のメリット、デメリットを考慮の上、お試しください

インストール前に下記のような条件があります
(原文はココで、注釈は端折ってますので、気になる方は原文を参照下さい)

・CPU が Intel な Mac であること
・OS は 10.5 Leopard か、それ以上であること
・X11 込みの XCode
・Java Developer Update

Java Developer Update は特に、Apple リリースの "1.6.0_22 JRE update" をインストール、使用している場合は必ずインストールすることをお勧めします(cmake 等のインストールでコケます)
Apple Developer から最新の Developer Package (2010年11月17日時点では "Java for Mac OS X 10.6 Update 3 Developer Package") をダウンロードし、インストールして下さい
また、上記公式の注釈には(言うまでもないからか)記述がないのですが、インターネットへの接続が必要です

以上の条件が満たせたら、実際に Homebrew をインストールしてみます
インストールは至って簡単で、下記コマンドで完了します
※インストール中、管理者( sudo )のパスワードを求められるので、入力してください

$ ruby -e "$(curl -fsSL https://gist.github.com/raw/323731/install_homebrew.rb)"

Homebrew は "/usr/local" 以下に自身とパッケージをインストールするので、 PATH を通します
".bash_profile" など適当なファイルに下記を記述してください

export PATH=/usr/local/sbin:/usr/local/bin:$PATH

PATH を反映後、 "brew -v " コマンドを実行し、インストールが正常に行われているかを確認します
下記のようにバージョン番号が表示されたら正常に完了しています
(2010年11月17日時点では最新バージョンは 0.7.1 です)

$ brew -v
0.7.1

次に、パッケージ( homebrew では fomula と呼んでいますが、今回はパッケージで表記を統一させていただきます)のインストールを行います
下記コマンドにてパッケージのインストールを行います

$ brew install [インストールしたいパッケージ名]

"cmake" をインストールしたい場合は、下記のようになります

$ brew install cmake

対応しているパッケージを検索する場合は下記のとおりです

$ brew search [検索したいパッケージ名(の一部)]

"make" という名前が含まれるパッケージを検索したい場合は、下記のようになります
(実行結果も併せて記載します)

$ brew search make
cmake colormake makensis o-make premake smake

Homebrew 自身(と管理パッケージ情報)の更新は下記のようになります

$ brew update

インストール済みのパッケージが(管理パッケージにて)最新版かどうかの確認は下記のコマンドを使用します

$ brew outdated

アップグレードする際は、インストールと同様に "brew install [パッケージ名]" コマンドで可能です
※古いパッケージを一括でアップグレードする方法をご存知の方がいましたら、コメントいただけると助かります

以上、簡単ですが、 Homebrew の使い方になります
自分でパッケージを作るのも簡単なようなので、機会があれば挑戦したいと思います

2010年11月16日火曜日

Ubuntu 10.04 に Bazaar をインストールする

1ヶ月以上間があいての、久々のポストです

【11月18日追記】
Bazaar のスペル間違ってました
申し訳ありません
(誤)Bazzar→(正)Bazaarです
(記事のURLは作成時に決まるので、bazzarのままです)
ubuntu primer さん、ご指摘ありがとうございます

今回は、Ubuntu 10.04 に Bazaar をインストールする方法です
ざっと調べた限り、 NetBeans 用プラグインはありませんでした
(それらしきプロジェクトは sourceforge.net 上で見つけたのですが、活動しているかは不明でした)

今回は apt を利用して、パッケージのインストールを行います
デフォルトでも 2.1 系の Bazaar インストールは可能ですので、このバージョンで問題ない場合は、サクッと "sudo apt-get install bzr" とするとインストール完了です
しかし、最新の安定版は(2010年11月16日現在) 2.2 系ですので、こちらをインストールしたい場合はリポジトリの登録が必要になります
※以降は、公式リポジトリ以外のリポジトリを追加しますので、実行する際は自己責任にてお願いいたします

まず、リポジトリリストにリポジトリを追加します
"/etc/apt/sources.list" ファイル、または "/etc/apt/sources.list.d" ディレクトリ以下に適当なファイル名でファイルを作成し、リポジトリ情報を記述します
なお、今回の例では "/etc/apt/sources.list.d" ディレクトリ以下に "launchpad.list" という名前を作成しました

ファイルに記述した内容は以下のとおりです
("/etc/apt/sources.list" ファイルを編集する場合は既存にあるリポジトリの最終行に追記、"/etc/apt/sources.list.d" ディレクトリ以下に新規ファイルを作成した場合はそのまま記述ください)

deb http://ppa.launchpad.net/bzr/ppa/ubuntu lucid main
deb-src http://ppa.launchpad.net/bzr/ppa/ubuntu lucid main

なお、"lucid" の部分を各 Ubuntu のバージョンに併せて適時変更頂ければ、その他のバージョンでも対応できるかと思います

次に "sudo apt-get update" を実行し、パッケージ情報をサーバから取得します
取得後、最後に下記のような警告メッセージが表示されるとおもいます

$ sudo apt-get update
無視 file: binary/ Release.gpg
(中略)
W: GPG error: http://ppa.launchpad.net lucid Release: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY D702BF6B8C6C1EFD

警告を出さないようにするため、以下のコマンドを実行し、公開鍵を登録します
登録する鍵の ID は、警告の中の最後の "NO_PUBKEY" につづく文字列 "D702BF6B8C6C1EFD" になります
※この文字列は、リポジトリ毎に異なりますので、lucid(10.04) 以外のバージョンのリポジトリを使うときは読み替えてください

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys D702BF6B8C6C1EFD

再度、 "sudo apt-get update" を実行し、警告がでないことを確認してください
以上でリポジトリの登録が終わりになります
以降の処理は通常の Bazaar パッケージのインストールと同じです
(既に Ubuntu のリポジトリからインストール済みの場合はアップグレード( "sudo apt-get upgrade" )してください)
"bzr --version" コマンドで最新版の 2.2 系がインストールされていることが確認できるかと思います

$ sudo apt-get install bzr
(中略)
$ bzr --version
Bazaar (bzr) 2.2.1
(後略)

2010年9月23日木曜日

うれしかったので貼ってみた

前回で2回分 OrientDB について紹介するエントリを書いたところ、開発者の Luca に Tweet いただきました


まだまださわりすら書けていないので、これからも頑張って OrientDB の魅力を書いていけたらなと思います
前回分までのエントリは以下になります

オープンソース NoSQL データベース OrientDB を使ってみる #1
オープンソース NoSQL データベース OrientDB を使ってみる #2

OrientDB に興味をもたれた方、ぜひダウンロードして使ってみてください

2010年9月22日水曜日

オープンソース NoSQL データベース OrientDB を使ってみる #2

前回に引き続き、 OrientDB の紹介です
今回は Java API を使用したデータの操作について紹介します
OrientDB では使用する API によりドキュメント指向データベース、オブジェクトデータベース、グラフデータベースとしての特性を利用することができます
(実際はドキュメント指向データベースをベースに、各データベースの特性のラップを通して利用するという実装です)
以降の説明では基本となるドキュメント指向データベースとしての操作について説明しています

操作の対象は、今回もサーバーとして起動している OrientDB とします
OrientDB のインストール、設定、起動については下記のエントリを参照ください

・オープンソース NoSQL データベース OrientDB を使ってみる #1

使用する環境は以下のとおりです

・Mac OS X 10.6.4
・Java(TM) SE Runtime Environment (build 1.6.0_20-b02-279-10M3065)
・OrientDB 0.9.22
・NetBeans 6.9.1
※以降の説明はお使いの環境に合わせて、適時読み替えてください

まず、 NetBeans にて Java アプリケーションの新規プロジェクトを作成します
プロジェクト名は任意で構いませんが、ここでは説明のため "OrientDBSample" とします
「主クラスを作成」チェックボックスもチェックしていて下さい

プロジェクト作成後、必要なライブラリの追加を行ないます
"OrientDBSample" プロジェクト内の「ライブラリ」フォルダを右クリックし、表示されたコンテキストメニューより「JAR/フォルダを追加...」をクリックします

ファイル選択ダイアログが表示されるので、 OrientDB を展開したフォルダ内の "lib" フォルダにある、 "orientdb-client-0.9.22.jar" 、及び "orientdb-core-0.9.22.jar" を選択し、「選択」ボタンをクリックします
ダイアログが閉じると、「ライブラリ」フォルダ内に上記2つの JAR ファイルが追加されていることが確認できるかと思います

まず、データベースへ接続を行ないます
接続は前回同様 demo データベースを使用します
プロジェクト作成時に自動生成された Main クラスの main メソッド内に以下のようにコードを追加します
(「主クラスを作成」オプションを選択していなかった場合は、 main メソッドをもつ適当なクラスを作成してください)
package orientdbsample;

import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx;

public class Main {
    public static void main(String[] args) {
        // admin ユーザでサーバーの demo データベースに接続します
        ODatabaseDocumentTx database = new ODatabaseDocumentTx("remote:localhost/demo").open("admin", "admin");

        // 接続の解除
        database.close();
    }
}
以降は上記のソースを基本に処理のコードを追加していきます
(import 文、パッケージ名は省略しますのでご注意下さい)

まずは、登録処理を行うコードです
入力後、正常に動作が完了することを確認してください
public class Main {
    public static void main(String[] args) {
        // admin ユーザでサーバーの demo データベースに接続します
        ODatabaseDocumentTx database = new ODatabaseDocumentTx("remote:localhost/demo").open("admin", "admin");
        
        // Rebellion クラスのレコードを作成
        // ※指定したクラスがデータベースに存在しない場合、自動的に作成してくれます
        ODocument document = new ODocument(database, "Rebellion");
        document.field("name", "Luke");
        document.field("surname", "Skywalker");
        document.save();

        // メソッドチェーンを利用して、 Rebellion クラスのレコードを作成
        new ODocument(database, "Rebellion").field("name", "Han").field("surname", "Solo").save();

        // 接続の解除
        database.close();
    }
}
ORientDB ではドキュメントは ODocument クラスを使用して表します
上記例では、 "Rebellion" クラスのドキュメントを作成しています
"Console" アプリケーションを使用した際には事前にクラスの作成が必要でしたが、 Java API を利用する際にはクラスが存在しない場合は自動的に作成してくれます
フィールドメソッドを使用し、指定したフィールド名にフィールド値を設定します
クラスに指定したフィールドが存在しない場合、新たに追加されます
フィールド値に指定可能な型は以下のようになっています

・文字列型 (java.lang.String)
・ Byte 型 (java.lang.Byte または byte)
・ Short 型 (java.lang.Short または short)
・ Integer 型 (java.lang.Integer または int)
・ Long 型 (java.lang.Long または long)
・ Float 型 (java.lang.Float または float)
・ Double 型 (java.lang.Double または double)
・ Boolean 型 (java.lang.Boolean または boolean)
・日付型 (java.util.Date)
・バイナリ (byte[])
・リスト型 (java.util.Set)
・セット型 (java.util.Set)
・マップ型 (java.util.Map)

上記に加えて、レコード間の関連を表す Link とそれに関係する型が OrientDB にてサポートされている型となります
( Link に関しては別エントリにて説明したいと思います)
例ではシンプルに文字列のみをフィールド値に設定しています
フィールドに値を設定した後、 save() メソッドでデータベースへの登録を行ないます

また、OrientDB ではデータ操作に対して( "Console" アプリケーションと同様に) SQLライクなクエリ(以降は SQL と記述します)を使用することができます
Java API を利用した SQL の実行は OSQLQuery クラスのサブクラス(下記例では OCommandSQL クラス)を使用します
public class Main {
    public static void main(String[] args) {
        // admin ユーザでサーバーの demo データベースに接続します
        ODatabaseDocumentTx database = new ODatabaseDocumentTx("remote:localhost/demo").open("admin", "admin");
        
        // INSERT 文を作成する
        String insertQuery = "insert into Rebellion (name) values ('Chewbacca')";

        // クエリを実行します
        database.command(new OCommandSQL(insertQuery)).execute();

        // 接続の解除
        database.close();
    }
}
次に browseClass メソッドを使用して、先ほど登録した Rebellion クラスの全レコードを表示します
("Console" アプリケーションの "browseClass" コマンドと同様の結果となります)
取得できたレコードの getIdentity() メソッドを呼びだすと、データベースにてユニークなキーとなる、レコード IDが取得できます
public class Main {
    public static void main(String[] args) {
        // admin ユーザでサーバーの demo データベースに接続します
        ODatabaseDocumentTx database = new ODatabaseDocumentTx("remote:localhost/demo").open("admin", "admin");
        
        // Rebellion クラスのレコードのリストを取得
        Iterable<ODocument> documents = database.browseClass("Rebellion");

        // レコードのリストから各レコードを取得します
        for (ODocument person : documents) {
            // レコードの各フィールドを取得
            // レコード ID を取得
            System.out.println("Rec ID : " + person.getIdentity());
            System.out.println("Name   : " + person.field("name"));
            System.out.println("Surname: " + person.field("surname"));
        }

        // 接続の解除
        database.close();
    }
}

実行後、以下のように出力されるかと思います
Rec ID : 19:0
Name : Luke
Surname: Skywalker
Rec ID : 19:1
Name : Han
Surname: Solo
Name : Chewbacca
Surname: null

クラスのレコード件数を取得するには countClass() メソッドを使用します
public class Main {
    public static void main(String[] args) {
        // admin ユーザでサーバーの demo データベースに接続します
        ODatabaseDocumentTx database = new ODatabaseDocumentTx("remote:localhost/demo").open("admin", "admin");
        
        // Rebellion クラスのレコード件数を取得します
        long count = database.countClass("Rebellion");

        System.out.println("Count: " + count);

        // 接続の解除
        database.close();
    }
}
また、個別のレコードを抽出するにはクエリを使用します
OrientDB では先の SQL とは別に Native クエリを使用することができますが、現在 Native クエリは local データベースに接続した場合のみ使用可能という制限があります
今回は remote データベースを前提としていますので、 Native クエリに関しては説明を省略します
Java API を利用したレコード抽出には OSQLQuery クラスのサブクラス(下記例では OSQLSynchQuery クラス)を使用します
public class Main {
    public static void main(String[] args) {
        // admin ユーザでサーバーの demo データベースに接続します
        ODatabaseDocumentTx database = new ODatabaseDocumentTx("remote:localhost/demo").open("admin", "admin");

        // クエリ文字列を作成する
        // name フィールドのフィールド値が "L" で始まるもののみ抽出する
        String query = "select from Rebellion where name like 'L%' ";

        // クエリを実行し、結果のリストを取得します
        List<ODocument> documents = database.query(new OSQLSynchQuery<ODocument>(query));

        // レコードのリストから各レコードを取得します
        for (ODocument person : documents) {
            // レコードの各フィールドを取得
            // レコード ID を取得
            System.out.println("Rec ID : " + person.getIdentity());
            System.out.println("Name   : " + person.field("name"));
            System.out.println("Surname: " + person.field("surname"));
        }

        // 接続の解除
        database.close();
    }
}
実行後、以下のように出力されるかと思います

Rec ID : 19:0
Name : Luke
Surname: Skywalker

次にレコードの更新を行ないます
対象となるレコードを抽出し、値を更新後、 save() メソッドを実行して反映します
対象レコード抽出には "@rid" という特別なフィールド(属性値) とレコードIDを使用しています
また、INSERT 文と同様に command() メソッドと OCommandSQL クラスを使用して UPDATE 文を実行することができます
public class Main {
    public static void main(String[] args) {
        // admin ユーザでサーバーの demo データベースに接続します
        ODatabaseDocumentTx database = new ODatabaseDocumentTx("remote:localhost/demo").open("admin", "admin");

        ODocument person = null;

        // SELECT 文を作成する
        String selectQuery = "select from Rebellion where @rid = 19:0";

        // クエリを実行し、その結果のリストを取得します
        person = ((List<ODocument>) database.query(new OSQLSynchQuery<ODocument>(selectQuery))).get(0);
        // レコードの各フィールドを取得
        System.out.println("Rec ID : " + person.getIdentity());
        System.out.println("Name   : " + person.field("name"));
        System.out.println("Surname: " + person.field("surname"));
        System.out.println("----------");

        // "name" フィールドのフィールド値を "" 更新する
        person.field("name", "Ben");
        person.save();

        // クエリを実行し、その結果のリストを取得します
        person = ((List<ODocument>) database.query(new OSQLSynchQuery<ODocument>(selectQuery))).get(0);
        // レコードの各フィールドを取得
        System.out.println("Rec ID : " + person.getIdentity());
        System.out.println("Name   : " + person.field("name"));
        System.out.println("Surname: " + person.field("surname"));
        System.out.println("----------");

        // UPDATE 文を作成する
        String updateQuery = "update Rebellion set name = 'Anakin' where @rid = 19:0";

        // クエリを実行します
        database.command(new OCommandSQL(updateQuery)).execute();

        // クエリを実行し、その結果のリストを取得します
        person = ((List<ODocument>) database.query(new OSQLSynchQuery<ODocument>(selectQuery))).get(0);
        // レコードの各フィールドを取得
        System.out.println("Rec ID : " + person.getIdentity());
        System.out.println("Name   : " + person.field("name"));
        System.out.println("Surname: " + person.field("surname"));
        System.out.println("----------");

        // 接続の解除
        database.close();
    }
}
実行後、以下のように出力されるかと思います

Rec ID : 19:0
Name : Luke
Surname: Skywalker
----------
Rec ID : 19:0
Name : Ben
Surname: Skywalker
----------
Rec ID : 19:0
Name : Anakin
Surname: Skywalker
----------

最後にレコードの削除を行ないます
対象となるレコードを抽出し、 delete() メソッドを実行して削除します
また、 command() メソッドと OCommandSQL クラスを使用して、 DELETE 文を実行することも可能です
public class Main {
    public static void main(String[] args) {
        // admin ユーザでサーバーの demo データベースに接続します
        ODatabaseDocumentTx database = new ODatabaseDocumentTx("remote:localhost/demo").open("admin", "admin");
        
        // SELECT 文を作成する
        String selectQuery = "select from Rebellion where @rid = 19:0 ";

        // レコードのリストから各レコードを取得します
        for (ODocument document : database.browseClass("Rebellion")) {
            // レコードの各フィールドを取得
            System.out.println("Rec ID : " + document.getIdentity());
            System.out.println("Name   : " + document.field("name"));
            System.out.println("Surname: " + document.field("surname"));
        }

        System.out.println("----------");

        // クエリを実行し、その結果を取得します
        ODocument person = ((List<ODocument>) database.query(new OSQLSynchQuery<ODocument>(selectQuery))).get(0);
        // 取得したレコードの delete() メソッドを実行し、レコードを削除
        person.delete();

        // DELETE 文を作成する(全件削除)
        String deleteQuery = "delete from Rebellion";

        // クエリを実行します
        database.command(new OCommandSQL(deleteQuery)).execute();

        // Rebellion クラスの件数取得(レコード有無判定)
        if(database.countClass("Rebellion") > 0) {
            // レコードのリストから各レコードを取得します
            for (ODocument document : database.browseClass("Rebellion")) {
                // レコードの各フィールドを取得
                System.out.println("Rec ID : " + document.getIdentity());
                System.out.println("Name   : " + document.field("name"));
                System.out.println("Surname: " + document.field("surname"));
            }
        } else {
            System.out.println("Rebellion クラスにはレコードは存在しません");
        }

        // 接続の解除
        database.close();
    }
}
実行後、以下のように出力されるかと思います

Rec ID : 19:0
Name : Anakin
Surname: Skywalker
Rec ID : 19:1
Name : Han
Surname: Solo
Rec ID : 19:2
Name : Chewbacca
Surname: null
----------
Rebellion クラスにはレコードは存在しません

以上で、Java API を利用した OrientDB の操作方法になります
今回説明はしませんでしたが、 OrientDB にはトランザクションも利用できます
しかし、最新リリース版として使用している 0.9.22 ではバグがあり、正しく利用できないという状態です
開発版ではこの問題は修正されているので、次回リリース版である 0.9.23 (10月中旬リリース予定)では問題なく利用出来るかと思います

次回はデータ間の関連(リレーション)について紹介したいと思います