本格派エンジニアの工具箱

第31回 Grailsライクにデスクトップアプリケーションを構築する「Griffon」

この記事を読むのに必要な時間:およそ 3 分

Griffonとは

今回はGrailsと同様の使い勝手でデスクトップアプリケーションを構築することができるGriffonを紹介します。Grailsは,JVM言語Groovyを使って,Ruby on RailsのようにコマンドラインベースでWebアプリケーションを構築することができるフレームです。Griffonはその使用感をデスクトップアプリケーションの開発に適用したフレームワークで,簡単なコマンドでMVC準拠のアプリケーションを構築・実行することができます。

Griffonの主な特徴としては,次のような項目が挙げられます。

  • シンプルなコードでMVCアプリケーションを実現できる
  • JavaおよびGroovyの資産が利用できる
  • 各種Groovy Builderが適用できる
  • プラグインによる拡張が可能
  • AppletやJava Web Startで公開可能なパッケージ生成機能を備えている

GriffonはGroovyで作られたフレームワークであり,開発の基本となる言語も当然Groovyですが,GroovyからはJavaライブラリを呼び出すことができるため,Swingを含めてJavaが持つ豊富な機能をそのまま利用することが可能です。

Griffonによるアプリケーションの作成と実行

Griffonはこのページよりダウンロードできます。本稿執筆時点の最新版はGriffon 0.9.5です。バイナリをダウンロードしたら,インストールしたい場所に解凍してください。

解凍した先のパス("C:\griffon-0.9.5"など)を,環境変数GRIFFON_HOMEに設定します。そして環境変数PATHに,"%GRIFFON_HOME%\bin"を追加します。初期設定はこれだけです。コマンドプロンプトを開いて,任意の場所で「griffon」コマンドを実行してください。必要なライブラリなどが読み込まれて,Griffonによるアプリケーション開発ができるようになります。

C:\work\griffon> griffon
Welcome to Griffon 0.9.5 - http://griffon.codehaus.org/
Licensed under Apache Standard License 2.0
Griffon home is set to: C:\work\tools\griffon-0.9.5
…

アプリケーションの作成は,⁠griffon create-app」コマンドで行います。次の例は,⁠GriffonSample」というアプリケーションを作成するものです。

C:\work\griffon> griffon create-app GriffonSample

成功すると,GriffonSampleという名前のフォルダが生成され,その下に必要な雛形ファイルがコピーされます。GriffonSampleフォルダの構成は図1のようになっています。

図1 作成したアプリケーションのフォルダ構成

図1 作成したアプリケーションのフォルダ構成

このうち,モデルを実装するコードはmodelsフォルダに,コントローラを実装するコードはcontrollersフォルダに,ビューを実装するコードはiviewsフォルダに配置することになります。

初期状態ですでに実行可能な形になっているはずなので,まずはそのまま実行してみましょう。GriffonSampleフォルダに移動して,⁠griffon run-app」コマンドで次のように実行します。

C:\work\griffon> cd GriffonSample
C:\work\griffon\GriffonSample> griffon run-app

正しく実行されれば,図2のようなウィンドウが表示されるはずです。

図2 GriffonSampleの実行例(初期状態)

図2 GriffonSampleの実行例(初期状態)

モデル/ビュー/コントロールのカスタマイズ

続いて,モデル,ビュー,コントロールの各コードを修正してみましょう。まずモデルについては,modelsフォルダのGriffonSampleModel.groovyが対象のコードになります。ここでは,次のようにプロパティとして"name"と"message"の2つの値を設定しました。@Bindableアノテーションは,ビューとのバインドを許可するためのものです。

package griffonsample
import groovy.beans.Bindable

class GriffonSampleModel {
    @Bindable String name
    @Bindable String message = "Hello Griffon!"
}

ビューのコードはviewsフォルダのGriffonSampleView.groovyです。ここでは,テキストフィールドに名前を入力し,下部にメッセージを表示するようなUIを作成しました。ボタンを押すとコントローラのsubmitメソッドが実行されます。

package griffonsample

application(title: 'GriffonSample',
    preferredSize: [320, 180],
    pack: true,
    locationByPlatform:true,
    iconImage: imageIcon('/griffon-icon-48x48.png').image,
    iconImages: [imageIcon('/griffon-icon-48x48.png').image,
               imageIcon('/griffon-icon-32x32.png').image,
               imageIcon('/griffon-icon-16x16.png').image]) {

    // add content here
    borderLayout()
    panel(constraints: CENTER, border: emptyBorder(6)) {
	    borderLayout()
	    textField(columns: 20, 
	            border: titledBorder('名前'), 
		    text: bind(target: model, targetProperty: 'name'),   // nameプロパティとバインド
		    constraints: CENTER)
	    button('Submit', 
		    actionPerformed: controller.&submit, 
		    constraints: SOUTH)
    }
    label(text: bind {model.message},    // messageプロパティとバインド
            border: titledBorder('メッセージ'), 
	    constraints: SOUTH)
}

テキストフィールドの値はモデルのnameプロパティと関連付けるようにします。それには,bind()メソッドを使って,targetにモデルを表すmodelを,targetPropertyにバインド対象のプロパティ名である'name'を渡します。同様に,ラベルの値はモデルのmessageプロパティにバインドさせます。こちらはtextプロパティの値に「bind {model.message}」を指定することで,モデルのmessageプロパティの値がセットされます。

コントローラのコードはcontrollersフォルダのGriffonSampleController.groovyです。今回は,nameプロパティの値を使って作成した文字列を,messageプロパティにセットするようにしました。

package griffonsample

class GriffonSampleController {
    // these will be injected by Griffon
    def model
    def view

    def submit = { evt = null -> 
        model.message = 'Hello ' + model.name + '!'
    }
}

修正が完了したら,再度griffon run-appコマンドで実行してみましょう。図3,図4に実行例を示します。名前を入力して[Submit]ボタンを押すと,下部に入力値が反映されることが確認できるはずです。

図3 GriffonSampleの実行例(修正後)

図3 GriffonSampleの実行例(修正後)

図4 GriffonSampleの実行例(修正後)

図4 GriffonSampleの実行例(修正後)

Griffonで雛形を生成すれば,深く考えなくても自然とMVC形式のアプリケーションになる点が大きなメリットだと思います。GroovyはJavaとの親和性が極めて高いので,Groovyに慣れていない開発者でも,比較的容易に使いこなすことができるはずです。

著者プロフィール

杉山貴章(すぎやまたかあき)

ONGS Inc.所属のプログラマ兼テクニカルライター。雑誌,書籍,Webメディアで多数の著作をもつ。

著書

コメント

コメントの記入