4月28日にイスタンブールで行われた Istanbul Tech Talk にて、 Mario Zechner が発表した libGDX についてのプレゼン資料です
また、資料中にある Live-Coding Session に使用したコードは GitHub 上にて公開されています
各実装フェーズ毎にタグが切ってあり、また script.txt にその簡単な解説があるため、 libGDX にてどのように実装を行うかを把握するにはよい資料だと思います
(全体を把握しやすくするため、実装はかなりコンパクトにまとまっています)
2014年4月29日火曜日
2014年4月26日土曜日
libGDX のプロジェクト構成と共通インターフェイスについて
libGDX はマルチプラットフォーム対応のため、(プラットフォーム共通の)ゲームロジックの実装と、各プラットフォームに依存する実装は分離されています
セットアップツールを使い、プロジェクトを作成すると以下のようなディレクトリ構造にてプロジェクトが作成されます
(セットアップツールの "suprojects" の設定にて、 "Desktop" 、 "Android" 、 "Ios" 、 "Html" の4つすべてを選択した場合になります)
セットアップツールを使い、プロジェクトを作成すると以下のようなディレクトリ構造にてプロジェクトが作成されます
(セットアップツールの "suprojects" の設定にて、 "Desktop" 、 "Android" 、 "Ios" 、 "Html" の4つすべてを選択した場合になります)
"android"、 "desktop" 、 "html" 、 "ios" の各ディレクトリには、それぞれのプラットフォーム毎の実装、設定などを含みます
例えば、 "android" ディレクトリには "AndroidManifest.xml" ファイル、 "ios" ディレクトリには "Info.plist.xml" ファイルなどがあります
これらのプラットフォームの違いを吸収するため、 libGDX は次の5つのインターフェイスを用意しています
- Application … ライフサイクル、ウィンドウ管理などのアプリケーションレベルイベントインターフェイス
- Files … ファイルシステムインターフェイス
- Input … マウス、キーボード、タッチイベントや加速度センサーなどの入力イベントインターフェイス
- Net … HTTP(S) 、 Socket 通信などのネットワークインターフェイス
- Audio … PCM 入出力などのオーディオインターフェイス
- Graphics … OpenGL ES 2.0、3.0 インターフェイス
これらのインターフェイスを利用することで、開発者は個々のプラットフォームの差を意識することなく、実装を行うことができます
なお、プラットフォームによっては提供されていない機能や未実装の機能(2014年4月現在では iOS プラットフォームではコンパスが利用できないなど)が存在するため、すべての機能が共通して利用できるというわけではないので、ご注意ください
2014年4月23日水曜日
書評『Learning Libgdx Game Development』
Packt Publishing の "Learning Libgdx Game Development" のレビューです
本書は Java ゲーム開発フレームワークである libGDX にについて解説した書籍となります
目次は下記のようになっています
最初は小さなプログラムから開始し、徐々に機能を解説、追加していくことで libGDX が持つ多くの機能を段階的に学ぶことができます
本書にて対象とするプラットフォームは主にデスクトップと Android となり、 HTML 5 や iOS についてはサポートしている程度にしか記述されていません(特に iOS 対応に関しては、現在の RoboVM 採用前の Xamarin.iOS についての解説になっています)
開発そのものも大半をデスクトップでの動作前提に進められますが、それによりエミュレータの起動などの必要がなくなり、開発そのものに集中して作業が進められることができました
また、入力インターフェイスの調整以外はデスクトップと Android にてゲームロジックを変更することなく同様に動作させることが出来たため、デスクトップにて開発を進め、各モバイル端末で実際の動作確認と細かい調整という効率的な手法が選択できるかと思います(本書の対象外とはなりますが、 gradle を採用した最新のビルドツールによる、 iOS 上での動作も確認できています)
なお、 libGDX が今もなお活発に開発が進められているということもあり、書籍にある通りに記述しても最新のバージョンでは動作しない(※UI のセレクトボックスの仕様変更)というケースもありました
全体的には、 libGDX に関して必要な情報がまとまった良書だとおもいます
(2014年4月現在、 libGDX について書かれた唯一の書籍でもありますが…)
サンプル PDF もダウンロード可能ですので、興味があれば内容を確認してみてはいかがでしょうか
本書は Java ゲーム開発フレームワークである libGDX にについて解説した書籍となります
目次は下記のようになっています
- Introduction to Libgdx and Project Setup
- Cross-platform Development – Build Once, Deploy Anywhere
- Configuring the Game
- Gathering Resources
- Making a Scene
- Adding the Actors
- Menus and Options
- Special Effects
- Screen Transitions
- Managing Music and Sound Effects
- Advanced Programming Techniques
- Animations
最初は小さなプログラムから開始し、徐々に機能を解説、追加していくことで libGDX が持つ多くの機能を段階的に学ぶことができます
本書にて対象とするプラットフォームは主にデスクトップと Android となり、 HTML 5 や iOS についてはサポートしている程度にしか記述されていません(特に iOS 対応に関しては、現在の RoboVM 採用前の Xamarin.iOS についての解説になっています)
開発そのものも大半をデスクトップでの動作前提に進められますが、それによりエミュレータの起動などの必要がなくなり、開発そのものに集中して作業が進められることができました
また、入力インターフェイスの調整以外はデスクトップと Android にてゲームロジックを変更することなく同様に動作させることが出来たため、デスクトップにて開発を進め、各モバイル端末で実際の動作確認と細かい調整という効率的な手法が選択できるかと思います(本書の対象外とはなりますが、 gradle を採用した最新のビルドツールによる、 iOS 上での動作も確認できています)
なお、 libGDX が今もなお活発に開発が進められているということもあり、書籍にある通りに記述しても最新のバージョンでは動作しない(※UI のセレクトボックスの仕様変更)というケースもありました
全体的には、 libGDX に関して必要な情報がまとまった良書だとおもいます
(2014年4月現在、 libGDX について書かれた唯一の書籍でもありますが…)
サンプル PDF もダウンロード可能ですので、興味があれば内容を確認してみてはいかがでしょうか
2014年4月21日月曜日
libGDX 1.0 リリース
libGDX 1.0 がリリースされました
今回のリリースにて、 Android のバージョンは 2.2 以上(OpenGL ES 1.x サポートが除外されたため)が対象となりました
またセットアップツール、ドキュメントの大幅な刷新が行われています
(現状では公式ドキュメント以外では、ほぼ旧セットアップツール(gdx-setup-ui.jar)を使用した解説がほとんどとなりますので、ご注意ください)
今まで Eclipse での開発を推奨してきていましたが、ビルドツールに Gradle を採用することで IntelliJ IDEA 、および NetBeans での開発が簡単に行えるようになりました
(各 IDE 毎のセットアップドキュメントが整備されています)
2010年3月から始まり、4年経った今も活発に開発が行われているプロジェクトです
1.0 はプロジェクトにとっては単なる区切りでしかなく、今後も新たな機能や改善が行われていくかと思います
拙作の Gradle プラグインが本プロジェクトに採用されたことがきっかけで、コミュニティに参加するようになりましたが、何もわかっていない初心者でも歓迎してくれる良いコミュニティだと思います
( Unity や(アジア圏に強い) Cocos2d-x と比較して)日本ではまだまだ知名度の低いゲームエンジンゲーム(2D / 3D)開発フレームワークではありますが、おもしろいプロダクトと思いますので、機会がありましたら、ぜひ使ってみて下さい
こちらのブログでも今後も情報提供できたらと思います
こちらのブログでも今後も情報提供できたらと思います
2014年4月1日火曜日
libGDX について
libGDX は、デスクトップ(Windows, Mac OS X, Linux)、モバイル(Android, iOS, Blackberry)、 HTML5 というマルチプラットフォームをサポートした、オープンソース(Apache License 2.0) の Java ゲーム(2D / 3D)開発フレームワークになります
国内ではまだ有名とは言えない状況ですが、海外では Android ネイティブアプリケーションをはじめ、多くのゲーム開発にて採用されています
このフレームワークの最大の魅力は、ラピッドプロトタイピングと、それによりイテレーションを素早く実行できることにあります
実行、デバッグが容易なデスクトップ用アプリケーションとして開発を進め、その後各プラットフォームにて調整という流れで作業を行うことで開発時間の短縮がはかれます
(ただし、 HTML5 対応に限っては調整にかなりの時間を要するかと思います)
また他のゲーム開発用フレームワークと比較すると、 libGDX は OpenGL による描画や入出力処理などの低レベル API が中心として提供され、ゲーム開発によく使われるトランジションなどの高レベル API はあまり用意されていません
しかし、これにより他のライブラリ、フレームワークとの柔軟な組み合わせ(例えば、先述のトランジションに関しては Universal Tween Engine を使用するなど)を実現することができます
ドキュメントに関しても公式の Wiki 、フォーラムをはじめ、などが充実しています(残念ながら、日本語の資料は少ないです)
国内ではまだ有名とは言えない状況ですが、海外では Android ネイティブアプリケーションをはじめ、多くのゲーム開発にて採用されています
このフレームワークの最大の魅力は、ラピッドプロトタイピングと、それによりイテレーションを素早く実行できることにあります
実行、デバッグが容易なデスクトップ用アプリケーションとして開発を進め、その後各プラットフォームにて調整という流れで作業を行うことで開発時間の短縮がはかれます
(ただし、 HTML5 対応に限っては調整にかなりの時間を要するかと思います)
また他のゲーム開発用フレームワークと比較すると、 libGDX は OpenGL による描画や入出力処理などの低レベル API が中心として提供され、ゲーム開発によく使われるトランジションなどの高レベル API はあまり用意されていません
しかし、これにより他のライブラリ、フレームワークとの柔軟な組み合わせ(例えば、先述のトランジションに関しては Universal Tween Engine を使用するなど)を実現することができます
ドキュメントに関しても公式の Wiki 、フォーラムをはじめ、などが充実しています(残念ながら、日本語の資料は少ないです)
- Wiki
- Javadoc
- フォーラム
- IRC ログ
(IRC は irc.freenode.net 上に #libgdx チャンネルが用意されています) - 公式以外のチュートリアルリンク集
- GameFromScratch
- David Saltares
- Kilobolt: LibGDX Zombie Bird Tutorial
日本語の資料は少ないのですが、 @rnkv さんの「技情研ネット」内のページがとても実践的な内容にてまとまっています
以上、簡単な libGDX の紹介と資料のリンクまとめになります
(上記以外にもオススメのドキュメント等ありましたら教えてください)
2014年3月30日日曜日
NetBeans で libGDX プロジェクトを作成する
NetBeans で libGDX プロジェクトを作成する方法を紹介します
libGDX は Java 用クロスプラットフォームゲーム開発フレームワークで、現在 Windows, Mac, Linux, Android, iOS, BlackBerry, HTML5 をサポートしています
今までは開発には Eclipse を推奨していたこともあり、他の IDE にて開発するのは少し手間が必要でした
今回新たにセットアップツールの刷新が行われ、ビルドツールとして gradle が採用されたことにより、 NetBeans をはじめ、 Eclipse 以外の IDE 、エディタによる開発が簡単に行うことができるようになりました
本エントリでは、この新しいセットアップツールと、 NetBeans での libGDX プロジェクトの作成方法を紹介したいと思います
なお、 libGDX は現在も活発に開発が進められているプロジェクトであるため、閲覧される時点では挙動が異なる可能性があることをご了承ください
今回使用した環境は以下の通りになります
OS: Mac OS X 10.9.2
JDK: 1.7.0_51
Xcode: 5.1
※ Xcode は iOS プラットフォーム利用時のみ必要となります
NetBeans 8.0(Build 201403101706)
Gradle Support Plugin 1.3.0
まず、セットアップツールをダウンロードします
適当な場所に保存後、下記コマンドにてセットアップツール起動します
起動後、上記のようなウィンドウが表示されるので、各項目に適当な値を入力します
(※4月23日最新版セットアップツールに更新)
Name … アプリケーション名
Package … 作成するプロジェクトのパッケージ名
Game class … プラットフォーム共通(core)のメインゲームクラス名
Destination … プロジェクト作成先ディレクトリ
Android SDK … Android SDK のパス(local.properties に設定されます)
"Sub Project"、"Extensions" については必要に応じ、チェックを行ってください
入力後、 "Generate" ボタンをクリックすると、プロジェクトが "Destination" フィールドに指定した場所に生成されます
次に作成したプロジェクトを NetBeans で開きます
「ファイル > プロジェクトを開く」にて、生成されたディレクトリまで移動します
プロジェクトを開くと、以下のようなツリー構造で NetBeans に開かれます
作成したプロジェクト(ルートプロジェクト)は、5つのサブプロジェクトで構成されます
android … Android 用プロジェクト
core … プラットフォーム共通プロジェクト
desktop … デスクトップ (Windows, Mac, Linux) 用プロジェクト
gwt … HTML5(GWT) 用プロジェクト
ios … iOS 用プロジェクト
各サブプロジェクトはダブルクリックすることで開くことができます
まず、ルートプロジェクトの設定を行います
(ルートプロジェクトに行った設定はすべてのサブプロジェクトに反映されます)
ルートプロジェクトを右クリックし、コンテキストメニューから "プロパティ" を選択すると以下のようなウィンドウが表示されます
"Gradle home" の "Inherit" チェックボックスをはずします
また、テキストボックスに値が入力されている場合は、それも削除し、空白の状態にします
お使いの環境が Mac で、 JDK に Java 8 を使用されている場合は "Platform for build scripts"、"Target platform"、"Source Level" にて Java 7 (1.7) を選択してください
(デスクトップ用プロジェクトに使用されている lwjgl が2014年3月29日時点で Java 8 に対応していないため)
上記設定が終わったら、"OK" ボタンをクリックし、設定を反映します
プロジェクトの設定が終わったので、各サブプロジェクトを実行してみます
最初はデスクトップ用アプリケーションを実行します
サブプロジェクト内の desktop をダブルクリックして開きます
開いたプロジェクトを右クリックし、表示されたコンテキスト内から「Tasks > run」と選択し、クリックします
ビルドが実行され、以下のようなウィンドウが表示されます
次に Android 用アプリケーションを起動します
実行するために事前に端末の接続、またはエミュレータの準備を事前に行っていてください
今回は Genymotion を実行環境として使用します
サブプロジェクト内の android をダブルクリックして開きます
開いたプロジェクトを右クリックし、表示されたコンテキスト内から「Tasks > installDebug」と選択し、クリックします
Android 用のタスクは量が多いため、表示できていない場合は「Custom Tasks > Custom Tasks」と選択し、表示された "Execute Custom Tasks" ウィンドウの "Tasks" フィールドに "installDebug" と入力し、 "Execute" ボタンをクリックすることで同様に実行することができます
("Save And Execute" ボタンをクリックすると、実行したタスクが保存されるため、2回目以降は入力の手間が省けます)
ビルドが実行され、接続していた端末、またはエミュレータにアプリケーションがインストールされます
実行すると以下のように表示されるかと思います
次は HTML5 (GWT) 用アプリケーションを起動します
サブプロジェクト内の android をダブルクリックして開きます
開いたプロジェクトを右クリックし、表示されたコンテキスト内から「Tasks > superDev」と選択し、クリックします
(リスト内に "gwtSuperDev" という似た名前のタスクがありますが、こちらでは正常に起動できませんので、間違えないようご注意ください)
次にブラウザを開き、 "http://localhost:9876/" へアクセスします
(制限はないのですが、 Google Chrome ブラウザの使用をおすすめします)
以下のような表示がされるので、"Dev Mode On"、"Dev Mode Off" をブックマークレットとしてブックマークバーに登録ください
次に "http://localhost:8080/gwt/" へアクセスします
最初に以下のようなダイアログが表示されますので、先ほど登録した "Dev Mode On" ブックマークレットを実行します
実行すると、以下のように表示されるので、 "Compile" ボタンをクリックします
コンパイル終了後、以下のように表示されます
(再度先ほどのダイアログが出る場合がありますが、ローディングが終わるまでお待ちください)
最後に iOS 用アプリケーションを起動します
サブプロジェクト内の ios をダブルクリックして開きます
libGDX は Java 用クロスプラットフォームゲーム開発フレームワークで、現在 Windows, Mac, Linux, Android, iOS, BlackBerry, HTML5 をサポートしています
今までは開発には Eclipse を推奨していたこともあり、他の IDE にて開発するのは少し手間が必要でした
今回新たにセットアップツールの刷新が行われ、ビルドツールとして gradle が採用されたことにより、 NetBeans をはじめ、 Eclipse 以外の IDE 、エディタによる開発が簡単に行うことができるようになりました
本エントリでは、この新しいセットアップツールと、 NetBeans での libGDX プロジェクトの作成方法を紹介したいと思います
なお、 libGDX は現在も活発に開発が進められているプロジェクトであるため、閲覧される時点では挙動が異なる可能性があることをご了承ください
今回使用した環境は以下の通りになります
OS: Mac OS X 10.9.2
JDK: 1.7.0_51
Xcode: 5.1
※ Xcode は iOS プラットフォーム利用時のみ必要となります
NetBeans 8.0(Build 201403101706)
Gradle Support Plugin 1.3.0
まず、セットアップツールをダウンロードします
適当な場所に保存後、下記コマンドにてセットアップツール起動します
$ java -jar gdx-setup.jar
(※4月23日最新版セットアップツールに更新)
Name … アプリケーション名
Package … 作成するプロジェクトのパッケージ名
Game class … プラットフォーム共通(core)のメインゲームクラス名
Destination … プロジェクト作成先ディレクトリ
Android SDK … Android SDK のパス(local.properties に設定されます)
"Sub Project"、"Extensions" については必要に応じ、チェックを行ってください
入力後、 "Generate" ボタンをクリックすると、プロジェクトが "Destination" フィールドに指定した場所に生成されます
次に作成したプロジェクトを NetBeans で開きます
「ファイル > プロジェクトを開く」にて、生成されたディレクトリまで移動します
作成したプロジェクト(ルートプロジェクト)は、5つのサブプロジェクトで構成されます
android … Android 用プロジェクト
core … プラットフォーム共通プロジェクト
desktop … デスクトップ (Windows, Mac, Linux) 用プロジェクト
gwt … HTML5(GWT) 用プロジェクト
ios … iOS 用プロジェクト
各サブプロジェクトはダブルクリックすることで開くことができます
まず、ルートプロジェクトの設定を行います
(ルートプロジェクトに行った設定はすべてのサブプロジェクトに反映されます)
ルートプロジェクトを右クリックし、コンテキストメニューから "プロパティ" を選択すると以下のようなウィンドウが表示されます
"Gradle home" の "Inherit" チェックボックスをはずします
また、テキストボックスに値が入力されている場合は、それも削除し、空白の状態にします
お使いの環境が Mac で、 JDK に Java 8 を使用されている場合は "Platform for build scripts"、"Target platform"、"Source Level" にて Java 7 (1.7) を選択してください
(デスクトップ用プロジェクトに使用されている lwjgl が2014年3月29日時点で Java 8 に対応していないため)
上記設定が終わったら、"OK" ボタンをクリックし、設定を反映します
プロジェクトの設定が終わったので、各サブプロジェクトを実行してみます
最初はデスクトップ用アプリケーションを実行します
サブプロジェクト内の desktop をダブルクリックして開きます
開いたプロジェクトを右クリックし、表示されたコンテキスト内から「Tasks > run」と選択し、クリックします
ビルドが実行され、以下のようなウィンドウが表示されます
次に Android 用アプリケーションを起動します
実行するために事前に端末の接続、またはエミュレータの準備を事前に行っていてください
今回は Genymotion を実行環境として使用します
サブプロジェクト内の android をダブルクリックして開きます
開いたプロジェクトを右クリックし、表示されたコンテキスト内から「Tasks > installDebug」と選択し、クリックします
Android 用のタスクは量が多いため、表示できていない場合は「Custom Tasks > Custom Tasks」と選択し、表示された "Execute Custom Tasks" ウィンドウの "Tasks" フィールドに "installDebug" と入力し、 "Execute" ボタンをクリックすることで同様に実行することができます
("Save And Execute" ボタンをクリックすると、実行したタスクが保存されるため、2回目以降は入力の手間が省けます)
実行すると以下のように表示されるかと思います
次は HTML5 (GWT) 用アプリケーションを起動します
サブプロジェクト内の android をダブルクリックして開きます
開いたプロジェクトを右クリックし、表示されたコンテキスト内から「Tasks > superDev」と選択し、クリックします
(リスト内に "gwtSuperDev" という似た名前のタスクがありますが、こちらでは正常に起動できませんので、間違えないようご注意ください)
次にブラウザを開き、 "http://localhost:9876/" へアクセスします
(制限はないのですが、 Google Chrome ブラウザの使用をおすすめします)
以下のような表示がされるので、"Dev Mode On"、"Dev Mode Off" をブックマークレットとしてブックマークバーに登録ください
最初に以下のようなダイアログが表示されますので、先ほど登録した "Dev Mode On" ブックマークレットを実行します
(再度先ほどのダイアログが出る場合がありますが、ローディングが終わるまでお待ちください)
サブプロジェクト内の ios をダブルクリックして開きます
開いたプロジェクトを右クリックし、表示されたコンテキスト内から「Build」を選択し、クリックします
ビルド終了後、再度プロジェクトを右クリックし、「Tasks > launchiPhoneSimulator」と選択し、クリックします
(今回は iPhone シミュレータでの実行を行いますが、 iPad シミュレータ、および実機での実行も可能です)
実行後、以下のように表示されます
(初回実行時はシミュレータ起動までかなり時間が掛かりますのでご注意ください)
以上が、サポートする各プラットフォームでの実行となります
新しいセットアップツールと gradle を使用することで、簡単に NetBeans 上にプロジェクト構築が出来ることをご理解頂けたかと思います
実際のゲーム開発は、サブプロジェクトにあった core (プラットフォーム共通)プロジェクトを中心に実装していくことになります
libGDX を使用したゲーム開発の詳細については、また別のエントリにて紹介できればと思います
2014年1月19日日曜日
NetBeans と RoboVM で iOS アプリ開発(Gradle 編)
前回に引き続き、 NetBeans と RoboVM で iOS アプリ開発を行う方法についてです
今回は Gradle を使用した開発を紹介します
Gradle プラグインは公式では提供されていませんので、拙作のプラグインを利用します
使用する環境は以下の通りです
OS: Mac OS X 10.9.1
Xcode: 5.0.2
NetBeans: 7.4 (Build 201310111528)
まず、使用する環境に Gradle をインストールします
以下の例では、 Homebrew を使用してインストールを行っています
次に NetBeans に Gradle Support プラグインをインストールします
拙作のサンプルアプリケーションのリポジトリを clone します
このサンプルアプリケーションは、公式のサンプルアプリケーションを Gradle 対応に変更したプロジェクトになります
clone 後、 Gradle wrapper を利用するため、プロジェクトのプロパティを開き、以下のように「Gradle home」のフィールドを空白に設定します
設定後、実際に動かしてみます
Gradle プラグインのタスクは下記の通りになっています
今回は Gradle を使用した開発を紹介します
Gradle プラグインは公式では提供されていませんので、拙作のプラグインを利用します
使用する環境は以下の通りです
OS: Mac OS X 10.9.1
Xcode: 5.0.2
NetBeans: 7.4 (Build 201310111528)
まず、使用する環境に Gradle をインストールします
以下の例では、 Homebrew を使用してインストールを行っています
$ brew install gradle
次に NetBeans に Gradle Support プラグインをインストールします
拙作のサンプルアプリケーションのリポジトリを clone します
このサンプルアプリケーションは、公式のサンプルアプリケーションを Gradle 対応に変更したプロジェクトになります
clone 後、 Gradle wrapper を利用するため、プロジェクトのプロパティを開き、以下のように「Gradle home」のフィールドを空白に設定します
設定後、実際に動かしてみます
Gradle プラグインのタスクは下記の通りになっています
- launchIPhoneSimulator … iPhone シミュレータにて実行
- launchIPadSimulator … iPad シミュレータにて実行
- launchIOSDevice … 実機にて実行(要プロビジョニング済)
- createIPA … ipa ファイル生成
今回は Maven プラグインのときと同様に iPhone シミュレータにて実行します
プロジェクトのコンテキストメニューから「Tasks」>「launchIPhoneSimulator」を実行します
初回実行時はビルドに時間が掛かりますが、完了後以下のように iPhone シミュレータが起動します
Maven 、 Gradle を利用した RoboVM による iOS アプリケーション開発ということで前回、今回と紹介してきました
今後、 RoboVM についてより詳しい紹介を行えたらと思います
2014年1月18日土曜日
NetBeans と RoboVM で iOS アプリ開発(Maven 編)
NetBeans と RoboVM で iOS アプリ開発を行う方法について紹介します
まず、 RoboVM についてですが、 Java にて iOS 用ネイティブアプリケーションを作成することができるコンパイラ、およびライブラリとなります
(詳細は公式ページ等を参照ください)
RoboVM コミュニティでは上述のコンパイラ、ライブラリに加え、 Maven 用プラグイン、 Eclipse 用プラグインが配布されていますが、残念ながらNetBeans 用プラグインはありません
NetBeans にて RoboVM を利用するにはいくつか方法がありますが、 Maven プラグインを使用する方法が最も簡単かと思います
Maven プラグインの使い方を、サンプルアプリケーションを使って解説します
使用する環境は以下の通りです
OS: Mac OS X 10.9.1
Xcode: 5.0.2
NetBeans: 7.4 (Build 201310111528)
まず、 github にある RoboVM サンプルアプリケーションのリポジトリを cloneします
clone 後、最新の RoboVM 、 Maven プラグインを利用するために pom.xml を編集します
2014年1月18日現在、最新の RoboVM のバージョンは "0.0.8"、 Maven プラグインのバージョンは "0.0.8.1"になるので、以下の2カ所を修正します
設定後、実際に動かしてみます
Maven プラグインのゴールは下記の通りになっています
まず、 RoboVM についてですが、 Java にて iOS 用ネイティブアプリケーションを作成することができるコンパイラ、およびライブラリとなります
(詳細は公式ページ等を参照ください)
RoboVM コミュニティでは上述のコンパイラ、ライブラリに加え、 Maven 用プラグイン、 Eclipse 用プラグインが配布されていますが、残念ながらNetBeans 用プラグインはありません
NetBeans にて RoboVM を利用するにはいくつか方法がありますが、 Maven プラグインを使用する方法が最も簡単かと思います
Maven プラグインの使い方を、サンプルアプリケーションを使って解説します
使用する環境は以下の通りです
OS: Mac OS X 10.9.1
Xcode: 5.0.2
NetBeans: 7.4 (Build 201310111528)
まず、 github にある RoboVM サンプルアプリケーションのリポジトリを cloneします
clone 後、最新の RoboVM 、 Maven プラグインを利用するために pom.xml を編集します
2014年1月18日現在、最新の RoboVM のバージョンは "0.0.8"、 Maven プラグインのバージョンは "0.0.8.1"になるので、以下の2カ所を修正します
<plugin>
<groupId>org.robovm</groupId>
<artifactId>robovm-maven-plugin</artifactId>
<version>0.0.8.1</version>
<configuration>
<config>
<mainClass>org.robovm.sample.ios.RoboVMSampleIOSApp</mainClass>
<os>ios</os>
<arch>x86</arch>
</config>
</configuration>
</plugin>
<groupId>org.robovm</groupId>
<artifactId>robovm-maven-plugin</artifactId>
<version>0.0.8.1</version>
<configuration>
<config>
<mainClass>org.robovm.sample.ios.RoboVMSampleIOSApp</mainClass>
<os>ios</os>
<arch>x86</arch>
</config>
</configuration>
</plugin>
<dependency>
<groupId>org.robovm</groupId>
<artifactId>robovm-rt</artifactId>
<version>0.0.8</version>
</dependency>
<dependency>
<groupId>org.robovm</groupId>
<artifactId>robovm-cocoatouch</artifactId>
<version>0.0.8</version>
</dependency>
<groupId>org.robovm</groupId>
<artifactId>robovm-rt</artifactId>
<version>0.0.8</version>
</dependency>
<dependency>
<groupId>org.robovm</groupId>
<artifactId>robovm-cocoatouch</artifactId>
<version>0.0.8</version>
</dependency>
設定後、実際に動かしてみます
Maven プラグインのゴールは下記の通りになっています
- robovm:iphone-sim … iPhone シミュレータにて実行
- robovm:ipad-sim … iPad シミュレータにて実行
- robovm:ios-device … 実機にて実行(要プロビジョニング済)
- robovm:create-ipa … ipa ファイル生成
コンテキストメニューより「カスタム」>「ゴール...」を選択します
表示されたウィンドウにて、"robovm:iphone-sim" を入力し、「OK」ボタンをクリックします
初回実行時はビルドに時間が掛かりますが、完了後以下のように iPhone シミュレータが起動します
RoboVM はまだ開発途上のプロダクトですが、ゲーム開発などパフォーマンスが要求されるような場面でも十分に使用できるレベルまでになっていると思います
Java + RoboVM + NetBeans にて iOS アプリケーション開発に挑戦してみてはいかがでしょうか
2013年3月16日土曜日
NetBeans IDE 7.3 リリース
2012年3月14日水曜日
NetBeans Scala サポート(NetBeans 7.1 & Scala 2.9.x)
NetBeans Scala サポートに関して、最近動きがありましたので、ご紹介したいと思います
まず、ソースリポジトリは https://github.com/dcaoyuan/nbscala へ一本化されるようです
なお、バイナリ配布は以前と同様、 http://sourceforge.net/projects/erlybird にて行うとのことです
2012年3月14日現在、スナップショットビルドとして "nbscala-7.1v2.9.x-0.1" が入手可能となっています
上記スナップショットビルドをダウンロードし、含まれる nbm ファイルをインストールすることでプラグインを使用することができます
以前の投稿と比較すると、インストールするパッケージが大幅に増えているのがわかるかとおもいます
動作環境は以下の通りです(README.md より)
* Java 1.6 (Java 1.7 not supported yet)
* Maven 2.x/3.x
* NetBeans 7.1
Java 7 は未サポートとのことなので、ご注意ください
また、 NetBeans 7.1 とありますが、現状 7.1.1 でも動作に問題はないようです
正直、現状の完成度としては Scala IDE for Eclipse や IntelliJ IDEA の Scala プラグインには及びませんが、開発が再開したということで、今後より機能が充実していくよう、フィードバックできたらと思います
個人的に、 sbt 対応してくれたらなと願っています
まず、ソースリポジトリは https://github.com/dcaoyuan/nbscala へ一本化されるようです
なお、バイナリ配布は以前と同様、 http://sourceforge.net/projects/erlybird にて行うとのことです
2012年3月14日現在、スナップショットビルドとして "nbscala-7.1v2.9.x-0.1" が入手可能となっています
上記スナップショットビルドをダウンロードし、含まれる nbm ファイルをインストールすることでプラグインを使用することができます
以前の投稿と比較すると、インストールするパッケージが大幅に増えているのがわかるかとおもいます
動作環境は以下の通りです(README.md より)
* Java 1.6 (Java 1.7 not supported yet)
* Maven 2.x/3.x
* NetBeans 7.1
Java 7 は未サポートとのことなので、ご注意ください
また、 NetBeans 7.1 とありますが、現状 7.1.1 でも動作に問題はないようです
正直、現状の完成度としては Scala IDE for Eclipse や IntelliJ IDEA の Scala プラグインには及びませんが、開発が再開したということで、今後より機能が充実していくよう、フィードバックできたらと思います
個人的に、 sbt 対応してくれたらなと願っています
2012年3月11日日曜日
Play framework 2.0 のビルド手順
何回やっても覚えられないので、個人的なメモとして残します
公式のドキュメントはコチラです
まず、新規にソースを取得して、ビルドする方法は以下の通りです
既存のソースを更新、ビルドする手順は以下の通りです
公式ドキュメントでは、"build" 実行後は sbt のコンソールで "build-repository" を実行するよう書いてありますが、ひと通りの手順を書いています
公式のドキュメントはコチラです
まず、新規にソースを取得して、ビルドする方法は以下の通りです
$ git clone https://github.com/playframework/Play20.git
$ cd Play20/framework
$ ./build
> complile
> build-repository
> publish-local
$ cd Play20/framework
$ ./build
> complile
> build-repository
> publish-local
既存のソースを更新、ビルドする手順は以下の通りです
$ git pull
$ cd ./framework
$ ./build
> compile
> build-repository
> publish-local
$ cd ./framework
$ ./build
> compile
> build-repository
> publish-local
公式ドキュメントでは、"build" 実行後は sbt のコンソールで "build-repository" を実行するよう書いてありますが、ひと通りの手順を書いています
ラベル:
Java,
Play20,
Playframework,
Scala
2012年3月3日土曜日
NetBeans IDE 7.1.1 リリース
NetBeans IDE 7.1.1 がリリースされました
位置づけとしては、パッチ1ということで、大きな変更はなく、下記のような対応がなされたようです
・GlassFish 3.1.2 のサポート
・最近のパッチの統合
・パフォーマンスの改善
今回のパッチにて改修されたバグの一覧はコチラになります
7.1 ご利用の方は、再インストールすることなく、そのままアップグレードできます
そして、恒例のスプラッシュです
7.1.1 に関する情報のページにて、次回は NetBeans 7.1 Patch 2 とあったので、(2012年3月3日現在) 記載されているスケジュール通り 7.1.2 が 4月下旬にリリースされる予定かと思います
不具合等、何かお気づきの点などありましたら、 ML Twitter 等へご連絡頂ければと思います
位置づけとしては、パッチ1ということで、大きな変更はなく、下記のような対応がなされたようです
・GlassFish 3.1.2 のサポート
・最近のパッチの統合
・パフォーマンスの改善
今回のパッチにて改修されたバグの一覧はコチラになります
7.1 ご利用の方は、再インストールすることなく、そのままアップグレードできます
そして、恒例のスプラッシュです
7.1.1 に関する情報のページにて、次回は NetBeans 7.1 Patch 2 とあったので、(2012年3月3日現在) 記載されているスケジュール通り 7.1.2 が 4月下旬にリリースされる予定かと思います
不具合等、何かお気づきの点などありましたら、 ML Twitter 等へご連絡頂ければと思います
2012年1月7日土曜日
NetBeans IDE 7.1 リリース
NetBeans IDE 7.1 がリリースされました
ダウンロードはコチラからできるようになっております
7.1 にて追加された新機能に関しては、コチラを参照ください
また、 Mac 用ニーモニック除去バージョンの7.1用日本語パックはコチラからダウンロードできます
恒例のスプラッシュです
今回、個人的な目玉新機能はやはり Git サポートです
github でのアウトプットも定着した昨今では、やはりありがたい新機能です
近日中にこの機能について紹介できたらと思います
これ以外にも JavaFX 2.0 サポート、 CSS3 サポート、 PHP 開発者には嬉しい Smarty サポートなどの機能追加も行われています
不具合等、何かお気づきの点などありましたら、 ML 等へご連絡頂ければと思います
ダウンロードはコチラからできるようになっております
7.1 にて追加された新機能に関しては、コチラを参照ください
また、 Mac 用ニーモニック除去バージョンの7.1用日本語パックはコチラからダウンロードできます
恒例のスプラッシュです
今回、個人的な目玉新機能はやはり Git サポートです
github でのアウトプットも定着した昨今では、やはりありがたい新機能です
近日中にこの機能について紹介できたらと思います
これ以外にも JavaFX 2.0 サポート、 CSS3 サポート、 PHP 開発者には嬉しい Smarty サポートなどの機能追加も行われています
不具合等、何かお気づきの点などありましたら、 ML 等へご連絡頂ければと思います
2012年1月1日日曜日
2012年やりたいこと
昨年後半はいろいろと個人的にバタバタしたため、ブログの更新もほとんどできていませんでした
(NetBeans 7.1 も RC2 まで現在リリースされていますが、ご紹介できていない状態ですし…)
今年は少し余裕ができるのではという感じなので、ブログも含め、以下のことを中心に学習、アウトプットをしていきたいと思っています
(宣言的に書かないと、そのままダラダラと流されそうなので…)
・ NetBeans の機能紹介
・ OrientDB を中心とする GraphDB 関連について
・ ネットワークなど、過去見送ってきた基礎知識に関しての学習記録
・ NetBeans 用プラグインの開発について
・ Scala や Python 、 PHP などについて
とにかく、継続してアウトプットすることを頑張りたいと思います
まずは、今月上旬には 7.1 が正式にリリースされる予定なので、そちらについて紹介できればと思います
(7.1 以降のリリーススケジュールについては、 2012年1月1日現在では不明ですが…)
今年も本ブログを何卒、宜しくお願い致します
(NetBeans 7.1 も RC2 まで現在リリースされていますが、ご紹介できていない状態ですし…)
今年は少し余裕ができるのではという感じなので、ブログも含め、以下のことを中心に学習、アウトプットをしていきたいと思っています
(宣言的に書かないと、そのままダラダラと流されそうなので…)
・ NetBeans の機能紹介
・ OrientDB を中心とする GraphDB 関連について
・ ネットワークなど、過去見送ってきた基礎知識に関しての学習記録
・ NetBeans 用プラグインの開発について
・ Scala や Python 、 PHP などについて
とにかく、継続してアウトプットすることを頑張りたいと思います
まずは、今月上旬には 7.1 が正式にリリースされる予定なので、そちらについて紹介できればと思います
(7.1 以降のリリーススケジュールについては、 2012年1月1日現在では不明ですが…)
今年も本ブログを何卒、宜しくお願い致します
2011年10月4日火曜日
NetBeans IDE 7.1 Beta リリース
2011年8月3日水曜日
NetBeans IDE 7.0.1 リリース
NetBeans IDE 7.0.1 がリリースされました
ダウンロードはコチラからできるようになっております
恒例のスプラッシュです
今回は、先日リリースされた Java SE 7 の完全対応がメインとなっています
その他には、同梱されている Glassfish のバージョンがあがっていること、いくつかのバグフィックスがなされていることなどがあります
現在、7.0 をお使いの方は、自動アップデートにて 7.0.1 相当になりますので、再インストールすることなく、アップグレードできます
何かお気づきの点などありましたら、 ML 等へご連絡頂ければと思います
ダウンロードはコチラからできるようになっております
恒例のスプラッシュです
今回は、先日リリースされた Java SE 7 の完全対応がメインとなっています
その他には、同梱されている Glassfish のバージョンがあがっていること、いくつかのバグフィックスがなされていることなどがあります
現在、7.0 をお使いの方は、自動アップデートにて 7.0.1 相当になりますので、再インストールすることなく、アップグレードできます
何かお気づきの点などありましたら、 ML 等へご連絡頂ければと思います
2011年4月21日木曜日
NetBeans IDE 7.0 リリース
当初の予定よりも遅くなりましたが、 NetBeans IDE 7.0 がリリースされました
ダウンロードはコチラからできるようになっております
恒例のスプラッシュです
7.0 によって追加、または改善された主なポイントは以下のようになっています
・シンタックス、ヒントなどのエディタ拡張を含んだ、JDK 7 サポート
・WebLogic Application Server 、 GlassFish 3.1 サポートの改修
・Oracle Database サポートの改善
・HTML5 編集サポート
・Maven 3 サポートと IDE への同梱
・CDI、REST サービス、Java Persistence 、Bean Validation のサポート改善
・PHPリネームリファクタリング対応
・外部での変更検出の改善
・C/C++ サポートの更新
その他の機能については、 コチラを参照頂ければと思います
また、以前にも書いていますが、 7.0 より JUnit が同梱配布されなくなりましたので、 NetBeans 本体インストール後別途プラグインとしてのインストールが必要となります
手順は簡単ですので、詳細は以前のエントリを参考にして頂ければと思います
次回のリリースは、4月21日時点でのロードマップ上ではバージョン番号が7.0.1、リリース予定日が2011年の7月になっています
また、主要な実装機能もコチラにて掲載が始まっています
(バージョン番号からもわかる通り、メインはバグフィックスと JDK7 の対応強化となり、新機能追加の予定はないようです)
何かお気づきの点などありましたら、 ML 等へご連絡頂ければと思います
ダウンロードはコチラからできるようになっております
恒例のスプラッシュです
7.0 によって追加、または改善された主なポイントは以下のようになっています
・シンタックス、ヒントなどのエディタ拡張を含んだ、JDK 7 サポート
・WebLogic Application Server 、 GlassFish 3.1 サポートの改修
・Oracle Database サポートの改善
・HTML5 編集サポート
・Maven 3 サポートと IDE への同梱
・CDI、REST サービス、Java Persistence 、Bean Validation のサポート改善
・PHPリネームリファクタリング対応
・外部での変更検出の改善
・C/C++ サポートの更新
その他の機能については、 コチラを参照頂ければと思います
また、以前にも書いていますが、 7.0 より JUnit が同梱配布されなくなりましたので、 NetBeans 本体インストール後別途プラグインとしてのインストールが必要となります
手順は簡単ですので、詳細は以前のエントリを参考にして頂ければと思います
次回のリリースは、4月21日時点でのロードマップ上ではバージョン番号が7.0.1、リリース予定日が2011年の7月になっています
また、主要な実装機能もコチラにて掲載が始まっています
(バージョン番号からもわかる通り、メインはバグフィックスと JDK7 の対応強化となり、新機能追加の予定はないようです)
何かお気づきの点などありましたら、 ML 等へご連絡頂ければと思います
2011年4月12日火曜日
オープンソース NoSQL データベース OrientDB を使ってみる #3
前回の投稿から半年以上過ぎましたが、OrientDB の紹介3回目です
前の2回は以下の通りです
・オープンソース NoSQL データベース OrientDB を使ってみる #1
・オープンソース NoSQL データベース OrientDB を使ってみる #2
データ間の関連(リレーション)について紹介します
データ間の関連とは2つの異なるレコードを関連付けることで、データの透過的な参照や複雑なデータ構造の表現が可能となります
OrientDB では参照型( Referenced relationships )と組込型( Embedded relationships )という2種類の関連付けをサポートしています
参照型は、フィールドに対象レコードのレコードID(全レコードにてユニークとなるID)を持つことでデータ間の関連付けを行います
そのため、関連付ける各レコードは独立したレコードとして各々参照できる必要があります
対して組込型は、フィールドに直接レコードをそのものを設定するもので、組み込まれたレコードを独立して参照することはできません
また、参照、組込型として関連付けられるデータは 1:1 だけでなく、各々 List 、 Set 、 Map という 1:N 、または N:M の関係を作ることができます
(今回はこの部分の説明の詳細は省略させて頂きます)
それでは実際にデータの登録を行い、どのような構造のレコードが生成されるかを説明したいと思います
今回使用した環境は下記の通りです
・Mac OS X 10.6.7
・Java(TM) SE Runtime Environment (build 1.6.0_24-b07-334-10M3326)
・OrientDB 0.9.25
・NetBeans 7.0 RC2
以降は上記環境にて、サーバの起動、専用クライアント(コンソール)の接続まで完了している前提で進めます
サーバやクライアントの起動方法、クライアントを使用したレコード操作などについては、前々回のエントリを参照ください
また、文中で使われるレコードIDは環境により異なりますので、お使いの環境にあわせて読み替えてください
まず、テストデータを登録するため、下記クエリを実行して Person クラスと Group クラスを作成します
( ">" はプロンプトとなりますので、コピーして実行する際にはご注意ください)
次に参照型の関連フィールドを持つレコードを作成します
関連付けるレコードは先ほど登録した Group クラスのレコードです
下記クエリを実行して、 レコードを登録します
(そのため、事前に関連づけるレコードIDを知っておく必要があります)
上記の場合、 "group" というフィールドにレコードIDを設定しており、これで Person クラスと Group クラスの各レコードが関連付けられることとなります
下記コマンドで Person クラスに6レコード登録されたことが確認できます
以下は select 文にて group フィールドに関連付けられた、 Group クラスの name フィールドを参照しています
(where 句にある "@rid" はレコードIDを意味するレコード属性になります)
(import 文、パッケージ名は省略しますのでご注意下さい)
参照型の関連付けを行う方法はクエリを使用したケースと同様にフィールドにレコードIDを設定します
Java API にてレコードID( Java API では ORID クラスにて表現されています)を取得するには、ODocument クラスの getIdentity() メソッドを使用します
なお、新規レコードの場合、事前に save() メソッドを呼び出してデータベースに登録が完了していないとレコードIDは取得できませんので、ご注意ください
レコードを取得する場合は下記のようになります
次に組込型の関連付けですが、現在(2011年4月12日時点)のバージョンではクエリによる組込型のレコードの登録、更新(参照は可能です)は対応しておらず、 Java API でのみとなります
Java API を利用する場合の登録は以下のようになります
参照型と大きく異なる点は作成した Weapon クラスの save()メソッドを呼び出していない点、取得した Person クラスの "weapon" フィールドに設定する際、第3引数に "OType.EMBEDDED" を設定している点です
レコードの参照方法に関しては、組込型も参照型も差異はありません
組込まれたレコードのフィールドも同様の形式で参照可能です
次回は、 OrientDB のグラフデータベースとしての機能を紹介したいと思います
(次はあまり期間をあけないようしたいと思います…)
前の2回は以下の通りです
・オープンソース NoSQL データベース OrientDB を使ってみる #1
・オープンソース NoSQL データベース OrientDB を使ってみる #2
データ間の関連(リレーション)について紹介します
データ間の関連とは2つの異なるレコードを関連付けることで、データの透過的な参照や複雑なデータ構造の表現が可能となります
OrientDB では参照型( Referenced relationships )と組込型( Embedded relationships )という2種類の関連付けをサポートしています
参照型は、フィールドに対象レコードのレコードID(全レコードにてユニークとなるID)を持つことでデータ間の関連付けを行います
そのため、関連付ける各レコードは独立したレコードとして各々参照できる必要があります
対して組込型は、フィールドに直接レコードをそのものを設定するもので、組み込まれたレコードを独立して参照することはできません
また、参照、組込型として関連付けられるデータは 1:1 だけでなく、各々 List 、 Set 、 Map という 1:N 、または N:M の関係を作ることができます
(今回はこの部分の説明の詳細は省略させて頂きます)
それでは実際にデータの登録を行い、どのような構造のレコードが生成されるかを説明したいと思います
今回使用した環境は下記の通りです
・Mac OS X 10.6.7
・Java(TM) SE Runtime Environment (build 1.6.0_24-b07-334-10M3326)
・OrientDB 0.9.25
・NetBeans 7.0 RC2
以降は上記環境にて、サーバの起動、専用クライアント(コンソール)の接続まで完了している前提で進めます
サーバやクライアントの起動方法、クライアントを使用したレコード操作などについては、前々回のエントリを参照ください
また、文中で使われるレコードIDは環境により異なりますので、お使いの環境にあわせて読み替えてください
まず、テストデータを登録するため、下記クエリを実行して Person クラスと Group クラスを作成します
( ">" はプロンプトとなりますので、コピーして実行する際にはご注意ください)
> create class Person > create class Group次に Group クラス のデータを登録します
> insert into Group (name) values ('Rebel Alliance')
> insert into Group (name) values ('Galactic Empire')下記コマンドで Group クラスに2レコード登録されたことが確認できます> browse class Group ---+--------+-------------------- #| REC ID |NAME ---+--------+-------------------- 0| 25:0|Rebel Alliance 1| 25:1|Galactic Empire ---+--------+--------------------"REC ID" は先の説明のレコードIDを指し、 "Rebel Alliance" は "25:0" 、 "Galactic Empire" は "25:1" のレコードIDを持つこととなります
次に参照型の関連フィールドを持つレコードを作成します
関連付けるレコードは先ほど登録した Group クラスのレコードです
下記クエリを実行して、 レコードを登録します
> insert into Person (name, surname, group) values ('Luke', 'Skywalker', 25:0)
> insert into Person (name, surname, group) values ('Han', 'Solo', 25:0)
> insert into Person (name, group) values ('Chewbacca', 25:0)
> insert into Person (name, surname, group) values ('Leia', 'Organa', 25:0)
> insert into Person (name, group) values ('Darth Sidious', 25:1)
> insert into Person (name, group) values ('Darth Vader', 25:1)レコードに関連付けを設定する場合は、フィールドに対象のレコードIDを直接記述します(そのため、事前に関連づけるレコードIDを知っておく必要があります)
上記の場合、 "group" というフィールドにレコードIDを設定しており、これで Person クラスと Group クラスの各レコードが関連付けられることとなります
下記コマンドで Person クラスに6レコード登録されたことが確認できます
> browse class Person ---+--------+--------------------+--------------------+-------------------- #| REC ID |NAME |SURNAME |GROUP ---+--------+--------------------+--------------------+-------------------- 0| 24:0|Luke |Skywalker |25:0 1| 24:1|Han |Solo |25:0 2| 24:2|Chewbacca |null |25:0 3| 24:3|Leia |Organa |25:0 4| 24:4|Darth Sidious |null |25:1 5| 24:5|Darth Vader |null |25:1 ---+--------+--------------------+--------------------+--------------------関連付けられたレコードに対しては、「フィールド名.対象レコードのフィールド名」の形式で指定することで値を参照することができます
以下は select 文にて group フィールドに関連付けられた、 Group クラスの name フィールドを参照しています
(where 句にある "@rid" はレコードIDを意味するレコード属性になります)
> select name, surname, group.name from Person where @rid = 24:0 ---+--------+--------------------+--------------------+-------------------- #| REC ID |NAME |SURNAME |GROUP ---+--------+--------------------+--------------------+-------------------- 0| -1:-1|Luke |Skywalker |Rebel Alliance ---+--------+--------------------+--------------------+--------------------また、他のフィールドと同様に where 句の検索条件としても使用できます
> select from Person where group.name = 'Rebel Alliance' ---+--------+--------------------+--------------------+-------------------- #| REC ID |NAME |SURNAME |GROUP ---+--------+--------------------+--------------------+-------------------- 0| 24:0|Luke |Skywalker |25:0 1| 24:1|Han |Solo |25:0 2| 24:2|Chewbacca |null |25:0 3| 24:3|Leia |Organa |25:0 ---+--------+--------------------+--------------------+--------------------Java API を利用する場合、参照型レコードの登録は以下のようになります
(import 文、パッケージ名は省略しますのでご注意下さい)
public class Main {
public static void main(String[] args) {
// admin ユーザでサーバーの demo データベースに接続します
ODatabaseDocumentTx database = new ODatabaseDocumentTx("remote:localhost/demo").open("admin", "admin");
// 新規レコード(Group)の作成
ODocument jediOrder = new ODocument(database, "Group");
jediOrder.field("name", "Jedi Order");
jediOrder.save();
// ユニークIDを取得
ORID jediOrderORID = jediOrder.getIdentity();
// 新規レコード(Rank)の作成
ODocument master = new ODocument(database, "Rank");
master.field("name", "Jedi Master");
master.save();
// ユニークIDを取得
ORID masterOrderORID = master.getIdentity();
ODocument knight = new ODocument(database, "Rank");
knight.field("name", "Jedi Knight");
knight.save();
// ユニークIDを取得
ORID knightOrderORID = knight.getIdentity();
ODocument padawan = new ODocument(database, "Rank");
padawan.field("name", "Padawan");
padawan.save();
// ユニークIDを取得
ORID padawanOrderORID = padawan.getIdentity();
// 新規レコード(Person)の作成
ODocument yoda = new ODocument(database, "Person");
yoda.field("name", "Yoda");
yoda.field("group", jediOrderORID);
yoda.field("rank", masterOrderORID);
yoda.save();
ODocument obiwan = new ODocument(database, "Person");
obiwan.field("name", "Obi-Wan");
obiwan.field("surname", "Kenobi");
obiwan.field("group", jediOrderORID);
obiwan.field("rank", knightOrderORID);
obiwan.save();
ODocument ahsoka = new ODocument(database, "Person");
ahsoka.field("name", "Ahsoka");
ahsoka.field("surname", "Tano");
ahsoka.field("group", jediOrderORID);
ahsoka.field("rank", padawanOrderORID);
ahsoka.save();
// 接続の解除
database.close();
}
}上記では Group クラスに1レコード登録、Rank クラスの新規作成と3レコード登録、 Person クラスに3レコード登録しています参照型の関連付けを行う方法はクエリを使用したケースと同様にフィールドにレコードIDを設定します
Java API にてレコードID( Java API では ORID クラスにて表現されています)を取得するには、ODocument クラスの getIdentity() メソッドを使用します
なお、新規レコードの場合、事前に save() メソッドを呼び出してデータベースに登録が完了していないとレコードIDは取得できませんので、ご注意ください
レコードを取得する場合は下記のようになります
public class Main {
public static void main(String[] args) {
// admin ユーザでサーバーの demo データベースに接続します
ODatabaseDocumentTx database = new ODatabaseDocumentTx("remote:localhost/demo").open("admin", "admin");
System.out.println("-----レコードIDを指定してレコードを取得-----");
// RID=24:6(Yoda) を取得
ODocument yoda = new ODocument(database, new ORecordId(24, 6));
// group フィールドを取得
ODocument yodaGroup = yoda.field("group");
Object yodaGroupName = yodaGroup == null ? "" : yodaGroup.field("name");
// rank 1フィールドを取得
ODocument yodaRank = yoda.field("rank");
Object yodaRankName = yodaRank == null ? "" : yodaRank.field("name");
// 取得レコードの出力
System.out.println("name : " + yoda.field("name"));
System.out.println("surname: " + yoda.field("surname"));
System.out.println("group : " + yodaGroupName);
System.out.println("rank : " + yodaRankName);
System.out.println();
System.out.println("-----クエリを実行してレコードを取得-----");
// SELECT 文を作成する
String selectQuery = "select from Person where group.name = 'Jedi Order' ";
// クエリを実行する
List<ODocument> people = database.query(new OSQLSynchQuery<ODocument>(selectQuery));
for (ODocument person : people) {
// group フィールドを取得
ODocument group = person.field("group");
Object groupName = group == null ? "" : group.field("name");
// rank 1フィールドを取得
ODocument rank = person.field("rank");
Object rankName = rank == null ? "" : rank.field("name");
// 取得レコードの出力
System.out.println("name : " + person.field("name"));
System.out.println("surname: " + person.field("surname"));
System.out.println("group : " + groupName);
System.out.println("rank : " + rankName);
System.out.println();
}
// 接続の解除
database.close();
}
}上記を実行すると、以下のように値が取得できます-----レコードIDを指定してレコードを取得----- name : Yoda surname: null group : Jedi Order rank : Jedi Master -----クエリを実行してレコードを取得----- name : Yoda surname: null group : Jedi Order rank : Jedi Master name : Obi-Wan surname: Kenobi group : Jedi Order rank : Jedi Knight name : Ahsoka surname: Tano group : Jedi Order rank : Padawan
次に組込型の関連付けですが、現在(2011年4月12日時点)のバージョンではクエリによる組込型のレコードの登録、更新(参照は可能です)は対応しておらず、 Java API でのみとなります
Java API を利用する場合の登録は以下のようになります
public class Main {
public static void main(String[] args) {
// admin ユーザでサーバーの demo データベースに接続します
ODatabaseDocumentTx database = new ODatabaseDocumentTx("remote:localhost/demo").open("admin", "admin");
// 新規レコードを作成
ODocument lightsaber = new ODocument(database, "Weapon");
lightsaber.field("name", "Lightsaber");
lightsaber.field("type", "sword");
// RID=24:0(Luke) を取得
ODocument luke = new ODocument(database, new ORecordId(24, 0));
luke.field("weapon", lightsaber, OType.EMBEDDED);
luke.save();
database.close();
}
}上記では Weapon クラスのレコードを1件作成し、 Person クラスのレコードの "weapon" フィールドに設定しています参照型と大きく異なる点は作成した Weapon クラスの save()メソッドを呼び出していない点、取得した Person クラスの "weapon" フィールドに設定する際、第3引数に "OType.EMBEDDED" を設定している点です
レコードの参照方法に関しては、組込型も参照型も差異はありません
> select from Person where @rid = 24:0 ---+--------+--------------------+--------------------+--------------------+-------------------- #| REC ID |NAME |WEAPON |SURNAME |GROUP ---+--------+--------------------+--------------------+--------------------+-------------------- 0| 24:0|Luke |-1:-1 |Skywalker |25:0 ---+--------+--------------------+--------------------+--------------------+--------------------参照型のフィールド "group" にはレコードIDの値("25:0")が設定されているのに対し、組込型は直接レコードが設定されているため、レコードIDは設定されていません
組込まれたレコードのフィールドも同様の形式で参照可能です
> select name, surname, weapon.name, weapon.type from Person where @rid = 24:0 ---+--------+--------------------+--------------------+--------------------+-------------------- #| REC ID |NAME |WEAPON |SURNAME |WEAPON2 ---+--------+--------------------+--------------------+--------------------+-------------------- 0| -1:-1|Luke |Lightsaber |Skywalker |sword ---+--------+--------------------+--------------------+--------------------+--------------------以上が OrientDB の関連付けの機能の紹介と利用方法になります
次回は、 OrientDB のグラフデータベースとしての機能を紹介したいと思います
(次はあまり期間をあけないようしたいと思います…)
2011年4月9日土曜日
NetBeans IDE 7.0 RC 2 リリース
NetBeans IDE 7.0 RC2 がリリースされました
ダウンロードはコチラからできるようになっております
恒例のスプラッシュです
リリース予定が延びて、(4月9日現時点では)4月中予定というざっくりとした感じになったみたいです
何かお気づきの点などありましたら、 ML 等へご連絡頂ければと思います
ダウンロードはコチラからできるようになっております
恒例のスプラッシュです
リリース予定が延びて、(4月9日現時点では)4月中予定というざっくりとした感じになったみたいです
何かお気づきの点などありましたら、 ML 等へご連絡頂ければと思います
2011年3月30日水曜日
NetBeans IDE 7.0 RC 1 リリース
NetBeans IDE 7.0 RC1 がリリースされました
ダウンロードはコチラからできるようになっております
恒例のスプラッシュです
既に3月も終わろうとしていますが、本日(2011年3月30日)時点では4月4日の正式リリース予定に変更はないようです
何かお気づきの点などありましたら、 ML 等へご連絡頂ければと思います
ダウンロードはコチラからできるようになっております
恒例のスプラッシュです
既に3月も終わろうとしていますが、本日(2011年3月30日)時点では4月4日の正式リリース予定に変更はないようです
何かお気づきの点などありましたら、 ML 等へご連絡頂ければと思います
登録:
投稿 (Atom)




































