• 検索結果がありません。

Uruma による、簡単リッチアプリケーション開発

N/A
N/A
Protected

Academic year: 2021

シェア "Uruma による、簡単リッチアプリケーション開発"

Copied!
29
0
0

読み込み中.... (全文を見る)

全文

(1)

Seasar Conference

Seasar Conference

2007 Autumn

2007 Autumn

2007 Autumn

2007 Autumn

S2JFace

S2JFace による

による

Uruma

う る ま

S2JFace

S2JFace による

による

簡単!

簡単!

リッチアプリケ ション開発

リッチアプリケ ション開発

Uruma

簡単!

簡単!

リッチアプリケーション開発

リッチアプリケーション開発

2007.11.11

2007.11.11

エスエムジー株式会社

小森 裕介

小森 裕介([email protected]

(2)

はじめまして!

はじめまして!

•• 名前:

名前:

小森 裕介

•• Blog

Blog:

http://d.hatena.ne.jp/y-komori/

(こもりん日記)

•• 所属:

所属:

所属

所属

エスエムジー株式会社(http://www.smg.co.jp)

ジ 株式会社(

p

g

jp)

•• 主な仕事:

主な仕事:

Javaによる集中監視制御システム設計 開発

Javaによる集中監視制御システム設計・開発

Webアプリケーションシステムの設計・開発

教育・各種執筆活動

教育・各種執筆活動

日経ソフトウェア「とことん作って覚える! Java入門」

「なぜ、あなたはJavaでオブジェクト指向開発ができないのか」

•• Seasar2

Seasar2とのかかわり

とのかかわり

(3)

プロダクト名を変えました

プロダクト名を変えました

「S2JF

から「

Uruma

「S2JFace」から

Uruma」

SWT/JFace のみのサポ

トから

SWT/JFace のみのサポートから、

Eclipse RCP

Eclipse RCP

アプリケーションへサポートを拡大

より親しみやすく、覚えやすい名前へ

うるま:琉球語で

「珊瑚の島」

の意

2007年11月2日

version 0.1.0 リリース

(4)

Uruma

Uruma のコンセプト(1)

のコンセプト(1)

「つらいGUI」

「つらいGUI」

「つらいGUI」

「つらいGUI」

から

から

「楽しいGUI

「楽しいGUI

から

から

「楽しいGUI」

「楽しいGUI」

へ!

へ!

へ!

へ!

(5)

Uruma

Uruma のコンセプト(2)

のコンセプト(2)

Webアプリでは実現しにくい

Webアプリでは実現しにくい、

軽快なリッチGUIアプリケーション

簡単 開発 きる

簡単に開発できるフレームワーク

Javaの世界では、このようなフレームワークは

少ない

/

存在しても高価

で手が出しにくい

なんでもかんでも

Webアプリで作るのは間違い

でしょ!

世の中には

適材適所

ってものがあるんだ!

世の中には

適材適所

ってものがあるんだ!

(6)

Uruma

Uruma のコンセプト(3)

のコンセプト(3)

なぜ Webアプリケ ションが

なぜ、Webアプリケーションが

圧倒的多数

を占めるのか?

圧倒的多数

を占めるのか?

それは

それは・・・

OSS

のすぐれた

GUIフレームワーク

存在しないから

存在しないから

(7)

Uruma

Uruma のコンセプト(4)

のコンセプト(4)

ならば

ならば

創ってしまえ!!

創ってしまえ!!

(8)

Uruma

Uruma の技術コンセプト

の技術コンセプト

• XML によるGUI画面

の作成

• XML によるGUI画面

の作成

強力な

データバインディング

Eclipseプラグイン/Seasar の

知識がなくても

アプリを開発できる

アプリを開発できる

必要なのは

Urumaの規約

JavaAPI

の知識だけ

(9)

フレームワークのジレンマ

フレームワークのジレンマ

痒 と ろに

簡単に使える

痒いところに

手が届かない

手が届かない

UUruma

豊富な機能

習得が難しい

(10)

「わかりやすさ・使いやすさ」の追求

「わかりやすさ・使いやすさ」の追求

自明の設定は書かなくて済む

ようにする

自明の設定は書かなくて済む

ようにする

必要な部分のみを記述

するようにする

メソッドやフィールド名だけの暗黙規約は避けて、

アノテ ションによる明示的な指定

を採用

アノテーションによる明示的な指定

を採用

最小限の機能から

最小限の機能から、

実際に動かしながら

必要な機能を増やし

必要な機能を増やしていく、

アジャイルな開発

が可能に

(11)

多孔質

多孔質(?)

(?)フレームワーク

フレームワーク

U

A

Uruma

は見かけ上、

下位レイヤを隠蔽している

Uruma

Uruma

UserApp

下位レイヤを隠蔽している

必要に応じて

Uruma

Uruma

Workbench

必要に応じて

下位レイヤを

使うこともできる

JFace

Workbench

Eclipse

OSGi R

SWT

ti

p

RCP

OSGi Runtime

下位レイヤを

完全に隠蔽しない

ことで、

下位レイヤを

完全に隠蔽しない

ことで、

GUIの細かい制御が可能

になる

(12)

ライブで作る!

ライブで作る!

Uruma

Urumaアプリケーション

アプリケーション

もちろん

覧の

拡張子に応じた

「開く」メニューで

選択したファイルを実行

もちろん一覧の

ソートも可能

拡張子に応じた

アイコン表示

選択したファイルを実行

あなたなら、

あなたなら、

何時間、何ラインでつくれますか?

何時間、何ラインでつくれますか?

Cドライブをツリー表示

フォルダの中を表示

ツリーで選択された

Cドライブをツリ

表示

フォルダの中を表示

(13)

workbench.xml

workbench.xml でウィンドウを開く

でウィンドウを開く

ライブでつくる

ライブでつくる!

!

Uruma

Urumaアプリケーション(1)

アプリケーション(1)

„

workbench.xml

<?xml version="1.0" encoding="UTF-8"?>

<template xmlns="http://uruma.sandbox.seasar.org">

<workbench>

</workbench>

</workbench>

</template>

<?xml version="1.0" encoding="UTF-8"?>

//

„

workbench.xml

<template xmlns="http://uruma.sandbox.seasar.org">

<workbench

title=

"Uruma Example – FileManager"

initWidth=

"50%"

initHeight=

"50%"

image=

"/images/container.gif"

statusLine=

"true"

>

image

/images/container.gif

statusLine

true

>

</workbench>

(14)

メニューバーを追加する

メニューバーを追加する

ライブでつくる

ライブでつくる!

!

Uruma

Urumaアプリケーション(2)

アプリケーション(2)

„

workbench.xml

<workbench title="Uruma Example - FileManager"

initWidth="20%" initHeight="20%"

image="/images/container.gif" statusLine="true">

<menu>

<menu

text=

"ファイル(&amp;F)"

>

<menuItem

text=

"開く(&amp;O)"

image=

"folder"

/>

<menuItem

text=

"名前の変更(&amp;M)"

image=

"rename"

/>

</menu>

</menu>

<menu

text=

"編集(&amp;E)"

>

<menuItem

text=

"削除(&amp;D)"

image=

"cross"

/>

</menu>

</menu>

(15)

ビューパートをつくる

ビューパートをつくる

ライブでつくる

ライブでつくる!

!

Uruma

Urumaアプリケーション(3)

アプリケーション(3)

„

/views/folderView.xml

<?xml version="1.0" encoding="UTF-8"?>

<template xmlns="http://uruma.sandbox.seasar.org">

<viewPart

title=

"フォルダ・ビュー"

>

</viewPart>

</viewPart>

</template>

<?xml version="1 0" encoding="UTF 8"?>

„

/views/fileView.xml

<?xml version= 1.0 encoding= UTF-8 ?>

<template xmlns="http://uruma.sandbox.seasar.org">

<viewPart

title=

"ファイル・ビュー"

>

</viewPart>

</template>

/views 配下にXMLファイルを

</template>

/views 配下にXMLファイルを

置くだけでビューパートができる!

(16)

パースペクティブを設定する

パースペクティブを設定する

ライブでつくる

ライブでつくる!

!

Uruma

Urumaアプリケーション(4)

アプリケーション(4)

<?

l

i

"1 0"

di

"UTF 8"?>

„

workbench.xml

<?xml version="1.0" encoding="UTF-8"?>

<template xmlns="http://uruma.sandbox.seasar.org">

<workbench title="Uruma Example - FileManager" initWidth="30%"

initHeight="20%" image="/images/container.gif" statusLine="true">

<menu>

<menu text="ファイル(&amp;F)">

<menu text= ファイル(&amp;F) >

<menuItem text="開く(&amp;O)" image="folder" />

<menuItem text="名前の変更(&amp;M)" image="rename" />

</menu>

<menu text="編集(&amp;E)">

<menuItem id="fileDelete" text="削除(&amp;D)" image="cross" />

Id未指定の時は

ファイル名がidになる

<menuItem id

fileDelete text

削除(&amp;D) image

cross />

</menu>

</menu>

<perspective>

<part

ref=

"folderView"

ratio=

"30"

/>

ファイル名がidになる

p

/

<part

ref=

"fileView"

ratio=

"70"

/>

</perspective>

</workbench>

</template>

パートはidで参照

パートはidで参照

(17)

フォルダ・ビューを作る

フォルダ・ビューを作る

ライブでつくる

ライブでつくる!

!

Uruma

Urumaアプリケーション(5)

アプリケーション(5)

„

/views/folderView.xml

<viewPart title="フォルダ・ビュー">

<tree>

<treeItem

text=

"org"

image=

"folder"

>

<treeItem

text=

"seasar"

image=

"folder"

>

<treeItem

text=

seasar

image=

folder

>

<treeItem

text=

"uruma"

image=

"folder"

>

<treeItem

text=

"workbench.xml"

image=

"file"

/>

</treeItem>

<treeItem

text=

"framework"

image=

"folder"

/>

</treeItem>

</treeItem>

</tree>

</tree>

(18)

ファイル・ビューを作る

ファイル・ビューを作る

ライブでつくる

ライブでつくる!

!

Uruma

Urumaアプリケーション(6)

アプリケーション(6)

„

/views/folderView.xml

<viewPart title="ファイル・ビュー">

<table

linesVisible=

"false"

>

<tableColumn

width=

"70"

text=

"名前"

/>

<tableColumn

width=

"70"

text=

"サイズ"

alignment=

"RIGHT"

/>

<tableColumn

width=

70

text=

サイズ

alignment=

RIGHT

/>

<tableColumn

width=

"80"

text=

"更新日時"

/>

<tableItem>

<tableCell

text=

"file-1 txt"

image=

"file"

/>

<tableCell

text

file 1.txt

image

file

/>

<tableCell

text=

"123,456,789"

/>

<tableCell

text=

"2007/11/11 14:40:00"

/>

</tableItem>

<tableItem>

<tableCell

text=

"file-2.txt"

image=

"file"

/>

<tableCell

text=

"123,456,789"

/>

<t bl C ll

t

t

"2007/11/11 14:40:00"

/>

<tableCell

text=

2007/11/11 14:40:00

/>

</tableItem>

</table>

</viewPart>

(19)

フォルダツリーを表示する

フォルダツリーを表示する

ライブでつくる

ライブでつくる!

!

Uruma

Urumaアプリケーション(7)

アプリケーション(7)

F ld

T

F ld

T

„

FolderTreeContentProvider.java

(抜粋)

"

"

„

/views/folderView.xml

(抜粋)

public class

FolderTree

FolderTree

ContentProvider

implements

ITreeContentProvider {

public

Object[] getChildren(final

Object parentElement) {

File parentFolder = (File) parentElement;

File[] children = parentFolder listFiles();

<tree

id=

"folderTree"

>

Id の一致する

File[] children = parentFolder.listFiles();

List<File> temp = new ArrayList<File>();

for

(File child : children) {

if

(child.isDirectory()) {

temp.add(child);

}

コンテントプロバイダ

ラベルプロバイダが

自動設定される

}

}

return

temp.toArray(new

File[temp.size()]);

}

public boolean

hasChildren(final

Object element) {

bli

l

FolderTree

FolderTree

L b lP

id

„

FolderTreeLabelProvider.java

(抜粋)

自動設定される

File file = (File) element;

return

file.isDirectory();

}

}

public class

FolderTree

FolderTree

LabelProvider

extends

LabelProvider {

public

Image getImage(final Object element) {

Image folderImage = ImageManager.loadImage(

"folder"

);

return

folderImage;

g

}

public

String getText(final Object element) {

File folder = (File) element;

return

folder.getName();

}

}

}

(20)

フォルダビューのアクションクラスを作る

フォルダビューのアクションクラスを作る

ライブでつくる

ライブでつくる!

!

Uruma

Urumaアプリケーション(8)

アプリケーション(8)

„

FolderViewAction.java

(これだけ!)

@Form(FolderViewAction.class)

public class

FolderView

FolderView

Action {

@ExportValue(

id =

"folderTree"

)

bli

Fil

t

Fil (

"

/"

)

public File root = new File(

"c:/"

);

}

@ExportValue

アノテートされたフィールドが、

時 バイ ドされる

画面表示時にバインドされる

(21)

ファイルビューにフォルダの内容を表示する

ファイルビューにフォルダの内容を表示する

ライブでつくる

ライブでつくる!

!

Uruma

Urumaアプリケーション(9)

アプリケーション(9)

@Form(FileViewAction.class)

public class

FileViewAction {

„

FileViewAction.java

public class

FileDto {

public

String

absolutePath

;

„

FileDto.java

public class

FileViewAction {

@ExportValue(id =

"fileDetailTable"

)

public

List<FileDto> fileList =

new

ArrayList<FileDto>();

@SelectionListener(partId =

"folderView"

)

public void

selectionChanged(

final

File parentFolder) {

public

String

absolutePath

;

@BindingLabel

public

String

fileName

;

@BindingLabel

public

String

fileSize

;

public void

selectionChanged(

final

File parentFolder) {

fileList.clear();

File[] children = parentFolder.listFiles();

(…途中省略…)

fil Li t

dd(fil Dt );

public

String

fileSize

;

@BindingLabel

public

String

fileUpdateTime

;

}

@SelectionListener

fileList.add(fileDto);

}

}

}

@BindingLabel

アノテートされたフィールドが、

同じ名前のカラムに表示される

@SelectionListener

アノテートされたメソッドが、

ツリー選択時に呼び出される

<table id=

"fileDetailTable"

linesVisible="false">

<tableColumn

id=

"fileName"

width="70" text="名前" />

„

/view/fileView.xml

<tableColumn id=

fileName

width= 70 text= 名前 />

<tableColumn id=

"fileSize"

width="70" text="サイズ"

alignment="RIGHT" />

<tableColumn id=

"fileUpdateTime"

width="80“

t

t "更新日時" />

text="更新日時" />

</table>

(22)

アイコン表示とソート機能を強化する

アイコン表示とソート機能を強化する

ライブでつくる

ライブでつくる!

!

Uruma

Urumaアプリケーション(10)

アプリケーション(10)

ビューアの内容表示は決まった名前のクラスを用意するだけ!

(画面コンポーネントの

id

ContentProvider

(画面コンポーネントの

id

LabelProvider

(画面コンポ ネントの

id)

Sorter

(画面コンポーネントの

id)

Sorter

FileDetailTable

Sorter

カテゴライズされたソート機能を追加

FileDetailTable

LabelProvider

拡張子に応じたアイコンを表示

拡張子に応じたアイコンを表示

(23)

メニューからアクションを実行する

メニューからアクションを実行する

ライブでつくる

ライブでつくる!

!

Uruma

Urumaアプリケーション(11)

アプリケーション(11)

<

t

t "

イル(&

F)">

„

workbench.xml

<menu text="ファイル(&amp;F)">

<menuItem id=

"fileOpen"

text="開く(&amp;O)" image="folder" />

<menuItem text="名前の変更(&amp;M)" image="rename" />

</menu>

@ImportSelection(id =

"fileDetailTable"

)

public

List<FileDto> selectedFile;

„

fileViewAction.java

テーブルで選択中の

オブジェクトが代入される

@EventListener(id =

"fileOpen"

)

public void

onFileOpenMenu() {

if (selectedFile.size() == 1) {

FileDto dto = selectedFile get(0);

オブジェクトが代入される

対応する id のメニューが

選択されると呼び出される

FileDto dto = selectedFile.get(0);

File file =

new

File(dto.absolutePath);

if

(file.isFile()) {

Program program = Program.findProgram(StringUtil

.substringToLast(dto.fileName, "."));

選択されると呼び出される

g

if

(program !=

null

) {

Program.launch(dto.absolutePath);

}

}

}

}

}

(24)

項目選択時のみメニューを有効にする

項目選択時のみメニューを有効にする

ライブでつくる

ライブでつくる!

!

Uruma

Urumaアプリケーション(12)

アプリケーション(12)

<

It

id "fil O

" t

t "開く(&

O)" i

"f ld

"

„

workbench.xml

<menuItem id="fileOpen" text="開く(&amp;O)" image="folder"

enablesDependingId=

"fileDetailTable"

enablesFor=

"SINGLE"

/>

SELECTION(1項目以上)

指定されたテーブルの

選択状態によって

選択可/不可が変化

SELECTION(1項目以上),

SINGLE(1項目のみ),

PAIR(2項目のみ),

MULTI(2項目以上)

MULTI(2項目以上)

から選べる

(25)

今後の予定

今後の予定

••

開発環境の整備

開発環境の整備

開発環境の整備

開発環境の整備

Uruma Studio(仮称)

••

機能向上

機能向上

機能向上

機能向上

RCPサポート機能追加

エディタ対応、プリファレンス、EclipseForms ・・・

p

バリデーション機能の提供

画面定義テンプレートの簡素化

(継承、コンポーネント機能、etc…)

GUIテストのサポート

••

品質向上

品質向上

テスト網羅性向上

サンプルの充実と、不具合修正

リファレンスマニュアルの整備

(26)

Uruma

Urumaのリソース

のリソース

••

Web

Webサイト

サイト

••

Web

Webサイト

サイト

http://uruma.sandbox.seasar.org/ja/

•• ダウンロードサイト(サンプルアプリケーション有)

ダウンロードサイト(サンプルアプリケーション有)

•• ダウンロードサイト(サンプルアプリケーション有)

ダウンロードサイト(サンプルアプリケーション有)

http://uruma.sandbox.seasar.org/ja/download.html

開発者ML

開発者ML

•• 開発者ML

開発者ML

[email protected]

•• Subversion

Subversion リポジトリ

リポジトリ

https://www.seasar.org/svn/sandbox/uruma/

•• トラッキング(

トラッキング(JIRA

JIRA)

https://www.seasar.org/issues/browse/URUMA

p

g

(27)

さいごに

さいごに

Uruma

は現在

Uruma

は現在

Sandboxプロジェクトにて

鋭意開発中です

みなさまからのご意見、

ご要望をお待ちしております

ご要望をお待ちしております

(28)

ご質問について

ご質問について

質問コーナーで

質問コーナーで

お待ちしています

お待ちしています

気軽にお越しください

気軽にお越しくださ

(29)

ご静聴

ご静聴

ありがとうございました

ありがとうございました

表 時 バイ ドされる画面表示時にバインドされる

参照

関連したドキュメント

ユーザ情報を 入力してくだ さい。必要に 応じて複数(2 つ目)のメー ルアドレスが 登録できます。.

※ログイン後最初に表示 される申込メニュー画面 の「ユーザ情報変更」ボタ ンより事前にメールアド レスをご登録いただきま

Webカメラ とスピーカー 、若しくはイヤホン

特に LUNA 、教学 Web

ユーザ情報を 入力してくだ さい。必要に 応じて複数(2 つ目)のメー ルアドレスが 登録できます。.

[r]

教職員用 平均点 保護者用 平均点 生徒用 平均点.

[r]